@wordpress/dataviews 0.2.0 → 0.3.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 +2 -0
- package/LICENSE.md +1 -1
- package/README.md +30 -6
- package/build/add-filter.js +109 -49
- package/build/add-filter.js.map +1 -1
- package/build/constants.js +24 -2
- package/build/constants.js.map +1 -1
- package/build/dataviews.js +12 -9
- package/build/dataviews.js.map +1 -1
- package/build/dropdown-menu-helper.js +72 -0
- package/build/dropdown-menu-helper.js.map +1 -0
- package/build/filter-summary.js +43 -54
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js +27 -17
- package/build/filters.js.map +1 -1
- package/build/index.js +13 -0
- package/build/index.js.map +1 -1
- package/build/item-actions.js +12 -12
- package/build/item-actions.js.map +1 -1
- package/build/pagination.js +31 -65
- package/build/pagination.js.map +1 -1
- package/build/reset-filters.js +8 -8
- package/build/reset-filters.js.map +1 -1
- package/build/search.js +8 -6
- package/build/search.js.map +1 -1
- package/build/utils.js +71 -0
- package/build/utils.js.map +1 -0
- package/build/view-actions.js +72 -95
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +4 -6
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +26 -13
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +153 -154
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js +113 -53
- package/build-module/add-filter.js.map +1 -1
- package/build-module/constants.js +20 -0
- package/build-module/constants.js.map +1 -1
- package/build-module/dataviews.js +13 -10
- package/build-module/dataviews.js.map +1 -1
- package/build-module/dropdown-menu-helper.js +64 -0
- package/build-module/dropdown-menu-helper.js.map +1 -0
- package/build-module/filter-summary.js +45 -56
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js +26 -17
- package/build-module/filters.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/item-actions.js +12 -12
- package/build-module/item-actions.js.map +1 -1
- package/build-module/pagination.js +35 -69
- package/build-module/pagination.js.map +1 -1
- package/build-module/reset-filters.js +6 -6
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search.js +7 -6
- package/build-module/search.js.map +1 -1
- package/build-module/utils.js +63 -0
- package/build-module/utils.js.map +1 -0
- package/build-module/view-actions.js +73 -97
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +4 -6
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +27 -14
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +156 -157
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +180 -70
- package/build-style/style.css +180 -70
- package/package.json +11 -10
- package/src/add-filter.js +227 -68
- package/src/constants.js +16 -0
- package/src/dataviews.js +19 -12
- package/src/dropdown-menu-helper.js +61 -0
- package/src/filter-summary.js +70 -103
- package/src/filters.js +41 -24
- package/src/index.js +1 -0
- package/src/item-actions.js +30 -25
- package/src/pagination.js +75 -123
- package/src/reset-filters.js +5 -5
- package/src/search.js +8 -6
- package/src/style.scss +182 -48
- package/src/utils.js +51 -0
- package/src/view-actions.js +113 -114
- package/src/view-grid.js +4 -4
- package/src/view-list.js +42 -28
- package/src/view-table.js +280 -238
package/build/view-grid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_components","require","_compose","_itemActions","_interopRequireDefault","ViewGrid","data","fields","view","actions","getItemId","deferredRendering","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","shownData","useAsyncList","step","usedData","_react","createElement","__experimentalGrid","gap","columns","alignment","className","map","item","
|
|
1
|
+
{"version":3,"names":["_components","require","_compose","_itemActions","_interopRequireDefault","ViewGrid","data","fields","view","actions","getItemId","deferredRendering","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","shownData","useAsyncList","step","usedData","_react","createElement","__experimentalGrid","gap","columns","alignment","className","map","item","__experimentalVStack","spacing","key","render","__experimentalHStack","justify","FlexBlock","default","isCompact","renderedValue","header"],"sources":["@wordpress/dataviews/src/view-grid.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tFlexBlock,\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\n\nexport default function ViewGrid( {\n\tdata,\n\tfields,\n\tview,\n\tactions,\n\tgetItemId,\n\tdeferredRendering,\n} ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.mediaField, view.layout.primaryField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\treturn (\n\t\t<Grid\n\t\t\tgap={ 8 }\n\t\t\tcolumns={ 2 }\n\t\t\talignment=\"top\"\n\t\t\tclassName=\"dataviews-view-grid\"\n\t\t>\n\t\t\t{ usedData.map( ( item ) => (\n\t\t\t\t<VStack\n\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\tclassName=\"dataviews-view-grid__card\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t\t\t{ mediaField?.render( { item } ) }\n\t\t\t\t\t</div>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__primary-field\"\n\t\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t<ItemActions\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__fields\"\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\tconst renderedValue = field.render( {\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tif ( ! renderedValue ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-grid__field\"\n\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-header\">\n\t\t\t\t\t\t\t\t\t\t{ field.header }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-value\">\n\t\t\t\t\t\t\t\t\t\t{ renderedValue }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</VStack>\n\t\t\t\t</VStack>\n\t\t\t) ) }\n\t\t</Grid>\n\t);\n}\n"],"mappings":"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"}
|
package/build/view-list.js
CHANGED
|
@@ -10,6 +10,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
10
10
|
var _compose = require("@wordpress/compose");
|
|
11
11
|
var _components = require("@wordpress/components");
|
|
12
12
|
var _keycodes = require("@wordpress/keycodes");
|
|
13
|
+
var _icons = require("@wordpress/icons");
|
|
14
|
+
var _i18n = require("@wordpress/i18n");
|
|
13
15
|
/**
|
|
14
16
|
* External dependencies
|
|
15
17
|
*/
|
|
@@ -24,6 +26,7 @@ function ViewList({
|
|
|
24
26
|
data,
|
|
25
27
|
getItemId,
|
|
26
28
|
onSelectionChange,
|
|
29
|
+
onDetailsChange,
|
|
27
30
|
selection,
|
|
28
31
|
deferredRendering
|
|
29
32
|
}) {
|
|
@@ -43,41 +46,51 @@ function ViewList({
|
|
|
43
46
|
}
|
|
44
47
|
};
|
|
45
48
|
return (0, _react.createElement)("ul", {
|
|
46
|
-
className: "dataviews-list
|
|
47
|
-
}, usedData.map(
|
|
49
|
+
className: "dataviews-view-list"
|
|
50
|
+
}, usedData.map(item => {
|
|
48
51
|
return (0, _react.createElement)("li", {
|
|
49
|
-
key: getItemId
|
|
52
|
+
key: getItemId(item),
|
|
53
|
+
className: (0, _classnames.default)({
|
|
54
|
+
'is-selected': selection.includes(item.id)
|
|
55
|
+
})
|
|
56
|
+
}, (0, _react.createElement)(_components.__experimentalHStack, {
|
|
57
|
+
className: "dataviews-view-list__item-wrapper"
|
|
50
58
|
}, (0, _react.createElement)("div", {
|
|
51
59
|
role: "button",
|
|
52
60
|
tabIndex: 0,
|
|
53
61
|
"aria-pressed": selection.includes(item.id),
|
|
54
62
|
onKeyDown: onEnter(item),
|
|
55
|
-
className:
|
|
56
|
-
'dataviews-list-view__item-selected': selection.includes(item.id)
|
|
57
|
-
}),
|
|
63
|
+
className: "dataviews-view-list__item",
|
|
58
64
|
onClick: () => onSelectionChange([item])
|
|
59
65
|
}, (0, _react.createElement)(_components.__experimentalHStack, {
|
|
60
|
-
spacing: 3
|
|
66
|
+
spacing: 3,
|
|
67
|
+
justify: "start"
|
|
61
68
|
}, (0, _react.createElement)("div", {
|
|
62
|
-
className: "dataviews-
|
|
69
|
+
className: "dataviews-view-list__media-wrapper"
|
|
63
70
|
}, mediaField?.render({
|
|
64
71
|
item
|
|
65
72
|
}) || (0, _react.createElement)("div", {
|
|
66
|
-
className: "dataviews-
|
|
67
|
-
})), (0, _react.createElement)(_components.
|
|
73
|
+
className: "dataviews-view-list__media-placeholder"
|
|
74
|
+
})), (0, _react.createElement)(_components.__experimentalVStack, {
|
|
68
75
|
spacing: 1
|
|
69
76
|
}, primaryField?.render({
|
|
70
77
|
item
|
|
71
78
|
}), (0, _react.createElement)("div", {
|
|
72
|
-
className: "dataviews-
|
|
79
|
+
className: "dataviews-view-list__fields"
|
|
73
80
|
}, visibleFields.map(field => {
|
|
74
81
|
return (0, _react.createElement)("span", {
|
|
75
82
|
key: field.id,
|
|
76
|
-
className: "dataviews-
|
|
83
|
+
className: "dataviews-view-list__field"
|
|
77
84
|
}, field.render({
|
|
78
85
|
item
|
|
79
86
|
}));
|
|
80
|
-
}))))))
|
|
87
|
+
}))))), onDetailsChange && (0, _react.createElement)(_components.Button, {
|
|
88
|
+
className: "dataviews-view-list__details-button",
|
|
89
|
+
onClick: () => onDetailsChange([item]),
|
|
90
|
+
icon: _icons.info,
|
|
91
|
+
label: (0, _i18n.__)('View details'),
|
|
92
|
+
size: "compact"
|
|
93
|
+
})));
|
|
81
94
|
}));
|
|
82
95
|
}
|
|
83
96
|
//# sourceMappingURL=view-list.js.map
|
package/build/view-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_classnames","_interopRequireDefault","require","_compose","_components","_keycodes","ViewList","view","fields","data","getItemId","onSelectionChange","selection","deferredRendering","shownData","useAsyncList","step","usedData","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","onEnter","item","event","keyCode","ENTER","SPACE","_react","createElement","className","map","
|
|
1
|
+
{"version":3,"names":["_classnames","_interopRequireDefault","require","_compose","_components","_keycodes","_icons","_i18n","ViewList","view","fields","data","getItemId","onSelectionChange","onDetailsChange","selection","deferredRendering","shownData","useAsyncList","step","usedData","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","onEnter","item","event","keyCode","ENTER","SPACE","_react","createElement","className","map","key","classNames","__experimentalHStack","role","tabIndex","onKeyDown","onClick","spacing","justify","render","__experimentalVStack","Button","icon","info","label","__","size"],"sources":["@wordpress/dataviews/src/view-list.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useAsyncList } from '@wordpress/compose';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n} from '@wordpress/components';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\nimport { info } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function ViewList( {\n\tview,\n\tfields,\n\tdata,\n\tgetItemId,\n\tonSelectionChange,\n\tonDetailsChange,\n\tselection,\n\tdeferredRendering,\n} ) {\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.primaryField, view.layout.mediaField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\n\tconst onEnter = ( item ) => ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif ( [ ENTER, SPACE ].includes( keyCode ) ) {\n\t\t\tonSelectionChange( [ item ] );\n\t\t}\n\t};\n\n\treturn (\n\t\t<ul className=\"dataviews-view-list\">\n\t\t\t{ usedData.map( ( item ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<li\n\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\tclassName={ classNames( {\n\t\t\t\t\t\t\t'is-selected': selection.includes( item.id ),\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack className=\"dataviews-view-list__item-wrapper\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\ttabIndex={ 0 }\n\t\t\t\t\t\t\t\taria-pressed={ selection.includes( item.id ) }\n\t\t\t\t\t\t\t\tonKeyDown={ onEnter( item ) }\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__item\"\n\t\t\t\t\t\t\t\tonClick={ () => onSelectionChange( [ item ] ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<HStack spacing={ 3 } justify=\"start\">\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-wrapper\">\n\t\t\t\t\t\t\t\t\t\t{ mediaField?.render( { item } ) || (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-placeholder\"></div>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<VStack spacing={ 1 }>\n\t\t\t\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__fields\">\n\t\t\t\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ field.render( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{ onDetailsChange && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__details-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonDetailsChange( [ item ] )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ticon={ info }\n\t\t\t\t\t\t\t\t\tlabel={ __( 'View details' ) }\n\t\t\t\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ul>\n\t);\n}\n"],"mappings":"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"}
|
package/build/view-table.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
9
10
|
var _i18n = require("@wordpress/i18n");
|
|
10
11
|
var _compose = require("@wordpress/compose");
|
|
11
12
|
var _icons = require("@wordpress/icons");
|
|
@@ -14,6 +15,11 @@ var _element = require("@wordpress/element");
|
|
|
14
15
|
var _lockUnlock = require("./lock-unlock");
|
|
15
16
|
var _itemActions = _interopRequireDefault(require("./item-actions"));
|
|
16
17
|
var _constants = require("./constants");
|
|
18
|
+
var _dropdownMenuHelper = require("./dropdown-menu-helper");
|
|
19
|
+
/**
|
|
20
|
+
* External dependencies
|
|
21
|
+
*/
|
|
22
|
+
|
|
17
23
|
/**
|
|
18
24
|
* WordPress dependencies
|
|
19
25
|
*/
|
|
@@ -26,94 +32,76 @@ const {
|
|
|
26
32
|
DropdownMenuV2: DropdownMenu,
|
|
27
33
|
DropdownMenuGroupV2: DropdownMenuGroup,
|
|
28
34
|
DropdownMenuItemV2: DropdownMenuItem,
|
|
35
|
+
DropdownMenuRadioItemV2: DropdownMenuRadioItem,
|
|
29
36
|
DropdownMenuSeparatorV2: DropdownMenuSeparator,
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
DropdownMenuItemLabelV2: DropdownMenuItemLabel,
|
|
38
|
+
DropdownMenuItemHelpTextV2: DropdownMenuItemHelpText
|
|
32
39
|
} = (0, _lockUnlock.unlock)(_components.privateApis);
|
|
33
|
-
const
|
|
34
|
-
asc:
|
|
35
|
-
|
|
36
|
-
label: (0, _i18n.__)('Sort ascending')
|
|
37
|
-
},
|
|
38
|
-
desc: {
|
|
39
|
-
icon: _icons.arrowDown,
|
|
40
|
-
label: (0, _i18n.__)('Sort descending')
|
|
41
|
-
}
|
|
40
|
+
const sortArrows = {
|
|
41
|
+
asc: '↑',
|
|
42
|
+
desc: '↓'
|
|
42
43
|
};
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const sanitizeOperators = field => {
|
|
45
|
+
let operators = field.filterBy?.operators;
|
|
46
|
+
if (!operators || !Array.isArray(operators)) {
|
|
47
|
+
operators = Object.keys(_constants.OPERATORS);
|
|
48
|
+
}
|
|
49
|
+
return operators.filter(operator => Object.keys(_constants.OPERATORS).includes(operator));
|
|
46
50
|
};
|
|
47
|
-
function HeaderMenu({
|
|
51
|
+
const HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
|
|
48
52
|
field,
|
|
49
53
|
view,
|
|
50
|
-
onChangeView
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
onChangeView,
|
|
55
|
+
onHide
|
|
56
|
+
}, ref) {
|
|
53
57
|
const isHidable = field.enableHiding !== false;
|
|
54
|
-
|
|
55
|
-
return field.header;
|
|
56
|
-
}
|
|
58
|
+
const isSortable = field.enableSorting !== false;
|
|
57
59
|
const isSorted = view.sort?.field === field.id;
|
|
58
|
-
let filter, filterInView;
|
|
59
|
-
const
|
|
60
|
-
if (field.type === _constants.ENUMERATION_TYPE) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
elements: field.elements || []
|
|
71
|
-
};
|
|
72
|
-
filterInView = {
|
|
73
|
-
field: filter.field,
|
|
74
|
-
operator: filter.operators[0],
|
|
75
|
-
value: undefined
|
|
76
|
-
};
|
|
77
|
-
}
|
|
60
|
+
let filter, filterInView, activeElement, activeOperator, otherFilters;
|
|
61
|
+
const operators = sanitizeOperators(field);
|
|
62
|
+
if (field.type === _constants.ENUMERATION_TYPE && operators.length > 0) {
|
|
63
|
+
filter = {
|
|
64
|
+
field: field.id,
|
|
65
|
+
operators,
|
|
66
|
+
elements: field.elements || []
|
|
67
|
+
};
|
|
68
|
+
filterInView = view.filters.find(f => f.field === filter.field);
|
|
69
|
+
otherFilters = view.filters.filter(f => f.field !== filter.field);
|
|
70
|
+
activeElement = filter.elements.find(element => element.value === filterInView?.value);
|
|
71
|
+
activeOperator = filterInView?.operator || filter.operators[0];
|
|
78
72
|
}
|
|
79
73
|
const isFilterable = !!filter;
|
|
80
|
-
if (isFilterable) {
|
|
81
|
-
|
|
82
|
-
columnFilters.forEach(columnFilter => {
|
|
83
|
-
if (columnFilter.field === filter.field) {
|
|
84
|
-
filterInView = {
|
|
85
|
-
...columnFilter
|
|
86
|
-
};
|
|
87
|
-
} else {
|
|
88
|
-
otherFilters.push(columnFilter);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
74
|
+
if (!isSortable && !isHidable && !isFilterable) {
|
|
75
|
+
return field.header;
|
|
91
76
|
}
|
|
92
77
|
return (0, _react.createElement)(DropdownMenu, {
|
|
93
78
|
align: "start",
|
|
94
79
|
trigger: (0, _react.createElement)(_components.Button, {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
80
|
+
size: "compact",
|
|
81
|
+
className: "dataviews-view-table-header-button",
|
|
82
|
+
ref: ref,
|
|
83
|
+
variant: "tertiary"
|
|
84
|
+
}, field.header, isSorted && (0, _react.createElement)("span", {
|
|
85
|
+
"aria-hidden": "true"
|
|
86
|
+
}, isSorted && sortArrows[view.sort.direction])),
|
|
87
|
+
style: {
|
|
88
|
+
minWidth: '240px'
|
|
89
|
+
}
|
|
90
|
+
}, (0, _react.createElement)(WithSeparators, null, isSortable && (0, _react.createElement)(DropdownMenuGroup, null, Object.entries(_constants.SORTING_DIRECTIONS).map(([direction, info]) => {
|
|
91
|
+
const isChecked = isSorted && view.sort.direction === direction;
|
|
92
|
+
const value = `${field.id}-${direction}`;
|
|
93
|
+
return (0, _react.createElement)(DropdownMenuRadioItem, {
|
|
94
|
+
key: value
|
|
95
|
+
// All sorting radio items share the same name, so that
|
|
96
|
+
// selecting a sorting option automatically deselects the
|
|
97
|
+
// previously selected one, even if it is displayed in
|
|
98
|
+
// another submenu. The field and direction are passed via
|
|
99
|
+
// the `value` prop.
|
|
100
|
+
,
|
|
101
|
+
name: "view-table-sorting",
|
|
102
|
+
value: value,
|
|
103
|
+
checked: isChecked,
|
|
104
|
+
onChange: () => {
|
|
117
105
|
onChangeView({
|
|
118
106
|
...view,
|
|
119
107
|
sort: {
|
|
@@ -122,96 +110,72 @@ function HeaderMenu({
|
|
|
122
110
|
}
|
|
123
111
|
});
|
|
124
112
|
}
|
|
125
|
-
}, info.label);
|
|
113
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, info.label));
|
|
126
114
|
})), isHidable && (0, _react.createElement)(DropdownMenuItem, {
|
|
127
|
-
role: "menuitemradio",
|
|
128
|
-
"aria-checked": false,
|
|
129
115
|
prefix: (0, _react.createElement)(_components.Icon, {
|
|
130
116
|
icon: _icons.unseen
|
|
131
117
|
}),
|
|
132
|
-
|
|
133
|
-
|
|
118
|
+
onClick: () => {
|
|
119
|
+
onHide(field);
|
|
134
120
|
onChangeView({
|
|
135
121
|
...view,
|
|
136
122
|
hiddenFields: view.hiddenFields.concat(field.id)
|
|
137
123
|
});
|
|
138
124
|
}
|
|
139
|
-
}, (0, _i18n.__)('Hide')), isFilterable && (0, _react.createElement)(DropdownMenuGroup, null, (0, _react.createElement)(
|
|
125
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Hide'))), isFilterable && (0, _react.createElement)(DropdownMenuGroup, null, (0, _react.createElement)(DropdownMenu, {
|
|
140
126
|
key: filter.field,
|
|
141
|
-
trigger: (0, _react.createElement)(
|
|
127
|
+
trigger: (0, _react.createElement)(DropdownMenuItem, {
|
|
142
128
|
prefix: (0, _react.createElement)(_components.Icon, {
|
|
143
129
|
icon: _icons.funnel
|
|
144
130
|
}),
|
|
145
|
-
suffix: (0, _react.createElement)(
|
|
146
|
-
|
|
147
|
-
})
|
|
148
|
-
}, (0, _i18n.__)('Filter by'))
|
|
131
|
+
suffix: activeElement && (0, _react.createElement)("span", {
|
|
132
|
+
"aria-hidden": "true"
|
|
133
|
+
}, activeOperator in _constants.OPERATORS && `${_constants.OPERATORS[activeOperator].label} `, activeElement?.label)
|
|
134
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Filter by')))
|
|
149
135
|
}, (0, _react.createElement)(WithSeparators, null, (0, _react.createElement)(DropdownMenuGroup, null, filter.elements.map(element => {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// Intentionally use loose comparison, so it does type conversion.
|
|
153
|
-
// This covers the case where a top-level filter for the same field converts a number into a string.
|
|
154
|
-
/* eslint-disable eqeqeq */
|
|
155
|
-
isActive = element.value == filterInView.value;
|
|
156
|
-
/* eslint-enable eqeqeq */
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return (0, _react.createElement)(DropdownMenuItem, {
|
|
136
|
+
const isActive = activeElement?.value === element.value;
|
|
137
|
+
return (0, _react.createElement)(_dropdownMenuHelper.DropdownMenuRadioItemCustom, {
|
|
160
138
|
key: element.value,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}),
|
|
166
|
-
onSelect: () => {
|
|
139
|
+
name: `view-table-${filter.field}`,
|
|
140
|
+
value: element.value,
|
|
141
|
+
checked: isActive,
|
|
142
|
+
onClick: () => {
|
|
167
143
|
onChangeView({
|
|
168
144
|
...view,
|
|
145
|
+
page: 1,
|
|
169
146
|
filters: [...otherFilters, {
|
|
170
147
|
field: filter.field,
|
|
171
|
-
operator:
|
|
148
|
+
operator: activeOperator,
|
|
172
149
|
value: isActive ? undefined : element.value
|
|
173
150
|
}]
|
|
174
151
|
});
|
|
175
152
|
}
|
|
176
|
-
}, element.label);
|
|
177
|
-
})), filter.operators.length > 1 && (0, _react.createElement)(
|
|
178
|
-
trigger: (0, _react.createElement)(
|
|
179
|
-
suffix: (0, _react.createElement)(
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
}, (0, _i18n.__)('Conditions'))
|
|
183
|
-
}, (
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
filters: [...otherFilters, {
|
|
193
|
-
field: filter.field,
|
|
194
|
-
operator: _constants.OPERATOR_IN,
|
|
195
|
-
value: filterInView?.value
|
|
196
|
-
}]
|
|
197
|
-
})
|
|
198
|
-
}, (0, _i18n.__)('Is')), (0, _react.createElement)(DropdownMenuItem, {
|
|
199
|
-
key: "not-in-filter",
|
|
200
|
-
role: "menuitemradio",
|
|
201
|
-
"aria-checked": filterInView?.operator === _constants.OPERATOR_NOT_IN,
|
|
202
|
-
prefix: filterInView?.operator === _constants.OPERATOR_NOT_IN && (0, _react.createElement)(_components.Icon, {
|
|
203
|
-
icon: _icons.check
|
|
204
|
-
}),
|
|
205
|
-
onSelect: () => onChangeView({
|
|
153
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, element.label), !!element.description && (0, _react.createElement)(DropdownMenuItemHelpText, null, element.description));
|
|
154
|
+
})), filter.operators.length > 1 && (0, _react.createElement)(DropdownMenu, {
|
|
155
|
+
trigger: (0, _react.createElement)(DropdownMenuItem, {
|
|
156
|
+
suffix: (0, _react.createElement)("span", {
|
|
157
|
+
"aria-hidden": "true"
|
|
158
|
+
}, _constants.OPERATORS[activeOperator]?.label)
|
|
159
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Conditions')))
|
|
160
|
+
}, Object.entries(_constants.OPERATORS).map(([operator, {
|
|
161
|
+
label,
|
|
162
|
+
key
|
|
163
|
+
}]) => (0, _react.createElement)(DropdownMenuRadioItem, {
|
|
164
|
+
key: key,
|
|
165
|
+
name: `view-table-${filter.field}-conditions`,
|
|
166
|
+
value: operator,
|
|
167
|
+
checked: activeOperator === operator,
|
|
168
|
+
onChange: e => onChangeView({
|
|
206
169
|
...view,
|
|
170
|
+
page: 1,
|
|
207
171
|
filters: [...otherFilters, {
|
|
208
172
|
field: filter.field,
|
|
209
|
-
operator:
|
|
173
|
+
operator: e.target.value,
|
|
210
174
|
value: filterInView?.value
|
|
211
175
|
}]
|
|
212
176
|
})
|
|
213
|
-
}, (0,
|
|
214
|
-
}
|
|
177
|
+
}, (0, _react.createElement)(DropdownMenuItemLabel, null, label)))))))));
|
|
178
|
+
});
|
|
215
179
|
function WithSeparators({
|
|
216
180
|
children
|
|
217
181
|
}) {
|
|
@@ -229,25 +193,43 @@ function ViewTable({
|
|
|
229
193
|
isLoading = false,
|
|
230
194
|
deferredRendering
|
|
231
195
|
}) {
|
|
196
|
+
const headerMenuRefs = (0, _element.useRef)(new Map());
|
|
197
|
+
const headerMenuToFocusRef = (0, _element.useRef)();
|
|
198
|
+
const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, _element.useState)();
|
|
199
|
+
(0, _element.useEffect)(() => {
|
|
200
|
+
if (headerMenuToFocusRef.current) {
|
|
201
|
+
headerMenuToFocusRef.current.focus();
|
|
202
|
+
headerMenuToFocusRef.current = undefined;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
const asyncData = (0, _compose.useAsyncList)(data);
|
|
206
|
+
const tableNoticeId = (0, _element.useId)();
|
|
207
|
+
if (nextHeaderMenuToFocus) {
|
|
208
|
+
// If we need to force focus, we short-circuit rendering here
|
|
209
|
+
// to prevent any additional work while we handle that.
|
|
210
|
+
// Clearing out the focus directive is necessary to make sure
|
|
211
|
+
// future renders don't cause unexpected focus jumps.
|
|
212
|
+
headerMenuToFocusRef.current = nextHeaderMenuToFocus;
|
|
213
|
+
setNextHeaderMenuToFocus();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const onHide = field => {
|
|
217
|
+
const hidden = headerMenuRefs.current.get(field.id);
|
|
218
|
+
const fallback = headerMenuRefs.current.get(hidden.fallback);
|
|
219
|
+
setNextHeaderMenuToFocus(fallback?.node);
|
|
220
|
+
};
|
|
232
221
|
const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && ![view.layout.mediaField, view.layout.primaryField].includes(field.id));
|
|
233
|
-
const
|
|
234
|
-
const usedData = deferredRendering ? shownData : data;
|
|
222
|
+
const usedData = deferredRendering ? asyncData : data;
|
|
235
223
|
const hasData = !!usedData?.length;
|
|
236
|
-
if (isLoading) {
|
|
237
|
-
// TODO:Add spinner or progress bar..
|
|
238
|
-
return (0, _react.createElement)("div", {
|
|
239
|
-
className: "dataviews-loading"
|
|
240
|
-
}, (0, _react.createElement)("h3", null, (0, _i18n.__)('Loading')));
|
|
241
|
-
}
|
|
242
224
|
const sortValues = {
|
|
243
225
|
asc: 'ascending',
|
|
244
226
|
desc: 'descending'
|
|
245
227
|
};
|
|
246
|
-
return (0, _react.createElement)("div", {
|
|
247
|
-
className: "dataviews-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
}, (0, _react.createElement)("thead", null, (0, _react.createElement)("tr", null, visibleFields.map(field => (0, _react.createElement)("th", {
|
|
228
|
+
return (0, _react.createElement)("div", null, (0, _react.createElement)("table", {
|
|
229
|
+
className: "dataviews-view-table",
|
|
230
|
+
"aria-busy": isLoading,
|
|
231
|
+
"aria-describedby": tableNoticeId
|
|
232
|
+
}, (0, _react.createElement)("thead", null, (0, _react.createElement)("tr", null, visibleFields.map((field, index) => (0, _react.createElement)("th", {
|
|
251
233
|
key: field.id,
|
|
252
234
|
style: {
|
|
253
235
|
width: field.width || undefined,
|
|
@@ -258,13 +240,26 @@ function ViewTable({
|
|
|
258
240
|
"aria-sort": view.sort?.field === field.id && sortValues[view.sort.direction],
|
|
259
241
|
scope: "col"
|
|
260
242
|
}, (0, _react.createElement)(HeaderMenu, {
|
|
243
|
+
ref: node => {
|
|
244
|
+
if (node) {
|
|
245
|
+
headerMenuRefs.current.set(field.id, {
|
|
246
|
+
node,
|
|
247
|
+
fallback: visibleFields[index > 0 ? index - 1 : 1]?.id
|
|
248
|
+
});
|
|
249
|
+
} else {
|
|
250
|
+
headerMenuRefs.current.delete(field.id);
|
|
251
|
+
}
|
|
252
|
+
},
|
|
261
253
|
field: field,
|
|
262
254
|
view: view,
|
|
263
|
-
onChangeView: onChangeView
|
|
255
|
+
onChangeView: onChangeView,
|
|
256
|
+
onHide: onHide
|
|
264
257
|
}))), !!actions?.length && (0, _react.createElement)("th", {
|
|
265
258
|
"data-field-id": "actions"
|
|
266
|
-
}, (0,
|
|
267
|
-
|
|
259
|
+
}, (0, _react.createElement)("span", {
|
|
260
|
+
className: "dataviews-view-table-header"
|
|
261
|
+
}, (0, _i18n.__)('Actions'))))), (0, _react.createElement)("tbody", null, hasData && usedData.map(item => (0, _react.createElement)("tr", {
|
|
262
|
+
key: getItemId(item)
|
|
268
263
|
}, visibleFields.map(field => (0, _react.createElement)("td", {
|
|
269
264
|
key: field.id,
|
|
270
265
|
style: {
|
|
@@ -277,9 +272,13 @@ function ViewTable({
|
|
|
277
272
|
}))), !!actions?.length && (0, _react.createElement)("td", null, (0, _react.createElement)(_itemActions.default, {
|
|
278
273
|
item: item,
|
|
279
274
|
actions: actions
|
|
280
|
-
})))))),
|
|
281
|
-
className:
|
|
282
|
-
|
|
275
|
+
})))))), (0, _react.createElement)("div", {
|
|
276
|
+
className: (0, _classnames.default)({
|
|
277
|
+
'dataviews-loading': isLoading,
|
|
278
|
+
'dataviews-no-results': !hasData && !isLoading
|
|
279
|
+
}),
|
|
280
|
+
id: tableNoticeId
|
|
281
|
+
}, !hasData && (0, _react.createElement)("p", null, isLoading ? (0, _i18n.__)('Loading…') : (0, _i18n.__)('No results'))));
|
|
283
282
|
}
|
|
284
283
|
var _default = ViewTable;
|
|
285
284
|
exports.default = _default;
|