@wordpress/dataviews 2.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +23 -8
- package/build/components/dataform/index.js +78 -0
- package/build/components/dataform/index.js.map +1 -0
- package/build/components/dataviews/index.js +115 -0
- package/build/components/dataviews/index.js.map +1 -0
- package/build/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +39 -16
- package/build/components/dataviews-bulk-actions/index.js.map +1 -0
- package/build/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +36 -20
- package/build/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
- package/build/components/dataviews-context/index.js +36 -0
- package/build/components/dataviews-context/index.js.map +1 -0
- package/build/{add-filter.js → components/dataviews-filters/add-filter.js} +3 -3
- package/build/components/dataviews-filters/add-filter.js.map +1 -0
- package/build/{filter-summary.js → components/dataviews-filters/filter-summary.js} +15 -14
- package/build/components/dataviews-filters/filter-summary.js.map +1 -0
- package/build/{filters.js → components/dataviews-filters/index.js} +15 -16
- package/build/components/dataviews-filters/index.js.map +1 -0
- package/build/{reset-filters.js → components/dataviews-filters/reset-filters.js} +1 -1
- package/build/components/dataviews-filters/reset-filters.js.map +1 -0
- package/build/{search-widget.js → components/dataviews-filters/search-widget.js} +21 -19
- package/build/components/dataviews-filters/search-widget.js.map +1 -0
- package/build/{item-actions.js → components/dataviews-item-actions/index.js} +3 -3
- package/build/components/dataviews-item-actions/index.js.map +1 -0
- package/build/components/dataviews-layout/index.js +53 -0
- package/build/components/dataviews-layout/index.js.map +1 -0
- package/build/{pagination.js → components/dataviews-pagination/index.js} +18 -15
- package/build/components/dataviews-pagination/index.js.map +1 -0
- package/build/{search.js → components/dataviews-search/index.js} +10 -6
- package/build/components/dataviews-search/index.js.map +1 -0
- package/build/components/dataviews-selection-checkbox/index.js +52 -0
- package/build/components/dataviews-selection-checkbox/index.js.map +1 -0
- package/build/{view-actions.js → components/dataviews-view-config/index.js} +94 -80
- package/build/components/dataviews-view-config/index.js.map +1 -0
- package/build/filter-and-sort-data-view.js +4 -1
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/index.js +8 -1
- package/build/index.js.map +1 -1
- package/build/layouts/grid/density-picker.js +143 -0
- package/build/layouts/grid/density-picker.js.map +1 -0
- package/build/{view-grid.js → layouts/grid/index.js} +40 -53
- package/build/layouts/grid/index.js.map +1 -0
- package/build/layouts/index.js +52 -0
- package/build/layouts/index.js.map +1 -0
- package/build/{view-list.js → layouts/list/index.js} +31 -27
- package/build/layouts/list/index.js.map +1 -0
- package/build/layouts/table/column-header-menu.js +196 -0
- package/build/layouts/table/column-header-menu.js.map +1 -0
- package/build/layouts/table/index.js +350 -0
- package/build/layouts/table/index.js.map +1 -0
- package/build/normalize-fields.js +1 -1
- package/build/normalize-fields.js.map +1 -1
- package/build/private-types.js +6 -0
- package/build/private-types.js.map +1 -0
- package/build/types.js.map +1 -1
- package/build/utils.js.map +1 -1
- package/build-module/components/dataform/index.js +72 -0
- package/build-module/components/dataform/index.js.map +1 -0
- package/build-module/components/dataviews/index.js +108 -0
- package/build-module/components/dataviews/index.js.map +1 -0
- package/build-module/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +39 -17
- package/build-module/components/dataviews-bulk-actions/index.js.map +1 -0
- package/build-module/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +35 -20
- package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
- package/build-module/components/dataviews-context/index.js +30 -0
- package/build-module/components/dataviews-context/index.js.map +1 -0
- package/build-module/{add-filter.js → components/dataviews-filters/add-filter.js} +3 -3
- package/build-module/components/dataviews-filters/add-filter.js.map +1 -0
- package/build-module/{filter-summary.js → components/dataviews-filters/filter-summary.js} +15 -14
- package/build-module/components/dataviews-filters/filter-summary.js.map +1 -0
- package/build-module/{filters.js → components/dataviews-filters/index.js} +16 -17
- package/build-module/components/dataviews-filters/index.js.map +1 -0
- package/build-module/{reset-filters.js → components/dataviews-filters/reset-filters.js} +1 -1
- package/build-module/components/dataviews-filters/reset-filters.js.map +1 -0
- package/build-module/{search-widget.js → components/dataviews-filters/search-widget.js} +21 -19
- package/build-module/components/dataviews-filters/search-widget.js.map +1 -0
- package/build-module/{item-actions.js → components/dataviews-item-actions/index.js} +3 -3
- package/build-module/components/dataviews-item-actions/index.js.map +1 -0
- package/build-module/components/dataviews-layout/index.js +45 -0
- package/build-module/components/dataviews-layout/index.js.map +1 -0
- package/build-module/{pagination.js → components/dataviews-pagination/index.js} +19 -17
- package/build-module/components/dataviews-pagination/index.js.map +1 -0
- package/build-module/{search.js → components/dataviews-search/index.js} +10 -7
- package/build-module/components/dataviews-search/index.js.map +1 -0
- package/build-module/components/dataviews-selection-checkbox/index.js +45 -0
- package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -0
- package/build-module/{view-actions.js → components/dataviews-view-config/index.js} +98 -84
- package/build-module/components/dataviews-view-config/index.js.map +1 -0
- package/build-module/filter-and-sort-data-view.js +4 -1
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/index.js +2 -1
- package/build-module/index.js.map +1 -1
- package/build-module/layouts/grid/density-picker.js +138 -0
- package/build-module/layouts/grid/density-picker.js.map +1 -0
- package/build-module/{view-grid.js → layouts/grid/index.js} +37 -50
- package/build-module/layouts/grid/index.js.map +1 -0
- package/build-module/layouts/index.js +43 -0
- package/build-module/layouts/index.js.map +1 -0
- package/build-module/{view-list.js → layouts/list/index.js} +29 -25
- package/build-module/layouts/list/index.js.map +1 -0
- package/build-module/layouts/table/column-header-menu.js +190 -0
- package/build-module/layouts/table/column-header-menu.js.map +1 -0
- package/build-module/layouts/table/index.js +344 -0
- package/build-module/layouts/table/index.js.map +1 -0
- package/build-module/normalize-fields.js +1 -1
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/private-types.js +2 -0
- package/build-module/private-types.js.map +1 -0
- package/build-module/types.js.map +1 -1
- package/build-module/utils.js.map +1 -1
- package/build-style/style-rtl.css +607 -561
- package/build-style/style.css +607 -561
- package/build-types/components/dataform/index.d.ts +17 -0
- package/build-types/components/dataform/index.d.ts.map +1 -0
- package/build-types/components/dataform/stories/index.story.d.ts +11 -0
- package/build-types/components/dataform/stories/index.story.d.ts.map +1 -0
- package/build-types/components/dataviews/index.d.ts +33 -0
- package/build-types/components/dataviews/index.d.ts.map +1 -0
- package/build-types/{stories → components/dataviews/stories}/fixtures.d.ts +18 -17
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -0
- package/build-types/components/dataviews/stories/index.story.d.ts +46 -0
- package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -0
- package/build-types/components/dataviews-bulk-actions/index.d.ts +5 -0
- package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -0
- package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +2 -0
- package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +1 -0
- package/build-types/components/dataviews-context/index.d.ts +26 -0
- package/build-types/components/dataviews-context/index.d.ts.map +1 -0
- package/build-types/{add-filter.d.ts → components/dataviews-filters/add-filter.d.ts} +1 -2
- package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -0
- package/build-types/{filter-summary.d.ts → components/dataviews-filters/filter-summary.d.ts} +1 -1
- package/build-types/components/dataviews-filters/filter-summary.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/index.d.ts +4 -0
- package/build-types/components/dataviews-filters/index.d.ts.map +1 -0
- package/build-types/{reset-filters.d.ts → components/dataviews-filters/reset-filters.d.ts} +1 -2
- package/build-types/components/dataviews-filters/reset-filters.d.ts.map +1 -0
- package/build-types/{search-widget.d.ts → components/dataviews-filters/search-widget.d.ts} +1 -2
- package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -0
- package/build-types/components/dataviews-item-actions/index.d.ts +35 -0
- package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -0
- package/build-types/components/dataviews-layout/index.d.ts +2 -0
- package/build-types/components/dataviews-layout/index.d.ts.map +1 -0
- package/build-types/components/dataviews-pagination/index.d.ts +4 -0
- package/build-types/components/dataviews-pagination/index.d.ts.map +1 -0
- package/build-types/components/dataviews-search/index.d.ts +6 -0
- package/build-types/components/dataviews-search/index.d.ts.map +1 -0
- package/build-types/components/dataviews-selection-checkbox/index.d.ts +16 -0
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -0
- package/build-types/components/dataviews-view-config/index.d.ts +8 -0
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -0
- package/build-types/filter-and-sort-data-view.d.ts +2 -2
- package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
- package/build-types/index.d.ts +2 -1
- package/build-types/index.d.ts.map +1 -1
- package/build-types/layouts/grid/density-picker.d.ts +5 -0
- package/build-types/layouts/grid/density-picker.d.ts.map +1 -0
- package/build-types/layouts/grid/index.d.ts +3 -0
- package/build-types/layouts/grid/index.d.ts.map +1 -0
- package/build-types/{layouts.d.ts → layouts/index.d.ts} +6 -5
- package/build-types/layouts/index.d.ts.map +1 -0
- package/build-types/layouts/list/index.d.ts +3 -0
- package/build-types/layouts/list/index.d.ts.map +1 -0
- package/build-types/layouts/table/column-header-menu.d.ts +17 -0
- package/build-types/layouts/table/column-header-menu.d.ts.map +1 -0
- package/build-types/layouts/table/index.d.ts +4 -0
- package/build-types/layouts/table/index.d.ts.map +1 -0
- package/build-types/normalize-fields.d.ts +2 -2
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/private-types.d.ts +3 -0
- package/build-types/private-types.d.ts.map +1 -0
- package/build-types/types.d.ts +106 -46
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils.d.ts +2 -2
- package/build-types/utils.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/components/dataform/index.tsx +106 -0
- package/src/components/dataform/stories/index.story.tsx +42 -0
- package/src/components/dataviews/index.tsx +149 -0
- package/src/{stories → components/dataviews/stories}/fixtures.js +23 -11
- package/src/components/dataviews/stories/index.story.js +65 -0
- package/src/components/dataviews/style.scss +97 -0
- package/src/{bulk-actions.tsx → components/dataviews-bulk-actions/index.tsx} +58 -36
- package/src/components/dataviews-bulk-actions/style.scss +7 -0
- package/src/{bulk-actions-toolbar.tsx → components/dataviews-bulk-actions-toolbar/index.tsx} +48 -36
- package/src/components/dataviews-bulk-actions-toolbar/style.scss +45 -0
- package/src/components/dataviews-context/index.ts +49 -0
- package/src/{add-filter.tsx → components/dataviews-filters/add-filter.tsx} +4 -4
- package/src/{filter-summary.tsx → components/dataviews-filters/filter-summary.tsx} +36 -22
- package/src/{filters.tsx → components/dataviews-filters/index.tsx} +11 -25
- package/src/{reset-filters.tsx → components/dataviews-filters/reset-filters.tsx} +2 -2
- package/src/{search-widget.tsx → components/dataviews-filters/search-widget.tsx} +20 -20
- package/src/components/dataviews-filters/style.scss +252 -0
- package/src/{item-actions.tsx → components/dataviews-item-actions/index.tsx} +16 -17
- package/src/components/dataviews-item-actions/style.scss +3 -0
- package/src/components/dataviews-layout/index.tsx +51 -0
- package/src/{pagination.tsx → components/dataviews-pagination/index.tsx} +15 -23
- package/src/components/dataviews-pagination/style.scss +26 -0
- package/src/{search.tsx → components/dataviews-search/index.tsx} +5 -10
- package/src/components/dataviews-selection-checkbox/index.tsx +65 -0
- package/src/components/dataviews-selection-checkbox/style.scss +14 -0
- package/src/{view-actions.tsx → components/dataviews-view-config/index.tsx} +116 -119
- package/src/filter-and-sort-data-view.ts +13 -3
- package/src/index.ts +2 -1
- package/src/layouts/grid/density-picker.tsx +136 -0
- package/src/{view-grid.tsx → layouts/grid/index.tsx} +45 -63
- package/src/layouts/grid/style.scss +140 -0
- package/src/layouts/index.ts +66 -0
- package/src/{view-list.tsx → layouts/list/index.tsx} +40 -30
- package/src/layouts/list/style.scss +189 -0
- package/src/layouts/table/column-header-menu.tsx +268 -0
- package/src/layouts/table/index.tsx +471 -0
- package/src/layouts/table/style.scss +201 -0
- package/src/normalize-fields.ts +6 -4
- package/src/private-types.tsx +2 -0
- package/src/style.scss +11 -919
- package/src/test/filter-and-sort-data-view.js +17 -2
- package/src/types.ts +113 -55
- package/src/utils.ts +2 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/build/add-filter.js.map +0 -1
- package/build/bulk-actions-toolbar.js.map +0 -1
- package/build/bulk-actions.js.map +0 -1
- package/build/dataviews.js +0 -136
- package/build/dataviews.js.map +0 -1
- package/build/filter-summary.js.map +0 -1
- package/build/filters.js.map +0 -1
- package/build/item-actions.js.map +0 -1
- package/build/layouts.js +0 -38
- package/build/layouts.js.map +0 -1
- package/build/pagination.js.map +0 -1
- package/build/reset-filters.js.map +0 -1
- package/build/search-widget.js.map +0 -1
- package/build/search.js.map +0 -1
- package/build/single-selection-checkbox.js +0 -63
- package/build/single-selection-checkbox.js.map +0 -1
- package/build/view-actions.js.map +0 -1
- package/build/view-grid.js.map +0 -1
- package/build/view-list.js.map +0 -1
- package/build/view-table.js +0 -409
- package/build/view-table.js.map +0 -1
- package/build-module/add-filter.js.map +0 -1
- package/build-module/bulk-actions-toolbar.js.map +0 -1
- package/build-module/bulk-actions.js.map +0 -1
- package/build-module/dataviews.js +0 -129
- package/build-module/dataviews.js.map +0 -1
- package/build-module/filter-summary.js.map +0 -1
- package/build-module/filters.js.map +0 -1
- package/build-module/item-actions.js.map +0 -1
- package/build-module/layouts.js +0 -30
- package/build-module/layouts.js.map +0 -1
- package/build-module/pagination.js.map +0 -1
- package/build-module/reset-filters.js.map +0 -1
- package/build-module/search-widget.js.map +0 -1
- package/build-module/search.js.map +0 -1
- package/build-module/single-selection-checkbox.js +0 -56
- package/build-module/single-selection-checkbox.js.map +0 -1
- package/build-module/view-actions.js.map +0 -1
- package/build-module/view-grid.js.map +0 -1
- package/build-module/view-list.js.map +0 -1
- package/build-module/view-table.js +0 -402
- package/build-module/view-table.js.map +0 -1
- package/build-types/add-filter.d.ts.map +0 -1
- package/build-types/bulk-actions-toolbar.d.ts +0 -12
- package/build-types/bulk-actions-toolbar.d.ts.map +0 -1
- package/build-types/bulk-actions.d.ts +0 -14
- package/build-types/bulk-actions.d.ts.map +0 -1
- package/build-types/dataviews.d.ts +0 -24
- package/build-types/dataviews.d.ts.map +0 -1
- package/build-types/filter-summary.d.ts.map +0 -1
- package/build-types/filters.d.ts +0 -13
- package/build-types/filters.d.ts.map +0 -1
- package/build-types/item-actions.d.ts +0 -35
- package/build-types/item-actions.d.ts.map +0 -1
- package/build-types/layouts.d.ts.map +0 -1
- package/build-types/pagination.d.ts +0 -16
- package/build-types/pagination.d.ts.map +0 -1
- package/build-types/reset-filters.d.ts.map +0 -1
- package/build-types/search-widget.d.ts.map +0 -1
- package/build-types/search.d.ts +0 -13
- package/build-types/search.d.ts.map +0 -1
- package/build-types/single-selection-checkbox.d.ts +0 -17
- package/build-types/single-selection-checkbox.d.ts.map +0 -1
- package/build-types/stories/fixtures.d.ts.map +0 -1
- package/build-types/stories/index.story.d.ts +0 -15
- package/build-types/stories/index.story.d.ts.map +0 -1
- package/build-types/view-actions.d.ts +0 -12
- package/build-types/view-actions.d.ts.map +0 -1
- package/build-types/view-grid.d.ts +0 -4
- package/build-types/view-grid.d.ts.map +0 -1
- package/build-types/view-list.d.ts +0 -4
- package/build-types/view-list.d.ts.map +0 -1
- package/build-types/view-table.d.ts +0 -5
- package/build-types/view-table.d.ts.map +0 -1
- package/src/dataviews.tsx +0 -189
- package/src/layouts.ts +0 -39
- package/src/single-selection-checkbox.tsx +0 -80
- package/src/stories/index.story.js +0 -64
- package/src/view-table.tsx +0 -603
|
@@ -19,15 +19,15 @@ import { __ } from '@wordpress/i18n';
|
|
|
19
19
|
/**
|
|
20
20
|
* Internal dependencies
|
|
21
21
|
*/
|
|
22
|
-
import ItemActions from '
|
|
23
|
-
import SingleSelectionCheckbox from '
|
|
24
|
-
import { useHasAPossibleBulkAction } from '
|
|
25
|
-
import type { Action,
|
|
22
|
+
import ItemActions from '../../components/dataviews-item-actions';
|
|
23
|
+
import SingleSelectionCheckbox from '../../components/dataviews-selection-checkbox';
|
|
24
|
+
import { useHasAPossibleBulkAction } from '../../components/dataviews-bulk-actions';
|
|
25
|
+
import type { Action, NormalizedField, ViewGridProps } from '../../types';
|
|
26
|
+
import type { SetSelection } from '../../private-types';
|
|
26
27
|
|
|
27
|
-
interface GridItemProps< Item
|
|
28
|
+
interface GridItemProps< Item > {
|
|
28
29
|
selection: string[];
|
|
29
|
-
|
|
30
|
-
onSelectionChange: ( items: Item[] ) => void;
|
|
30
|
+
onChangeSelection: SetSelection;
|
|
31
31
|
getItemId: ( item: Item ) => string;
|
|
32
32
|
item: Item;
|
|
33
33
|
actions: Action< Item >[];
|
|
@@ -38,10 +38,9 @@ interface GridItemProps< Item extends AnyItem > {
|
|
|
38
38
|
columnFields?: string[];
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
function GridItem< Item
|
|
41
|
+
function GridItem< Item >( {
|
|
42
42
|
selection,
|
|
43
|
-
|
|
44
|
-
onSelectionChange,
|
|
43
|
+
onChangeSelection,
|
|
45
44
|
getItemId,
|
|
46
45
|
item,
|
|
47
46
|
actions,
|
|
@@ -54,6 +53,12 @@ function GridItem< Item extends AnyItem >( {
|
|
|
54
53
|
const hasBulkAction = useHasAPossibleBulkAction( actions, item );
|
|
55
54
|
const id = getItemId( item );
|
|
56
55
|
const isSelected = selection.includes( id );
|
|
56
|
+
const renderedMediaField = mediaField?.render ? (
|
|
57
|
+
<mediaField.render item={ item } />
|
|
58
|
+
) : null;
|
|
59
|
+
const renderedPrimaryField = primaryField?.render ? (
|
|
60
|
+
<primaryField.render item={ item } />
|
|
61
|
+
) : null;
|
|
57
62
|
return (
|
|
58
63
|
<VStack
|
|
59
64
|
spacing={ 0 }
|
|
@@ -68,32 +73,16 @@ function GridItem< Item extends AnyItem >( {
|
|
|
68
73
|
if ( ! hasBulkAction ) {
|
|
69
74
|
return;
|
|
70
75
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
itemId === id ||
|
|
77
|
-
selection.includes( itemId )
|
|
78
|
-
);
|
|
79
|
-
} )
|
|
80
|
-
);
|
|
81
|
-
} else {
|
|
82
|
-
onSelectionChange(
|
|
83
|
-
data.filter( ( _item ) => {
|
|
84
|
-
const itemId = getItemId?.( _item );
|
|
85
|
-
return (
|
|
86
|
-
itemId !== id &&
|
|
87
|
-
selection.includes( itemId )
|
|
88
|
-
);
|
|
89
|
-
} )
|
|
90
|
-
);
|
|
91
|
-
}
|
|
76
|
+
onChangeSelection(
|
|
77
|
+
selection.includes( id )
|
|
78
|
+
? selection.filter( ( itemId ) => id !== itemId )
|
|
79
|
+
: [ ...selection, id ]
|
|
80
|
+
);
|
|
92
81
|
}
|
|
93
82
|
} }
|
|
94
83
|
>
|
|
95
84
|
<div className="dataviews-view-grid__media">
|
|
96
|
-
{
|
|
85
|
+
{ renderedMediaField }
|
|
97
86
|
</div>
|
|
98
87
|
<HStack
|
|
99
88
|
justify="space-between"
|
|
@@ -102,14 +91,13 @@ function GridItem< Item extends AnyItem >( {
|
|
|
102
91
|
<SingleSelectionCheckbox
|
|
103
92
|
item={ item }
|
|
104
93
|
selection={ selection }
|
|
105
|
-
|
|
94
|
+
onChangeSelection={ onChangeSelection }
|
|
106
95
|
getItemId={ getItemId }
|
|
107
|
-
data={ data }
|
|
108
96
|
primaryField={ primaryField }
|
|
109
97
|
disabled={ ! hasBulkAction }
|
|
110
98
|
/>
|
|
111
99
|
<HStack className="dataviews-view-grid__primary-field">
|
|
112
|
-
{
|
|
100
|
+
{ renderedPrimaryField }
|
|
113
101
|
</HStack>
|
|
114
102
|
<ItemActions item={ item } actions={ actions } isCompact />
|
|
115
103
|
</HStack>
|
|
@@ -122,32 +110,20 @@ function GridItem< Item extends AnyItem >( {
|
|
|
122
110
|
justify="flex-start"
|
|
123
111
|
>
|
|
124
112
|
{ badgeFields.map( ( field ) => {
|
|
125
|
-
const renderedValue = field.render( {
|
|
126
|
-
item,
|
|
127
|
-
} );
|
|
128
|
-
if ( ! renderedValue ) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
113
|
return (
|
|
132
114
|
<FlexItem
|
|
133
115
|
key={ field.id }
|
|
134
116
|
className="dataviews-view-grid__field-value"
|
|
135
117
|
>
|
|
136
|
-
{
|
|
118
|
+
<field.render item={ item } />
|
|
137
119
|
</FlexItem>
|
|
138
120
|
);
|
|
139
121
|
} ) }
|
|
140
122
|
</HStack>
|
|
141
123
|
) }
|
|
142
124
|
{ !! visibleFields?.length && (
|
|
143
|
-
<VStack className="dataviews-view-grid__fields" spacing={
|
|
125
|
+
<VStack className="dataviews-view-grid__fields" spacing={ 1 }>
|
|
144
126
|
{ visibleFields.map( ( field ) => {
|
|
145
|
-
const renderedValue = field.render( {
|
|
146
|
-
item,
|
|
147
|
-
} );
|
|
148
|
-
if ( ! renderedValue ) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
127
|
return (
|
|
152
128
|
<Flex
|
|
153
129
|
className={ clsx(
|
|
@@ -169,13 +145,13 @@ function GridItem< Item extends AnyItem >( {
|
|
|
169
145
|
>
|
|
170
146
|
<>
|
|
171
147
|
<FlexItem className="dataviews-view-grid__field-name">
|
|
172
|
-
{ field.
|
|
148
|
+
{ field.label }
|
|
173
149
|
</FlexItem>
|
|
174
150
|
<FlexItem
|
|
175
151
|
className="dataviews-view-grid__field-value"
|
|
176
152
|
style={ { maxHeight: 'none' } }
|
|
177
153
|
>
|
|
178
|
-
{
|
|
154
|
+
<field.render item={ item } />
|
|
179
155
|
</FlexItem>
|
|
180
156
|
</>
|
|
181
157
|
</Flex>
|
|
@@ -187,35 +163,38 @@ function GridItem< Item extends AnyItem >( {
|
|
|
187
163
|
);
|
|
188
164
|
}
|
|
189
165
|
|
|
190
|
-
export default function ViewGrid< Item
|
|
166
|
+
export default function ViewGrid< Item >( {
|
|
191
167
|
actions,
|
|
192
168
|
data,
|
|
193
169
|
fields,
|
|
194
170
|
getItemId,
|
|
195
171
|
isLoading,
|
|
196
|
-
|
|
172
|
+
onChangeSelection,
|
|
197
173
|
selection,
|
|
198
174
|
view,
|
|
175
|
+
density,
|
|
199
176
|
}: ViewGridProps< Item > ) {
|
|
200
177
|
const mediaField = fields.find(
|
|
201
|
-
( field ) => field.id === view.layout
|
|
178
|
+
( field ) => field.id === view.layout?.mediaField
|
|
202
179
|
);
|
|
203
180
|
const primaryField = fields.find(
|
|
204
|
-
( field ) => field.id === view.layout
|
|
181
|
+
( field ) => field.id === view.layout?.primaryField
|
|
205
182
|
);
|
|
183
|
+
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
206
184
|
const { visibleFields, badgeFields } = fields.reduce(
|
|
207
185
|
( accumulator: Record< string, NormalizedField< Item >[] >, field ) => {
|
|
208
186
|
if (
|
|
209
|
-
|
|
210
|
-
[
|
|
211
|
-
|
|
212
|
-
|
|
187
|
+
! viewFields.includes( field.id ) ||
|
|
188
|
+
[
|
|
189
|
+
view.layout?.mediaField,
|
|
190
|
+
view?.layout?.primaryField,
|
|
191
|
+
].includes( field.id )
|
|
213
192
|
) {
|
|
214
193
|
return accumulator;
|
|
215
194
|
}
|
|
216
195
|
// If the field is a badge field, add it to the badgeFields array
|
|
217
196
|
// otherwise add it to the rest visibleFields array.
|
|
218
|
-
const key = view.layout
|
|
197
|
+
const key = view.layout?.badgeFields?.includes( field.id )
|
|
219
198
|
? 'badgeFields'
|
|
220
199
|
: 'visibleFields';
|
|
221
200
|
accumulator[ key ].push( field );
|
|
@@ -224,6 +203,9 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
224
203
|
{ visibleFields: [], badgeFields: [] }
|
|
225
204
|
);
|
|
226
205
|
const hasData = !! data?.length;
|
|
206
|
+
const gridStyle = density
|
|
207
|
+
? { gridTemplateColumns: `repeat(${ density }, minmax(0, 1fr))` }
|
|
208
|
+
: {};
|
|
227
209
|
return (
|
|
228
210
|
<>
|
|
229
211
|
{ hasData && (
|
|
@@ -232,6 +214,7 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
232
214
|
columns={ 2 }
|
|
233
215
|
alignment="top"
|
|
234
216
|
className="dataviews-view-grid"
|
|
217
|
+
style={ gridStyle }
|
|
235
218
|
aria-busy={ isLoading }
|
|
236
219
|
>
|
|
237
220
|
{ data.map( ( item ) => {
|
|
@@ -239,8 +222,7 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
239
222
|
<GridItem
|
|
240
223
|
key={ getItemId( item ) }
|
|
241
224
|
selection={ selection }
|
|
242
|
-
|
|
243
|
-
onSelectionChange={ onSelectionChange }
|
|
225
|
+
onChangeSelection={ onChangeSelection }
|
|
244
226
|
getItemId={ getItemId }
|
|
245
227
|
item={ item }
|
|
246
228
|
actions={ actions }
|
|
@@ -248,7 +230,7 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
248
230
|
primaryField={ primaryField }
|
|
249
231
|
visibleFields={ visibleFields }
|
|
250
232
|
badgeFields={ badgeFields }
|
|
251
|
-
columnFields={ view.layout
|
|
233
|
+
columnFields={ view.layout?.columnFields }
|
|
252
234
|
/>
|
|
253
235
|
);
|
|
254
236
|
} ) }
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
.dataviews-view-grid {
|
|
2
|
+
margin-bottom: auto;
|
|
3
|
+
grid-template-rows: max-content;
|
|
4
|
+
padding: 0 $grid-unit-60 $grid-unit-30;
|
|
5
|
+
transition: padding ease-out 0.1s;
|
|
6
|
+
@include reduce-motion("transition");
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
.dataviews-view-grid__card {
|
|
10
|
+
height: 100%;
|
|
11
|
+
justify-content: flex-start;
|
|
12
|
+
|
|
13
|
+
.dataviews-view-grid__title-actions {
|
|
14
|
+
padding: $grid-unit-10 0 $grid-unit-05;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.dataviews-view-grid__primary-field {
|
|
18
|
+
min-height: $grid-unit-40; // Preserve layout when there is no ellipsis button
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&.is-selected {
|
|
22
|
+
.dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value {
|
|
23
|
+
color: $gray-900;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.dataviews-view-grid__media {
|
|
29
|
+
width: 100%;
|
|
30
|
+
min-height: 200px;
|
|
31
|
+
aspect-ratio: 1/1;
|
|
32
|
+
background-color: $gray-100;
|
|
33
|
+
border-radius: $grid-unit-05;
|
|
34
|
+
position: relative;
|
|
35
|
+
|
|
36
|
+
img {
|
|
37
|
+
object-fit: cover;
|
|
38
|
+
width: 100%;
|
|
39
|
+
height: 100%;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&::after {
|
|
43
|
+
content: "";
|
|
44
|
+
position: absolute;
|
|
45
|
+
top: 0;
|
|
46
|
+
left: 0;
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: 100%;
|
|
49
|
+
box-shadow: inset 0 0 0 $border-width rgba(0, 0, 0, 0.1);
|
|
50
|
+
border-radius: $grid-unit-05;
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.dataviews-view-grid__fields {
|
|
56
|
+
position: relative;
|
|
57
|
+
font-size: 12px;
|
|
58
|
+
line-height: 16px;
|
|
59
|
+
|
|
60
|
+
&:not(:empty) {
|
|
61
|
+
padding: 0 0 $grid-unit-15;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.dataviews-view-grid__field {
|
|
65
|
+
align-items: flex-start;
|
|
66
|
+
min-height: $grid-unit-30;
|
|
67
|
+
|
|
68
|
+
&:not(.is-column) {
|
|
69
|
+
align-items: center;
|
|
70
|
+
|
|
71
|
+
.dataviews-view-grid__field-name {
|
|
72
|
+
width: 35%;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.dataviews-view-grid__field-value {
|
|
76
|
+
width: 65%;
|
|
77
|
+
overflow: hidden;
|
|
78
|
+
text-overflow: ellipsis;
|
|
79
|
+
white-space: nowrap;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&.is-column {
|
|
84
|
+
& + .is-row {
|
|
85
|
+
margin-top: $grid-unit-05;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.dataviews-view-grid__field-name {
|
|
90
|
+
color: $gray-700;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.dataviews-view-grid__badge-fields {
|
|
96
|
+
&:not(:empty) {
|
|
97
|
+
padding-bottom: $grid-unit-15;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.dataviews-view-grid__field-value {
|
|
101
|
+
width: fit-content;
|
|
102
|
+
background: $gray-100;
|
|
103
|
+
padding: 0 $grid-unit-10;
|
|
104
|
+
min-height: $grid-unit-30;
|
|
105
|
+
border-radius: $radius-block-ui;
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
font-size: 12px;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.dataviews-view-grid.dataviews-view-grid {
|
|
114
|
+
grid-template-columns: repeat(1, minmax(0, 1fr));
|
|
115
|
+
|
|
116
|
+
@include break-mobile() {
|
|
117
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@include break-xlarge() {
|
|
121
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@include break-huge() {
|
|
125
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@include break-xhuge() {
|
|
129
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.dataviews-density-picker__range-control {
|
|
134
|
+
width: 200px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.dataviews-view-grid__field-value:empty,
|
|
138
|
+
.dataviews-view-grid__field:empty {
|
|
139
|
+
display: none;
|
|
140
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __, isRTL } from '@wordpress/i18n';
|
|
5
|
+
import {
|
|
6
|
+
blockTable,
|
|
7
|
+
category,
|
|
8
|
+
formatListBullets,
|
|
9
|
+
formatListBulletsRTL,
|
|
10
|
+
} from '@wordpress/icons';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
import ViewTable from './table';
|
|
16
|
+
import ViewGrid from './grid';
|
|
17
|
+
import ViewList from './list';
|
|
18
|
+
import { LAYOUT_GRID, LAYOUT_LIST, LAYOUT_TABLE } from '../constants';
|
|
19
|
+
import type { View } from '../types';
|
|
20
|
+
|
|
21
|
+
export const VIEW_LAYOUTS = [
|
|
22
|
+
{
|
|
23
|
+
type: LAYOUT_TABLE,
|
|
24
|
+
label: __( 'Table' ),
|
|
25
|
+
component: ViewTable,
|
|
26
|
+
icon: blockTable,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: LAYOUT_GRID,
|
|
30
|
+
label: __( 'Grid' ),
|
|
31
|
+
component: ViewGrid,
|
|
32
|
+
icon: category,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: LAYOUT_LIST,
|
|
36
|
+
label: __( 'List' ),
|
|
37
|
+
component: ViewList,
|
|
38
|
+
icon: isRTL() ? formatListBulletsRTL : formatListBullets,
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
export function getMandatoryFields( view: View ): string[] {
|
|
43
|
+
if ( view.type === 'table' ) {
|
|
44
|
+
return [ view.layout?.primaryField ]
|
|
45
|
+
.concat(
|
|
46
|
+
view.layout?.combinedFields?.flatMap(
|
|
47
|
+
( field ) => field.children
|
|
48
|
+
) ?? []
|
|
49
|
+
)
|
|
50
|
+
.filter( ( item ): item is string => !! item );
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if ( view.type === 'grid' ) {
|
|
54
|
+
return [ view.layout?.primaryField, view.layout?.mediaField ].filter(
|
|
55
|
+
( item ): item is string => !! item
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if ( view.type === 'list' ) {
|
|
60
|
+
return [ view.layout?.primaryField, view.layout?.mediaField ].filter(
|
|
61
|
+
( item ): item is string => !! item
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
@@ -32,12 +32,14 @@ import { useRegistry } from '@wordpress/data';
|
|
|
32
32
|
/**
|
|
33
33
|
* Internal dependencies
|
|
34
34
|
*/
|
|
35
|
-
import { unlock } from '
|
|
36
|
-
import
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
import { unlock } from '../../lock-unlock';
|
|
36
|
+
import {
|
|
37
|
+
ActionsDropdownMenuGroup,
|
|
38
|
+
ActionModal,
|
|
39
|
+
} from '../../components/dataviews-item-actions';
|
|
40
|
+
import type { Action, NormalizedField, ViewListProps } from '../../types';
|
|
39
41
|
|
|
40
|
-
interface ListViewItemProps< Item
|
|
42
|
+
interface ListViewItemProps< Item > {
|
|
41
43
|
actions: Action< Item >[];
|
|
42
44
|
id?: string;
|
|
43
45
|
isSelected: boolean;
|
|
@@ -57,7 +59,7 @@ const {
|
|
|
57
59
|
DropdownMenuV2: DropdownMenu,
|
|
58
60
|
} = unlock( componentsPrivateApis );
|
|
59
61
|
|
|
60
|
-
function ListItem< Item
|
|
62
|
+
function ListItem< Item >( {
|
|
61
63
|
actions,
|
|
62
64
|
id,
|
|
63
65
|
isSelected,
|
|
@@ -113,6 +115,16 @@ function ListItem< Item extends AnyItem >( {
|
|
|
113
115
|
? primaryAction.label
|
|
114
116
|
: primaryAction.label( [ item ] ) );
|
|
115
117
|
|
|
118
|
+
const renderedMediaField = mediaField?.render ? (
|
|
119
|
+
<mediaField.render item={ item } />
|
|
120
|
+
) : (
|
|
121
|
+
<div className="dataviews-view-list__media-placeholder"></div>
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const renderedPrimaryField = primaryField?.render ? (
|
|
125
|
+
<primaryField.render item={ item } />
|
|
126
|
+
) : null;
|
|
127
|
+
|
|
116
128
|
return (
|
|
117
129
|
<CompositeRow
|
|
118
130
|
ref={ itemRef }
|
|
@@ -148,16 +160,17 @@ function ListItem< Item extends AnyItem >( {
|
|
|
148
160
|
alignment="flex-start"
|
|
149
161
|
>
|
|
150
162
|
<div className="dataviews-view-list__media-wrapper">
|
|
151
|
-
{
|
|
152
|
-
<div className="dataviews-view-list__media-placeholder"></div>
|
|
153
|
-
) }
|
|
163
|
+
{ renderedMediaField }
|
|
154
164
|
</div>
|
|
155
|
-
<VStack
|
|
165
|
+
<VStack
|
|
166
|
+
spacing={ 1 }
|
|
167
|
+
className="dataviews-view-list__field-wrapper"
|
|
168
|
+
>
|
|
156
169
|
<span
|
|
157
170
|
className="dataviews-view-list__primary-field"
|
|
158
171
|
id={ labelId }
|
|
159
172
|
>
|
|
160
|
-
{
|
|
173
|
+
{ renderedPrimaryField }
|
|
161
174
|
</span>
|
|
162
175
|
<div
|
|
163
176
|
className="dataviews-view-list__fields"
|
|
@@ -172,10 +185,10 @@ function ListItem< Item extends AnyItem >( {
|
|
|
172
185
|
as="span"
|
|
173
186
|
className="dataviews-view-list__field-label"
|
|
174
187
|
>
|
|
175
|
-
{ field.
|
|
188
|
+
{ field.label }
|
|
176
189
|
</VisuallyHidden>
|
|
177
190
|
<span className="dataviews-view-list__field-value">
|
|
178
|
-
|
|
191
|
+
<field.render item={ item } />
|
|
179
192
|
</span>
|
|
180
193
|
</div>
|
|
181
194
|
) ) }
|
|
@@ -186,7 +199,7 @@ function ListItem< Item extends AnyItem >( {
|
|
|
186
199
|
</div>
|
|
187
200
|
{ eligibleActions?.length > 0 && (
|
|
188
201
|
<HStack
|
|
189
|
-
spacing={
|
|
202
|
+
spacing={ 3 }
|
|
190
203
|
justify="flex-end"
|
|
191
204
|
className="dataviews-view-list__item-actions"
|
|
192
205
|
style={ {
|
|
@@ -205,7 +218,7 @@ function ListItem< Item extends AnyItem >( {
|
|
|
205
218
|
isDestructive={
|
|
206
219
|
primaryAction.isDestructive
|
|
207
220
|
}
|
|
208
|
-
size="
|
|
221
|
+
size="small"
|
|
209
222
|
onClick={ () =>
|
|
210
223
|
setIsModalOpen( true )
|
|
211
224
|
}
|
|
@@ -236,7 +249,7 @@ function ListItem< Item extends AnyItem >( {
|
|
|
236
249
|
isDestructive={
|
|
237
250
|
primaryAction.isDestructive
|
|
238
251
|
}
|
|
239
|
-
size="
|
|
252
|
+
size="small"
|
|
240
253
|
onClick={ () => {
|
|
241
254
|
primaryAction.callback(
|
|
242
255
|
[ item ],
|
|
@@ -255,10 +268,10 @@ function ListItem< Item extends AnyItem >( {
|
|
|
255
268
|
store={ store }
|
|
256
269
|
render={
|
|
257
270
|
<Button
|
|
258
|
-
size="
|
|
271
|
+
size="small"
|
|
259
272
|
icon={ moreVertical }
|
|
260
273
|
label={ __( 'Actions' ) }
|
|
261
|
-
|
|
274
|
+
accessibleWhenDisabled
|
|
262
275
|
disabled={ ! actions.length }
|
|
263
276
|
onKeyDown={ ( event: {
|
|
264
277
|
key: string;
|
|
@@ -303,16 +316,14 @@ function ListItem< Item extends AnyItem >( {
|
|
|
303
316
|
);
|
|
304
317
|
}
|
|
305
318
|
|
|
306
|
-
export default function ViewList< Item
|
|
307
|
-
props: ViewListProps< Item >
|
|
308
|
-
) {
|
|
319
|
+
export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
309
320
|
const {
|
|
310
321
|
actions,
|
|
311
322
|
data,
|
|
312
323
|
fields,
|
|
313
324
|
getItemId,
|
|
314
325
|
isLoading,
|
|
315
|
-
|
|
326
|
+
onChangeSelection,
|
|
316
327
|
selection,
|
|
317
328
|
view,
|
|
318
329
|
} = props;
|
|
@@ -322,23 +333,22 @@ export default function ViewList< Item extends AnyItem >(
|
|
|
322
333
|
);
|
|
323
334
|
|
|
324
335
|
const mediaField = fields.find(
|
|
325
|
-
( field ) => field.id === view.layout
|
|
336
|
+
( field ) => field.id === view.layout?.mediaField
|
|
326
337
|
);
|
|
327
338
|
const primaryField = fields.find(
|
|
328
|
-
( field ) => field.id === view.layout
|
|
339
|
+
( field ) => field.id === view.layout?.primaryField
|
|
329
340
|
);
|
|
341
|
+
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
330
342
|
const visibleFields = fields.filter(
|
|
331
343
|
( field ) =>
|
|
332
|
-
|
|
333
|
-
! [ view.layout
|
|
344
|
+
viewFields.includes( field.id ) &&
|
|
345
|
+
! [ view.layout?.primaryField, view.layout?.mediaField ].includes(
|
|
334
346
|
field.id
|
|
335
347
|
)
|
|
336
348
|
);
|
|
337
349
|
|
|
338
|
-
const onSelect =
|
|
339
|
-
(
|
|
340
|
-
[ onSelectionChange ]
|
|
341
|
-
);
|
|
350
|
+
const onSelect = ( item: Item ) =>
|
|
351
|
+
onChangeSelection( [ getItemId( item ) ] );
|
|
342
352
|
|
|
343
353
|
const getItemDomId = useCallback(
|
|
344
354
|
( item?: Item ) =>
|