-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dataviews: Improve story #59773
Dataviews: Improve story #59773
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,10 +8,15 @@ import { useState, useMemo, useCallback } from '@wordpress/element'; | |
*/ | ||
import { DataViews } from '../index'; | ||
import { DEFAULT_VIEW, actions, data } from './fixtures'; | ||
import { LAYOUT_GRID, LAYOUT_TABLE } from '../constants'; | ||
import { | ||
LAYOUT_GRID, | ||
LAYOUT_TABLE, | ||
OPERATOR_IS_NONE, | ||
OPERATOR_IS_ANY, | ||
} from '../constants'; | ||
|
||
const meta = { | ||
title: 'DataViews (Experimental)/DataViews', | ||
title: 'DataViews/DataViews', | ||
component: DataViews, | ||
}; | ||
export default meta; | ||
|
@@ -49,6 +54,20 @@ const fields = [ | |
maxWidth: 400, | ||
enableHiding: false, | ||
}, | ||
{ | ||
header: 'Type', | ||
id: 'type', | ||
getValue: ( { item } ) => item.type, | ||
maxWidth: 400, | ||
enableHiding: false, | ||
type: 'enumeration', | ||
elements: [ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right now the filtering happens manually, so this just adds the filter in UI, but not filters results. For client side handling this should probably be absorbed by the package in the future. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The DataViews component can't know if the filtering is happening client side or server side, which means it can't know if the available values are exhaustive. I'm fine with this being defined on the field personally. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I pushed the filtering for now. |
||
{ value: 'Not a planet', label: 'Not a planet' }, | ||
{ value: 'Ice giant', label: 'Ice giant' }, | ||
{ value: 'Terrestrial', label: 'Terrestrial' }, | ||
{ value: 'Gas giant', label: 'Gas giant' }, | ||
], | ||
}, | ||
{ | ||
header: 'Description', | ||
id: 'description', | ||
|
@@ -72,6 +91,29 @@ export const Default = ( props ) => { | |
].some( ( field ) => field.includes( normalizedSearch ) ); | ||
} ); | ||
} | ||
|
||
if ( view.filters.length > 0 ) { | ||
view.filters.forEach( ( filter ) => { | ||
if ( | ||
filter.field === 'type' && | ||
filter.operator === OPERATOR_IS_ANY && | ||
filter?.value?.length > 0 | ||
) { | ||
filteredData = filteredData.filter( ( item ) => { | ||
return filter.value.includes( item.type ); | ||
} ); | ||
} else if ( | ||
filter.field === 'type' && | ||
filter.operator === OPERATOR_IS_NONE && | ||
filter?.value?.length > 0 | ||
) { | ||
filteredData = filteredData.filter( ( item ) => { | ||
return ! filter.value.includes( item.type ); | ||
} ); | ||
} | ||
} ); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should build a reusable hook for this, the code will become more complex over time when we add more filter types and operators. |
||
|
||
// Handle sorting. | ||
if ( view.sort ) { | ||
const stringSortingFields = [ 'title' ]; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,12 @@ | ||
.dataviews-wrapper { | ||
width: 100%; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This style makes the assumption that the parent div doesn't have a padding which is not always true. |
||
height: 100%; | ||
overflow: auto; | ||
box-sizing: border-box; | ||
scroll-padding-bottom: $grid-unit-80; | ||
} | ||
|
||
.dataviews-filters__view-actions { | ||
box-sizing: border-box; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This style is present in WordPress "reset.css" but is needed for places like storybook or usage outside of WP. This makes the style more portable. |
||
padding: $grid-unit-15 $grid-unit-40 0; | ||
margin-bottom: $grid-unit-15; | ||
flex-shrink: 0; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@oandregal I wanted to add a simple "text" field, Like an input where I can type the value or "start with" something ... I was surprised to find out that we don't support that yet and we only support "enumeration".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, all the current implementations use the global search instead. Added it to the backlog and asked for design input.