@wordpress/dataviews 0.2.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.
Files changed (84) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE.md +788 -0
  3. package/README.md +224 -0
  4. package/build/add-filter.js +90 -0
  5. package/build/add-filter.js.map +1 -0
  6. package/build/constants.js +55 -0
  7. package/build/constants.js.map +1 -0
  8. package/build/dataviews.js +93 -0
  9. package/build/dataviews.js.map +1 -0
  10. package/build/filter-summary.js +137 -0
  11. package/build/filter-summary.js.map +1 -0
  12. package/build/filters.js +75 -0
  13. package/build/filters.js.map +1 -0
  14. package/build/index.js +21 -0
  15. package/build/index.js.map +1 -0
  16. package/build/item-actions.js +185 -0
  17. package/build/item-actions.js.map +1 -0
  18. package/build/lock-unlock.js +18 -0
  19. package/build/lock-unlock.js.map +1 -0
  20. package/build/pagination.js +123 -0
  21. package/build/pagination.js.map +1 -0
  22. package/build/reset-filters.js +33 -0
  23. package/build/reset-filters.js.map +1 -0
  24. package/build/search.js +46 -0
  25. package/build/search.js.map +1 -0
  26. package/build/view-actions.js +223 -0
  27. package/build/view-actions.js.map +1 -0
  28. package/build/view-grid.js +80 -0
  29. package/build/view-grid.js.map +1 -0
  30. package/build/view-list.js +83 -0
  31. package/build/view-list.js.map +1 -0
  32. package/build/view-table.js +286 -0
  33. package/build/view-table.js.map +1 -0
  34. package/build-module/add-filter.js +83 -0
  35. package/build-module/add-filter.js.map +1 -0
  36. package/build-module/constants.js +41 -0
  37. package/build-module/constants.js.map +1 -0
  38. package/build-module/dataviews.js +85 -0
  39. package/build-module/dataviews.js.map +1 -0
  40. package/build-module/filter-summary.js +130 -0
  41. package/build-module/filter-summary.js.map +1 -0
  42. package/build-module/filters.js +67 -0
  43. package/build-module/filters.js.map +1 -0
  44. package/build-module/index.js +3 -0
  45. package/build-module/index.js.map +1 -0
  46. package/build-module/item-actions.js +178 -0
  47. package/build-module/item-actions.js.map +1 -0
  48. package/build-module/lock-unlock.js +9 -0
  49. package/build-module/lock-unlock.js.map +1 -0
  50. package/build-module/pagination.js +115 -0
  51. package/build-module/pagination.js.map +1 -0
  52. package/build-module/reset-filters.js +26 -0
  53. package/build-module/reset-filters.js.map +1 -0
  54. package/build-module/search.js +39 -0
  55. package/build-module/search.js.map +1 -0
  56. package/build-module/view-actions.js +216 -0
  57. package/build-module/view-actions.js.map +1 -0
  58. package/build-module/view-grid.js +72 -0
  59. package/build-module/view-grid.js.map +1 -0
  60. package/build-module/view-list.js +75 -0
  61. package/build-module/view-list.js.map +1 -0
  62. package/build-module/view-table.js +277 -0
  63. package/build-module/view-table.js.map +1 -0
  64. package/build-style/style-rtl.css +325 -0
  65. package/build-style/style.css +325 -0
  66. package/package.json +49 -0
  67. package/src/add-filter.js +106 -0
  68. package/src/constants.js +50 -0
  69. package/src/dataviews.js +99 -0
  70. package/src/filter-summary.js +221 -0
  71. package/src/filters.js +84 -0
  72. package/src/index.js +2 -0
  73. package/src/item-actions.js +211 -0
  74. package/src/lock-unlock.js +10 -0
  75. package/src/pagination.js +144 -0
  76. package/src/reset-filters.js +26 -0
  77. package/src/search.js +38 -0
  78. package/src/stories/fixtures.js +126 -0
  79. package/src/stories/index.story.js +137 -0
  80. package/src/style.scss +245 -0
  81. package/src/view-actions.js +298 -0
  82. package/src/view-grid.js +100 -0
  83. package/src/view-list.js +99 -0
  84. package/src/view-table.js +425 -0
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = require("react");
9
+ var _i18n = require("@wordpress/i18n");
10
+ var _compose = require("@wordpress/compose");
11
+ var _icons = require("@wordpress/icons");
12
+ var _components = require("@wordpress/components");
13
+ var _element = require("@wordpress/element");
14
+ var _lockUnlock = require("./lock-unlock");
15
+ var _itemActions = _interopRequireDefault(require("./item-actions"));
16
+ var _constants = require("./constants");
17
+ /**
18
+ * WordPress dependencies
19
+ */
20
+
21
+ /**
22
+ * Internal dependencies
23
+ */
24
+
25
+ const {
26
+ DropdownMenuV2: DropdownMenu,
27
+ DropdownMenuGroupV2: DropdownMenuGroup,
28
+ DropdownMenuItemV2: DropdownMenuItem,
29
+ DropdownMenuSeparatorV2: DropdownMenuSeparator,
30
+ DropdownSubMenuV2: DropdownSubMenu,
31
+ DropdownSubMenuTriggerV2: DropdownSubMenuTrigger
32
+ } = (0, _lockUnlock.unlock)(_components.privateApis);
33
+ const sortingItemsInfo = {
34
+ asc: {
35
+ icon: _icons.arrowUp,
36
+ label: (0, _i18n.__)('Sort ascending')
37
+ },
38
+ desc: {
39
+ icon: _icons.arrowDown,
40
+ label: (0, _i18n.__)('Sort descending')
41
+ }
42
+ };
43
+ const sortIcons = {
44
+ asc: _icons.chevronUp,
45
+ desc: _icons.chevronDown
46
+ };
47
+ function HeaderMenu({
48
+ field,
49
+ view,
50
+ onChangeView
51
+ }) {
52
+ const isSortable = field.enableSorting !== false;
53
+ const isHidable = field.enableHiding !== false;
54
+ if (!isSortable && !isHidable) {
55
+ return field.header;
56
+ }
57
+ const isSorted = view.sort?.field === field.id;
58
+ let filter, filterInView;
59
+ const otherFilters = [];
60
+ if (field.type === _constants.ENUMERATION_TYPE) {
61
+ let columnOperators = field.filterBy?.operators;
62
+ if (!columnOperators || !Array.isArray(columnOperators)) {
63
+ columnOperators = [_constants.OPERATOR_IN, _constants.OPERATOR_NOT_IN];
64
+ }
65
+ const operators = columnOperators.filter(operator => [_constants.OPERATOR_IN, _constants.OPERATOR_NOT_IN].includes(operator));
66
+ if (operators.length >= 0) {
67
+ filter = {
68
+ field: field.id,
69
+ operators,
70
+ elements: field.elements || []
71
+ };
72
+ filterInView = {
73
+ field: filter.field,
74
+ operator: filter.operators[0],
75
+ value: undefined
76
+ };
77
+ }
78
+ }
79
+ const isFilterable = !!filter;
80
+ if (isFilterable) {
81
+ const columnFilters = view.filters;
82
+ columnFilters.forEach(columnFilter => {
83
+ if (columnFilter.field === filter.field) {
84
+ filterInView = {
85
+ ...columnFilter
86
+ };
87
+ } else {
88
+ otherFilters.push(columnFilter);
89
+ }
90
+ });
91
+ }
92
+ return (0, _react.createElement)(DropdownMenu, {
93
+ align: "start",
94
+ trigger: (0, _react.createElement)(_components.Button, {
95
+ icon: isSorted && sortIcons[view.sort.direction],
96
+ iconPosition: "right",
97
+ text: field.header,
98
+ style: {
99
+ padding: 0
100
+ },
101
+ size: "compact"
102
+ })
103
+ }, (0, _react.createElement)(WithSeparators, null, isSortable && (0, _react.createElement)(DropdownMenuGroup, null, Object.entries(sortingItemsInfo).map(([direction, info]) => {
104
+ const isActive = isSorted && view.sort.direction === direction;
105
+ return (0, _react.createElement)(DropdownMenuItem, {
106
+ key: direction,
107
+ role: "menuitemradio",
108
+ "aria-checked": isActive,
109
+ prefix: (0, _react.createElement)(_components.Icon, {
110
+ icon: info.icon
111
+ }),
112
+ suffix: isActive && (0, _react.createElement)(_components.Icon, {
113
+ icon: _icons.check
114
+ }),
115
+ onSelect: event => {
116
+ event.preventDefault();
117
+ onChangeView({
118
+ ...view,
119
+ sort: {
120
+ field: field.id,
121
+ direction
122
+ }
123
+ });
124
+ }
125
+ }, info.label);
126
+ })), isHidable && (0, _react.createElement)(DropdownMenuItem, {
127
+ role: "menuitemradio",
128
+ "aria-checked": false,
129
+ prefix: (0, _react.createElement)(_components.Icon, {
130
+ icon: _icons.unseen
131
+ }),
132
+ onSelect: event => {
133
+ event.preventDefault();
134
+ onChangeView({
135
+ ...view,
136
+ hiddenFields: view.hiddenFields.concat(field.id)
137
+ });
138
+ }
139
+ }, (0, _i18n.__)('Hide')), isFilterable && (0, _react.createElement)(DropdownMenuGroup, null, (0, _react.createElement)(DropdownSubMenu, {
140
+ key: filter.field,
141
+ trigger: (0, _react.createElement)(DropdownSubMenuTrigger, {
142
+ prefix: (0, _react.createElement)(_components.Icon, {
143
+ icon: _icons.funnel
144
+ }),
145
+ suffix: (0, _react.createElement)(_components.Icon, {
146
+ icon: _icons.chevronRightSmall
147
+ })
148
+ }, (0, _i18n.__)('Filter by'))
149
+ }, (0, _react.createElement)(WithSeparators, null, (0, _react.createElement)(DropdownMenuGroup, null, filter.elements.map(element => {
150
+ let isActive = false;
151
+ if (filterInView) {
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, {
160
+ key: element.value,
161
+ role: "menuitemradio",
162
+ "aria-checked": isActive,
163
+ prefix: isActive && (0, _react.createElement)(_components.Icon, {
164
+ icon: _icons.check
165
+ }),
166
+ onSelect: () => {
167
+ onChangeView({
168
+ ...view,
169
+ filters: [...otherFilters, {
170
+ field: filter.field,
171
+ operator: filterInView?.operator,
172
+ value: isActive ? undefined : element.value
173
+ }]
174
+ });
175
+ }
176
+ }, element.label);
177
+ })), filter.operators.length > 1 && (0, _react.createElement)(DropdownSubMenu, {
178
+ trigger: (0, _react.createElement)(DropdownSubMenuTrigger, {
179
+ suffix: (0, _react.createElement)(_element.Fragment, null, filterInView.operator === _constants.OPERATOR_IN ? (0, _i18n.__)('Is') : (0, _i18n.__)('Is not'), (0, _react.createElement)(_components.Icon, {
180
+ icon: _icons.chevronRightSmall
181
+ }), ' ')
182
+ }, (0, _i18n.__)('Conditions'))
183
+ }, (0, _react.createElement)(DropdownMenuItem, {
184
+ key: "in-filter",
185
+ role: "menuitemradio",
186
+ "aria-checked": filterInView?.operator === _constants.OPERATOR_IN,
187
+ prefix: filterInView?.operator === _constants.OPERATOR_IN && (0, _react.createElement)(_components.Icon, {
188
+ icon: _icons.check
189
+ }),
190
+ onSelect: () => onChangeView({
191
+ ...view,
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({
206
+ ...view,
207
+ filters: [...otherFilters, {
208
+ field: filter.field,
209
+ operator: _constants.OPERATOR_NOT_IN,
210
+ value: filterInView?.value
211
+ }]
212
+ })
213
+ }, (0, _i18n.__)('Is not'))))))));
214
+ }
215
+ function WithSeparators({
216
+ children
217
+ }) {
218
+ return _element.Children.toArray(children).filter(Boolean).map((child, i) => (0, _react.createElement)(_element.Fragment, {
219
+ key: i
220
+ }, i > 0 && (0, _react.createElement)(DropdownMenuSeparator, null), child));
221
+ }
222
+ function ViewTable({
223
+ view,
224
+ onChangeView,
225
+ fields,
226
+ actions,
227
+ data,
228
+ getItemId,
229
+ isLoading = false,
230
+ deferredRendering
231
+ }) {
232
+ const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && ![view.layout.mediaField, view.layout.primaryField].includes(field.id));
233
+ const shownData = (0, _compose.useAsyncList)(data);
234
+ const usedData = deferredRendering ? shownData : data;
235
+ 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
+ const sortValues = {
243
+ asc: 'ascending',
244
+ desc: 'descending'
245
+ };
246
+ return (0, _react.createElement)("div", {
247
+ className: "dataviews-table-view-wrapper"
248
+ }, hasData && (0, _react.createElement)("table", {
249
+ className: "dataviews-table-view"
250
+ }, (0, _react.createElement)("thead", null, (0, _react.createElement)("tr", null, visibleFields.map(field => (0, _react.createElement)("th", {
251
+ key: field.id,
252
+ style: {
253
+ width: field.width || undefined,
254
+ minWidth: field.minWidth || undefined,
255
+ maxWidth: field.maxWidth || undefined
256
+ },
257
+ "data-field-id": field.id,
258
+ "aria-sort": view.sort?.field === field.id && sortValues[view.sort.direction],
259
+ scope: "col"
260
+ }, (0, _react.createElement)(HeaderMenu, {
261
+ field: field,
262
+ view: view,
263
+ onChangeView: onChangeView
264
+ }))), !!actions?.length && (0, _react.createElement)("th", {
265
+ "data-field-id": "actions"
266
+ }, (0, _i18n.__)('Actions')))), (0, _react.createElement)("tbody", null, usedData.map((item, index) => (0, _react.createElement)("tr", {
267
+ key: getItemId?.(item) || index
268
+ }, visibleFields.map(field => (0, _react.createElement)("td", {
269
+ key: field.id,
270
+ style: {
271
+ width: field.width || undefined,
272
+ minWidth: field.minWidth || undefined,
273
+ maxWidth: field.maxWidth || undefined
274
+ }
275
+ }, field.render({
276
+ item
277
+ }))), !!actions?.length && (0, _react.createElement)("td", null, (0, _react.createElement)(_itemActions.default, {
278
+ item: item,
279
+ actions: actions
280
+ })))))), !hasData && (0, _react.createElement)("div", {
281
+ className: "dataviews-no-results"
282
+ }, (0, _react.createElement)("p", null, (0, _i18n.__)('No results'))));
283
+ }
284
+ var _default = ViewTable;
285
+ exports.default = _default;
286
+ //# sourceMappingURL=view-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_i18n","require","_compose","_icons","_components","_element","_lockUnlock","_itemActions","_interopRequireDefault","_constants","DropdownMenuV2","DropdownMenu","DropdownMenuGroupV2","DropdownMenuGroup","DropdownMenuItemV2","DropdownMenuItem","DropdownMenuSeparatorV2","DropdownMenuSeparator","DropdownSubMenuV2","DropdownSubMenu","DropdownSubMenuTriggerV2","DropdownSubMenuTrigger","unlock","componentsPrivateApis","sortingItemsInfo","asc","icon","arrowUp","label","__","desc","arrowDown","sortIcons","chevronUp","chevronDown","HeaderMenu","field","view","onChangeView","isSortable","enableSorting","isHidable","enableHiding","header","isSorted","sort","id","filter","filterInView","otherFilters","type","ENUMERATION_TYPE","columnOperators","filterBy","operators","Array","isArray","OPERATOR_IN","OPERATOR_NOT_IN","operator","includes","length","elements","value","undefined","isFilterable","columnFilters","filters","forEach","columnFilter","push","_react","createElement","align","trigger","Button","direction","iconPosition","text","style","padding","size","WithSeparators","Object","entries","map","info","isActive","key","role","prefix","Icon","suffix","check","onSelect","event","preventDefault","unseen","hiddenFields","concat","funnel","chevronRightSmall","element","Fragment","children","Children","toArray","Boolean","child","i","ViewTable","fields","actions","data","getItemId","isLoading","deferredRendering","visibleFields","layout","mediaField","primaryField","shownData","useAsyncList","usedData","hasData","className","sortValues","width","minWidth","maxWidth","scope","item","index","render","default","_default","exports"],"sources":["@wordpress/dataviews/src/view-table.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useAsyncList } from '@wordpress/compose';\nimport {\n\tchevronDown,\n\tchevronUp,\n\tunseen,\n\tcheck,\n\tarrowUp,\n\tarrowDown,\n\tchevronRightSmall,\n\tfunnel,\n} from '@wordpress/icons';\nimport {\n\tButton,\n\tIcon,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { Children, Fragment } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\nimport ItemActions from './item-actions';\nimport { ENUMERATION_TYPE, OPERATOR_IN, OPERATOR_NOT_IN } from './constants';\n\nconst {\n\tDropdownMenuV2: DropdownMenu,\n\tDropdownMenuGroupV2: DropdownMenuGroup,\n\tDropdownMenuItemV2: DropdownMenuItem,\n\tDropdownMenuSeparatorV2: DropdownMenuSeparator,\n\tDropdownSubMenuV2: DropdownSubMenu,\n\tDropdownSubMenuTriggerV2: DropdownSubMenuTrigger,\n} = unlock( componentsPrivateApis );\n\nconst sortingItemsInfo = {\n\tasc: { icon: arrowUp, label: __( 'Sort ascending' ) },\n\tdesc: { icon: arrowDown, label: __( 'Sort descending' ) },\n};\nconst sortIcons = { asc: chevronUp, desc: chevronDown };\n\nfunction HeaderMenu( { field, view, onChangeView } ) {\n\tconst isSortable = field.enableSorting !== false;\n\tconst isHidable = field.enableHiding !== false;\n\tif ( ! isSortable && ! isHidable ) {\n\t\treturn field.header;\n\t}\n\tconst isSorted = view.sort?.field === field.id;\n\tlet filter, filterInView;\n\tconst otherFilters = [];\n\tif ( field.type === ENUMERATION_TYPE ) {\n\t\tlet columnOperators = field.filterBy?.operators;\n\t\tif ( ! columnOperators || ! Array.isArray( columnOperators ) ) {\n\t\t\tcolumnOperators = [ OPERATOR_IN, OPERATOR_NOT_IN ];\n\t\t}\n\t\tconst operators = columnOperators.filter( ( operator ) =>\n\t\t\t[ OPERATOR_IN, OPERATOR_NOT_IN ].includes( operator )\n\t\t);\n\t\tif ( operators.length >= 0 ) {\n\t\t\tfilter = {\n\t\t\t\tfield: field.id,\n\t\t\t\toperators,\n\t\t\t\telements: field.elements || [],\n\t\t\t};\n\t\t\tfilterInView = {\n\t\t\t\tfield: filter.field,\n\t\t\t\toperator: filter.operators[ 0 ],\n\t\t\t\tvalue: undefined,\n\t\t\t};\n\t\t}\n\t}\n\tconst isFilterable = !! filter;\n\n\tif ( isFilterable ) {\n\t\tconst columnFilters = view.filters;\n\t\tcolumnFilters.forEach( ( columnFilter ) => {\n\t\t\tif ( columnFilter.field === filter.field ) {\n\t\t\t\tfilterInView = {\n\t\t\t\t\t...columnFilter,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\totherFilters.push( columnFilter );\n\t\t\t}\n\t\t} );\n\t}\n\treturn (\n\t\t<DropdownMenu\n\t\t\talign=\"start\"\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\ticon={ isSorted && sortIcons[ view.sort.direction ] }\n\t\t\t\t\ticonPosition=\"right\"\n\t\t\t\t\ttext={ field.header }\n\t\t\t\t\tstyle={ { padding: 0 } }\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<WithSeparators>\n\t\t\t\t{ isSortable && (\n\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t{ Object.entries( sortingItemsInfo ).map(\n\t\t\t\t\t\t\t( [ direction, info ] ) => {\n\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\tisSorted &&\n\t\t\t\t\t\t\t\t\tview.sort.direction === direction;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ direction }\n\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\taria-checked={ isActive }\n\t\t\t\t\t\t\t\t\t\tprefix={ <Icon icon={ info.icon } /> }\n\t\t\t\t\t\t\t\t\t\tsuffix={\n\t\t\t\t\t\t\t\t\t\t\tisActive && <Icon icon={ check } />\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfield: field.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdirection,\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} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ info.label }\n\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t) }\n\t\t\t\t{ isHidable && (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\taria-checked={ false }\n\t\t\t\t\t\tprefix={ <Icon icon={ unseen } /> }\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\thiddenFields: view.hiddenFields.concat(\n\t\t\t\t\t\t\t\t\tfield.id\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Hide' ) }\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) }\n\t\t\t\t{ isFilterable && (\n\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t<DropdownSubMenu\n\t\t\t\t\t\t\tkey={ filter.field }\n\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t<DropdownSubMenuTrigger\n\t\t\t\t\t\t\t\t\tprefix={ <Icon icon={ funnel } /> }\n\t\t\t\t\t\t\t\t\tsuffix={\n\t\t\t\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Filter by' ) }\n\t\t\t\t\t\t\t\t</DropdownSubMenuTrigger>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<WithSeparators>\n\t\t\t\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t\t\t\t{ filter.elements.map( ( element ) => {\n\t\t\t\t\t\t\t\t\t\tlet isActive = false;\n\t\t\t\t\t\t\t\t\t\tif ( filterInView ) {\n\t\t\t\t\t\t\t\t\t\t\t// Intentionally use loose comparison, so it does type conversion.\n\t\t\t\t\t\t\t\t\t\t\t// This covers the case where a top-level filter for the same field converts a number into a string.\n\t\t\t\t\t\t\t\t\t\t\t/* eslint-disable eqeqeq */\n\t\t\t\t\t\t\t\t\t\t\tisActive =\n\t\t\t\t\t\t\t\t\t\t\t\telement.value ==\n\t\t\t\t\t\t\t\t\t\t\t\tfilterInView.value;\n\t\t\t\t\t\t\t\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ element.value }\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-checked={ isActive }\n\t\t\t\t\t\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\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}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...otherFilters,\n\t\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\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilterInView?.operator,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: isActive\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: element.value,\n\t\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\t],\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} }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ element.label }\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t\t\t\t\t{ filter.operators.length > 1 && (\n\t\t\t\t\t\t\t\t\t<DropdownSubMenu\n\t\t\t\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t\t\t\t<DropdownSubMenuTrigger\n\t\t\t\t\t\t\t\t\t\t\t\tsuffix={\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{ filterInView.operator ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_IN\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? __( 'Is' )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: __( 'Is not' ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchevronRightSmall\n\t\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\t/>{ ' ' }\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}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ __( 'Conditions' ) }\n\t\t\t\t\t\t\t\t\t\t\t</DropdownSubMenuTrigger>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey=\"in-filter\"\n\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\taria-checked={\n\t\t\t\t\t\t\t\t\t\t\t\tfilterInView?.operator ===\n\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_IN\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\t\t\t\tfilterInView?.operator ===\n\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_IN && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\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\tonSelect={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...otherFilters,\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\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_IN,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: filterInView?.value,\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],\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>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Is' ) }\n\t\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey=\"not-in-filter\"\n\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\taria-checked={\n\t\t\t\t\t\t\t\t\t\t\t\tfilterInView?.operator ===\n\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_NOT_IN\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\t\t\t\tfilterInView?.operator ===\n\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_NOT_IN && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\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\tonSelect={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...otherFilters,\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\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_NOT_IN,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: filterInView?.value,\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],\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>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Is not' ) }\n\t\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t\t</DropdownSubMenu>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</WithSeparators>\n\t\t\t\t\t\t</DropdownSubMenu>\n\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t) }\n\t\t\t</WithSeparators>\n\t\t</DropdownMenu>\n\t);\n}\n\nfunction WithSeparators( { children } ) {\n\treturn Children.toArray( children )\n\t\t.filter( Boolean )\n\t\t.map( ( child, i ) => (\n\t\t\t<Fragment key={ i }>\n\t\t\t\t{ i > 0 && <DropdownMenuSeparator /> }\n\t\t\t\t{ child }\n\t\t\t</Fragment>\n\t\t) );\n}\n\nfunction ViewTable( {\n\tview,\n\tonChangeView,\n\tfields,\n\tactions,\n\tdata,\n\tgetItemId,\n\tisLoading = false,\n\tdeferredRendering,\n} ) {\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 );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst hasData = !! usedData?.length;\n\tif ( isLoading ) {\n\t\t// TODO:Add spinner or progress bar..\n\t\treturn (\n\t\t\t<div className=\"dataviews-loading\">\n\t\t\t\t<h3>{ __( 'Loading' ) }</h3>\n\t\t\t</div>\n\t\t);\n\t}\n\tconst sortValues = { asc: 'ascending', desc: 'descending' };\n\treturn (\n\t\t<div className=\"dataviews-table-view-wrapper\">\n\t\t\t{ hasData && (\n\t\t\t\t<table className=\"dataviews-table-view\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\t\twidth: field.width || undefined,\n\t\t\t\t\t\t\t\t\t\tminWidth: field.minWidth || undefined,\n\t\t\t\t\t\t\t\t\t\tmaxWidth: field.maxWidth || undefined,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tdata-field-id={ field.id }\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tview.sort?.field === field.id &&\n\t\t\t\t\t\t\t\t\t\tsortValues[ view.sort.direction ]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<HeaderMenu\n\t\t\t\t\t\t\t\t\t\tfield={ field }\n\t\t\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t{ !! actions?.length && (\n\t\t\t\t\t\t\t\t<th data-field-id=\"actions\">\n\t\t\t\t\t\t\t\t\t{ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{ usedData.map( ( item, index ) => (\n\t\t\t\t\t\t\t<tr key={ getItemId?.( item ) || index }>\n\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => (\n\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\t\t\twidth: field.width || undefined,\n\t\t\t\t\t\t\t\t\t\t\tminWidth:\n\t\t\t\t\t\t\t\t\t\t\t\tfield.minWidth || undefined,\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth:\n\t\t\t\t\t\t\t\t\t\t\t\tfield.maxWidth || undefined,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ field.render( {\n\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t{ !! actions?.length && (\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t<ItemActions\n\t\t\t\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t) }\n\t\t\t{ ! hasData && (\n\t\t\t\t<div className=\"dataviews-no-results\">\n\t\t\t\t\t<p>{ __( 'No results' ) }</p>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nexport default ViewTable;\n"],"mappings":";;;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAUA,IAAAG,WAAA,GAAAH,OAAA;AAKA,IAAAI,QAAA,GAAAJ,OAAA;AAKA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAC,sBAAA,CAAAP,OAAA;AACA,IAAAQ,UAAA,GAAAR,OAAA;AA3BA;AACA;AACA;;AAoBA;AACA;AACA;;AAKA,MAAM;EACLS,cAAc,EAAEC,YAAY;EAC5BC,mBAAmB,EAAEC,iBAAiB;EACtCC,kBAAkB,EAAEC,gBAAgB;EACpCC,uBAAuB,EAAEC,qBAAqB;EAC9CC,iBAAiB,EAAEC,eAAe;EAClCC,wBAAwB,EAAEC;AAC3B,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAsB,CAAC;AAEnC,MAAMC,gBAAgB,GAAG;EACxBC,GAAG,EAAE;IAAEC,IAAI,EAAEC,cAAO;IAAEC,KAAK,EAAE,IAAAC,QAAE,EAAE,gBAAiB;EAAE,CAAC;EACrDC,IAAI,EAAE;IAAEJ,IAAI,EAAEK,gBAAS;IAAEH,KAAK,EAAE,IAAAC,QAAE,EAAE,iBAAkB;EAAE;AACzD,CAAC;AACD,MAAMG,SAAS,GAAG;EAAEP,GAAG,EAAEQ,gBAAS;EAAEH,IAAI,EAAEI;AAAY,CAAC;AAEvD,SAASC,UAAUA,CAAE;EAAEC,KAAK;EAAEC,IAAI;EAAEC;AAAa,CAAC,EAAG;EACpD,MAAMC,UAAU,GAAGH,KAAK,CAACI,aAAa,KAAK,KAAK;EAChD,MAAMC,SAAS,GAAGL,KAAK,CAACM,YAAY,KAAK,KAAK;EAC9C,IAAK,CAAEH,UAAU,IAAI,CAAEE,SAAS,EAAG;IAClC,OAAOL,KAAK,CAACO,MAAM;EACpB;EACA,MAAMC,QAAQ,GAAGP,IAAI,CAACQ,IAAI,EAAET,KAAK,KAAKA,KAAK,CAACU,EAAE;EAC9C,IAAIC,MAAM,EAAEC,YAAY;EACxB,MAAMC,YAAY,GAAG,EAAE;EACvB,IAAKb,KAAK,CAACc,IAAI,KAAKC,2BAAgB,EAAG;IACtC,IAAIC,eAAe,GAAGhB,KAAK,CAACiB,QAAQ,EAAEC,SAAS;IAC/C,IAAK,CAAEF,eAAe,IAAI,CAAEG,KAAK,CAACC,OAAO,CAAEJ,eAAgB,CAAC,EAAG;MAC9DA,eAAe,GAAG,CAAEK,sBAAW,EAAEC,0BAAe,CAAE;IACnD;IACA,MAAMJ,SAAS,GAAGF,eAAe,CAACL,MAAM,CAAIY,QAAQ,IACnD,CAAEF,sBAAW,EAAEC,0BAAe,CAAE,CAACE,QAAQ,CAAED,QAAS,CACrD,CAAC;IACD,IAAKL,SAAS,CAACO,MAAM,IAAI,CAAC,EAAG;MAC5Bd,MAAM,GAAG;QACRX,KAAK,EAAEA,KAAK,CAACU,EAAE;QACfQ,SAAS;QACTQ,QAAQ,EAAE1B,KAAK,CAAC0B,QAAQ,IAAI;MAC7B,CAAC;MACDd,YAAY,GAAG;QACdZ,KAAK,EAAEW,MAAM,CAACX,KAAK;QACnBuB,QAAQ,EAAEZ,MAAM,CAACO,SAAS,CAAE,CAAC,CAAE;QAC/BS,KAAK,EAAEC;MACR,CAAC;IACF;EACD;EACA,MAAMC,YAAY,GAAG,CAAC,CAAElB,MAAM;EAE9B,IAAKkB,YAAY,EAAG;IACnB,MAAMC,aAAa,GAAG7B,IAAI,CAAC8B,OAAO;IAClCD,aAAa,CAACE,OAAO,CAAIC,YAAY,IAAM;MAC1C,IAAKA,YAAY,CAACjC,KAAK,KAAKW,MAAM,CAACX,KAAK,EAAG;QAC1CY,YAAY,GAAG;UACd,GAAGqB;QACJ,CAAC;MACF,CAAC,MAAM;QACNpB,YAAY,CAACqB,IAAI,CAAED,YAAa,CAAC;MAClC;IACD,CAAE,CAAC;EACJ;EACA,OACC,IAAAE,MAAA,CAAAC,aAAA,EAAC7D,YAAY;IACZ8D,KAAK,EAAC,OAAO;IACbC,OAAO,EACN,IAAAH,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuE,MAAM;MACNjD,IAAI,EAAGkB,QAAQ,IAAIZ,SAAS,CAAEK,IAAI,CAACQ,IAAI,CAAC+B,SAAS,CAAI;MACrDC,YAAY,EAAC,OAAO;MACpBC,IAAI,EAAG1C,KAAK,CAACO,MAAQ;MACrBoC,KAAK,EAAG;QAAEC,OAAO,EAAE;MAAE,CAAG;MACxBC,IAAI,EAAC;IAAS,CACd;EACD,GAED,IAAAV,MAAA,CAAAC,aAAA,EAACU,cAAc,QACZ3C,UAAU,IACX,IAAAgC,MAAA,CAAAC,aAAA,EAAC3D,iBAAiB,QACfsE,MAAM,CAACC,OAAO,CAAE5D,gBAAiB,CAAC,CAAC6D,GAAG,CACvC,CAAE,CAAET,SAAS,EAAEU,IAAI,CAAE,KAAM;IAC1B,MAAMC,QAAQ,GACb3C,QAAQ,IACRP,IAAI,CAACQ,IAAI,CAAC+B,SAAS,KAAKA,SAAS;IAClC,OACC,IAAAL,MAAA,CAAAC,aAAA,EAACzD,gBAAgB;MAChByE,GAAG,EAAGZ,SAAW;MACjBa,IAAI,EAAC,eAAe;MACpB,gBAAeF,QAAU;MACzBG,MAAM,EAAG,IAAAnB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QAACjE,IAAI,EAAG4D,IAAI,CAAC5D;MAAM,CAAE,CAAG;MACtCkE,MAAM,EACLL,QAAQ,IAAI,IAAAhB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QAACjE,IAAI,EAAGmE;MAAO,CAAE,CAClC;MACDC,QAAQ,EAAKC,KAAK,IAAM;QACvBA,KAAK,CAACC,cAAc,CAAC,CAAC;QACtB1D,YAAY,CAAE;UACb,GAAGD,IAAI;UACPQ,IAAI,EAAE;YACLT,KAAK,EAAEA,KAAK,CAACU,EAAE;YACf8B;UACD;QACD,CAAE,CAAC;MACJ;IAAG,GAEDU,IAAI,CAAC1D,KACU,CAAC;EAErB,CACD,CACkB,CACnB,EACCa,SAAS,IACV,IAAA8B,MAAA,CAAAC,aAAA,EAACzD,gBAAgB;IAChB0E,IAAI,EAAC,eAAe;IACpB,gBAAe,KAAO;IACtBC,MAAM,EAAG,IAAAnB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;MAACjE,IAAI,EAAGuE;IAAQ,CAAE,CAAG;IACnCH,QAAQ,EAAKC,KAAK,IAAM;MACvBA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtB1D,YAAY,CAAE;QACb,GAAGD,IAAI;QACP6D,YAAY,EAAE7D,IAAI,CAAC6D,YAAY,CAACC,MAAM,CACrC/D,KAAK,CAACU,EACP;MACD,CAAE,CAAC;IACJ;EAAG,GAED,IAAAjB,QAAE,EAAE,MAAO,CACI,CAClB,EACCoC,YAAY,IACb,IAAAM,MAAA,CAAAC,aAAA,EAAC3D,iBAAiB,QACjB,IAAA0D,MAAA,CAAAC,aAAA,EAACrD,eAAe;IACfqE,GAAG,EAAGzC,MAAM,CAACX,KAAO;IACpBsC,OAAO,EACN,IAAAH,MAAA,CAAAC,aAAA,EAACnD,sBAAsB;MACtBqE,MAAM,EAAG,IAAAnB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QAACjE,IAAI,EAAG0E;MAAQ,CAAE,CAAG;MACnCR,MAAM,EACL,IAAArB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QAACjE,IAAI,EAAG2E;MAAmB,CAAE;IAClC,GAEC,IAAAxE,QAAE,EAAE,WAAY,CACK;EACxB,GAED,IAAA0C,MAAA,CAAAC,aAAA,EAACU,cAAc,QACd,IAAAX,MAAA,CAAAC,aAAA,EAAC3D,iBAAiB,QACfkC,MAAM,CAACe,QAAQ,CAACuB,GAAG,CAAIiB,OAAO,IAAM;IACrC,IAAIf,QAAQ,GAAG,KAAK;IACpB,IAAKvC,YAAY,EAAG;MACnB;MACA;MACA;MACAuC,QAAQ,GACPe,OAAO,CAACvC,KAAK,IACbf,YAAY,CAACe,KAAK;MACnB;IACD;;IAEA,OACC,IAAAQ,MAAA,CAAAC,aAAA,EAACzD,gBAAgB;MAChByE,GAAG,EAAGc,OAAO,CAACvC,KAAO;MACrB0B,IAAI,EAAC,eAAe;MACpB,gBAAeF,QAAU;MACzBG,MAAM,EACLH,QAAQ,IACP,IAAAhB,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QAACjE,IAAI,EAAGmE;MAAO,CAAE,CAEvB;MACDC,QAAQ,EAAGA,CAAA,KAAM;QAChBxD,YAAY,CAAE;UACb,GAAGD,IAAI;UACP8B,OAAO,EAAE,CACR,GAAGlB,YAAY,EACf;YACCb,KAAK,EAAEW,MAAM,CAACX,KAAK;YACnBuB,QAAQ,EACPX,YAAY,EAAEW,QAAQ;YACvBI,KAAK,EAAEwB,QAAQ,GACZvB,SAAS,GACTsC,OAAO,CAACvC;UACZ,CAAC;QAEH,CAAE,CAAC;MACJ;IAAG,GAEDuC,OAAO,CAAC1E,KACO,CAAC;EAErB,CAAE,CACgB,CAAC,EAClBmB,MAAM,CAACO,SAAS,CAACO,MAAM,GAAG,CAAC,IAC5B,IAAAU,MAAA,CAAAC,aAAA,EAACrD,eAAe;IACfuD,OAAO,EACN,IAAAH,MAAA,CAAAC,aAAA,EAACnD,sBAAsB;MACtBuE,MAAM,EACL,IAAArB,MAAA,CAAAC,aAAA,EAAAnE,QAAA,CAAAkG,QAAA,QACGvD,YAAY,CAACW,QAAQ,KACvBF,sBAAW,GACR,IAAA5B,QAAE,EAAE,IAAK,CAAC,GACV,IAAAA,QAAE,EAAE,QAAS,CAAC,EACjB,IAAA0C,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;QACJjE,IAAI,EACH2E;MACA,CACD,CAAC,EAAE,GACH;IACF,GAEC,IAAAxE,QAAE,EAAE,YAAa,CACI;EACxB,GAED,IAAA0C,MAAA,CAAAC,aAAA,EAACzD,gBAAgB;IAChByE,GAAG,EAAC,WAAW;IACfC,IAAI,EAAC,eAAe;IACpB,gBACCzC,YAAY,EAAEW,QAAQ,KACtBF,sBACA;IACDiC,MAAM,EACL1C,YAAY,EAAEW,QAAQ,KACrBF,sBAAW,IACX,IAAAc,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;MAACjE,IAAI,EAAGmE;IAAO,CAAE,CAEvB;IACDC,QAAQ,EAAGA,CAAA,KACVxD,YAAY,CAAE;MACb,GAAGD,IAAI;MACP8B,OAAO,EAAE,CACR,GAAGlB,YAAY,EACf;QACCb,KAAK,EAAEW,MAAM,CAACX,KAAK;QACnBuB,QAAQ,EACPF,sBAAW;QACZM,KAAK,EAAEf,YAAY,EAAEe;MACtB,CAAC;IAEH,CAAE;EACF,GAEC,IAAAlC,QAAE,EAAE,IAAK,CACM,CAAC,EACnB,IAAA0C,MAAA,CAAAC,aAAA,EAACzD,gBAAgB;IAChByE,GAAG,EAAC,eAAe;IACnBC,IAAI,EAAC,eAAe;IACpB,gBACCzC,YAAY,EAAEW,QAAQ,KACtBD,0BACA;IACDgC,MAAM,EACL1C,YAAY,EAAEW,QAAQ,KACrBD,0BAAe,IACf,IAAAa,MAAA,CAAAC,aAAA,EAACpE,WAAA,CAAAuF,IAAI;MAACjE,IAAI,EAAGmE;IAAO,CAAE,CAEvB;IACDC,QAAQ,EAAGA,CAAA,KACVxD,YAAY,CAAE;MACb,GAAGD,IAAI;MACP8B,OAAO,EAAE,CACR,GAAGlB,YAAY,EACf;QACCb,KAAK,EAAEW,MAAM,CAACX,KAAK;QACnBuB,QAAQ,EACPD,0BAAe;QAChBK,KAAK,EAAEf,YAAY,EAAEe;MACtB,CAAC;IAEH,CAAE;EACF,GAEC,IAAAlC,QAAE,EAAE,QAAS,CACE,CACF,CAEH,CACA,CACC,CAEL,CACH,CAAC;AAEjB;AAEA,SAASqD,cAAcA,CAAE;EAAEsB;AAAS,CAAC,EAAG;EACvC,OAAOC,iBAAQ,CAACC,OAAO,CAAEF,QAAS,CAAC,CACjCzD,MAAM,CAAE4D,OAAQ,CAAC,CACjBtB,GAAG,CAAE,CAAEuB,KAAK,EAAEC,CAAC,KACf,IAAAtC,MAAA,CAAAC,aAAA,EAACnE,QAAA,CAAAkG,QAAQ;IAACf,GAAG,EAAGqB;EAAG,GAChBA,CAAC,GAAG,CAAC,IAAI,IAAAtC,MAAA,CAAAC,aAAA,EAACvD,qBAAqB,MAAE,CAAC,EAClC2F,KACO,CACT,CAAC;AACL;AAEA,SAASE,SAASA,CAAE;EACnBzE,IAAI;EACJC,YAAY;EACZyE,MAAM;EACNC,OAAO;EACPC,IAAI;EACJC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC;AACD,CAAC,EAAG;EACH,MAAMC,aAAa,GAAGN,MAAM,CAAChE,MAAM,CAChCX,KAAK,IACN,CAAEC,IAAI,CAAC6D,YAAY,CAACtC,QAAQ,CAAExB,KAAK,CAACU,EAAG,CAAC,IACxC,CAAE,CAAET,IAAI,CAACiF,MAAM,CAACC,UAAU,EAAElF,IAAI,CAACiF,MAAM,CAACE,YAAY,CAAE,CAAC5D,QAAQ,CAC9DxB,KAAK,CAACU,EACP,CACF,CAAC;EACD,MAAM2E,SAAS,GAAG,IAAAC,qBAAY,EAAET,IAAK,CAAC;EACtC,MAAMU,QAAQ,GAAGP,iBAAiB,GAAGK,SAAS,GAAGR,IAAI;EACrD,MAAMW,OAAO,GAAG,CAAC,CAAED,QAAQ,EAAE9D,MAAM;EACnC,IAAKsD,SAAS,EAAG;IAChB;IACA,OACC,IAAA5C,MAAA,CAAAC,aAAA;MAAKqD,SAAS,EAAC;IAAmB,GACjC,IAAAtD,MAAA,CAAAC,aAAA,cAAM,IAAA3C,QAAE,EAAE,SAAU,CAAO,CACvB,CAAC;EAER;EACA,MAAMiG,UAAU,GAAG;IAAErG,GAAG,EAAE,WAAW;IAAEK,IAAI,EAAE;EAAa,CAAC;EAC3D,OACC,IAAAyC,MAAA,CAAAC,aAAA;IAAKqD,SAAS,EAAC;EAA8B,GAC1CD,OAAO,IACR,IAAArD,MAAA,CAAAC,aAAA;IAAOqD,SAAS,EAAC;EAAsB,GACtC,IAAAtD,MAAA,CAAAC,aAAA,iBACC,IAAAD,MAAA,CAAAC,aAAA,cACG6C,aAAa,CAAChC,GAAG,CAAIjD,KAAK,IAC3B,IAAAmC,MAAA,CAAAC,aAAA;IACCgB,GAAG,EAAGpD,KAAK,CAACU,EAAI;IAChBiC,KAAK,EAAG;MACPgD,KAAK,EAAE3F,KAAK,CAAC2F,KAAK,IAAI/D,SAAS;MAC/BgE,QAAQ,EAAE5F,KAAK,CAAC4F,QAAQ,IAAIhE,SAAS;MACrCiE,QAAQ,EAAE7F,KAAK,CAAC6F,QAAQ,IAAIjE;IAC7B,CAAG;IACH,iBAAgB5B,KAAK,CAACU,EAAI;IAC1B,aACCT,IAAI,CAACQ,IAAI,EAAET,KAAK,KAAKA,KAAK,CAACU,EAAE,IAC7BgF,UAAU,CAAEzF,IAAI,CAACQ,IAAI,CAAC+B,SAAS,CAC/B;IACDsD,KAAK,EAAC;EAAK,GAEX,IAAA3D,MAAA,CAAAC,aAAA,EAACrC,UAAU;IACVC,KAAK,EAAGA,KAAO;IACfC,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA;EAAc,CAC7B,CACE,CACH,CAAC,EACD,CAAC,CAAE0E,OAAO,EAAEnD,MAAM,IACnB,IAAAU,MAAA,CAAAC,aAAA;IAAI,iBAAc;EAAS,GACxB,IAAA3C,QAAE,EAAE,SAAU,CACb,CAEF,CACE,CAAC,EACR,IAAA0C,MAAA,CAAAC,aAAA,iBACGmD,QAAQ,CAACtC,GAAG,CAAE,CAAE8C,IAAI,EAAEC,KAAK,KAC5B,IAAA7D,MAAA,CAAAC,aAAA;IAAIgB,GAAG,EAAG0B,SAAS,GAAIiB,IAAK,CAAC,IAAIC;EAAO,GACrCf,aAAa,CAAChC,GAAG,CAAIjD,KAAK,IAC3B,IAAAmC,MAAA,CAAAC,aAAA;IACCgB,GAAG,EAAGpD,KAAK,CAACU,EAAI;IAChBiC,KAAK,EAAG;MACPgD,KAAK,EAAE3F,KAAK,CAAC2F,KAAK,IAAI/D,SAAS;MAC/BgE,QAAQ,EACP5F,KAAK,CAAC4F,QAAQ,IAAIhE,SAAS;MAC5BiE,QAAQ,EACP7F,KAAK,CAAC6F,QAAQ,IAAIjE;IACpB;EAAG,GAED5B,KAAK,CAACiG,MAAM,CAAE;IACfF;EACD,CAAE,CACC,CACH,CAAC,EACD,CAAC,CAAEnB,OAAO,EAAEnD,MAAM,IACnB,IAAAU,MAAA,CAAAC,aAAA,cACC,IAAAD,MAAA,CAAAC,aAAA,EAACjE,YAAA,CAAA+H,OAAW;IACXH,IAAI,EAAGA,IAAM;IACbnB,OAAO,EAAGA;EAAS,CACnB,CACE,CAEF,CACH,CACI,CACD,CACP,EACC,CAAEY,OAAO,IACV,IAAArD,MAAA,CAAAC,aAAA;IAAKqD,SAAS,EAAC;EAAsB,GACpC,IAAAtD,MAAA,CAAAC,aAAA,aAAK,IAAA3C,QAAE,EAAE,YAAa,CAAM,CACxB,CAEF,CAAC;AAER;AAAC,IAAA0G,QAAA,GAEczB,SAAS;AAAA0B,OAAA,CAAAF,OAAA,GAAAC,QAAA"}
@@ -0,0 +1,83 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { privateApis as componentsPrivateApis, Button, Icon } from '@wordpress/components';
6
+ import { chevronRightSmall, plus } from '@wordpress/icons';
7
+ import { __ } from '@wordpress/i18n';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { unlock } from './lock-unlock';
13
+ import { ENUMERATION_TYPE, OPERATOR_IN } from './constants';
14
+ const {
15
+ DropdownMenuV2: DropdownMenu,
16
+ DropdownSubMenuV2: DropdownSubMenu,
17
+ DropdownSubMenuTriggerV2: DropdownSubMenuTrigger,
18
+ DropdownMenuItemV2: DropdownMenuItem
19
+ } = unlock(componentsPrivateApis);
20
+ export default function AddFilter({
21
+ fields,
22
+ view,
23
+ onChangeView
24
+ }) {
25
+ const filters = [];
26
+ fields.forEach(field => {
27
+ if (!field.type) {
28
+ return;
29
+ }
30
+ switch (field.type) {
31
+ case ENUMERATION_TYPE:
32
+ filters.push({
33
+ field: field.id,
34
+ name: field.header,
35
+ elements: field.elements || [],
36
+ isVisible: view.filters.some(f => f.field === field.id)
37
+ });
38
+ }
39
+ });
40
+ if (filters.length === 0) {
41
+ return null;
42
+ }
43
+ return createElement(DropdownMenu, {
44
+ label: __('Add filter'),
45
+ trigger: createElement(Button, {
46
+ disabled: filters.length === view.filters?.length,
47
+ __experimentalIsFocusable: true,
48
+ variant: "tertiary",
49
+ size: "compact"
50
+ }, createElement(Icon, {
51
+ icon: plus,
52
+ style: {
53
+ flexShrink: 0
54
+ }
55
+ }), __('Add filter'))
56
+ }, filters.map(filter => {
57
+ if (filter.isVisible) {
58
+ return null;
59
+ }
60
+ return createElement(DropdownSubMenu, {
61
+ key: filter.field,
62
+ trigger: createElement(DropdownSubMenuTrigger, {
63
+ suffix: createElement(Icon, {
64
+ icon: chevronRightSmall
65
+ })
66
+ }, filter.name)
67
+ }, filter.elements.map(element => createElement(DropdownMenuItem, {
68
+ key: element.value,
69
+ onSelect: () => {
70
+ onChangeView(currentView => ({
71
+ ...currentView,
72
+ page: 1,
73
+ filters: [...currentView.filters, {
74
+ field: filter.field,
75
+ operator: OPERATOR_IN,
76
+ value: element.value
77
+ }]
78
+ }));
79
+ }
80
+ }, element.label)));
81
+ }));
82
+ }
83
+ //# sourceMappingURL=add-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["privateApis","componentsPrivateApis","Button","Icon","chevronRightSmall","plus","__","unlock","ENUMERATION_TYPE","OPERATOR_IN","DropdownMenuV2","DropdownMenu","DropdownSubMenuV2","DropdownSubMenu","DropdownSubMenuTriggerV2","DropdownSubMenuTrigger","DropdownMenuItemV2","DropdownMenuItem","AddFilter","fields","view","onChangeView","filters","forEach","field","type","push","id","name","header","elements","isVisible","some","f","length","createElement","label","trigger","disabled","__experimentalIsFocusable","variant","size","icon","style","flexShrink","map","filter","key","suffix","element","value","onSelect","currentView","page","operator"],"sources":["@wordpress/dataviews/src/add-filter.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as componentsPrivateApis,\n\tButton,\n\tIcon,\n} from '@wordpress/components';\nimport { chevronRightSmall, plus } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\nimport { ENUMERATION_TYPE, OPERATOR_IN } from './constants';\n\nconst {\n\tDropdownMenuV2: DropdownMenu,\n\tDropdownSubMenuV2: DropdownSubMenu,\n\tDropdownSubMenuTriggerV2: DropdownSubMenuTrigger,\n\tDropdownMenuItemV2: DropdownMenuItem,\n} = unlock( componentsPrivateApis );\n\nexport default function AddFilter( { fields, view, onChangeView } ) {\n\tconst filters = [];\n\tfields.forEach( ( field ) => {\n\t\tif ( ! field.type ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( field.type ) {\n\t\t\tcase ENUMERATION_TYPE:\n\t\t\t\tfilters.push( {\n\t\t\t\t\tfield: field.id,\n\t\t\t\t\tname: field.header,\n\t\t\t\t\telements: field.elements || [],\n\t\t\t\t\tisVisible: view.filters.some(\n\t\t\t\t\t\t( f ) => f.field === field.id\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t}\n\t} );\n\n\tif ( filters.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\tlabel={ __( 'Add filter' ) }\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\tdisabled={ filters.length === view.filters?.length }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t>\n\t\t\t\t\t<Icon icon={ plus } style={ { flexShrink: 0 } } />\n\t\t\t\t\t{ __( 'Add filter' ) }\n\t\t\t\t</Button>\n\t\t\t}\n\t\t>\n\t\t\t{ filters.map( ( filter ) => {\n\t\t\t\tif ( filter.isVisible ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownSubMenu\n\t\t\t\t\t\tkey={ filter.field }\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<DropdownSubMenuTrigger\n\t\t\t\t\t\t\t\tsuffix={ <Icon icon={ chevronRightSmall } /> }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ filter.name }\n\t\t\t\t\t\t\t</DropdownSubMenuTrigger>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{ filter.elements.map( ( element ) => (\n\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\tkey={ element.value }\n\t\t\t\t\t\t\t\tonSelect={ () => {\n\t\t\t\t\t\t\t\t\tonChangeView( ( currentView ) => ( {\n\t\t\t\t\t\t\t\t\t\t...currentView,\n\t\t\t\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t\t\t\t\t...currentView.filters,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\toperator: OPERATOR_IN,\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: element.value,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t} ) );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ element.label }\n\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</DropdownSubMenu>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownMenu>\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, isRTL } from '@wordpress/i18n';
5
+ import { blockTable, category, formatListBullets, formatListBulletsRTL } from '@wordpress/icons';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import ViewTable from './view-table';
11
+ import ViewGrid from './view-grid';
12
+ import ViewList from './view-list';
13
+
14
+ // Field types.
15
+ export const ENUMERATION_TYPE = 'enumeration';
16
+
17
+ // Filter operators.
18
+ export const OPERATOR_IN = 'in';
19
+ export const OPERATOR_NOT_IN = 'notIn';
20
+
21
+ // View layouts.
22
+ export const LAYOUT_TABLE = 'table';
23
+ export const LAYOUT_GRID = 'grid';
24
+ export const LAYOUT_LIST = 'list';
25
+ export const VIEW_LAYOUTS = [{
26
+ type: LAYOUT_TABLE,
27
+ label: __('Table'),
28
+ component: ViewTable,
29
+ icon: blockTable
30
+ }, {
31
+ type: LAYOUT_GRID,
32
+ label: __('Grid'),
33
+ component: ViewGrid,
34
+ icon: category
35
+ }, {
36
+ type: LAYOUT_LIST,
37
+ label: __('List'),
38
+ component: ViewList,
39
+ icon: isRTL() ? formatListBulletsRTL : formatListBullets
40
+ }];
41
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__","isRTL","blockTable","category","formatListBullets","formatListBulletsRTL","ViewTable","ViewGrid","ViewList","ENUMERATION_TYPE","OPERATOR_IN","OPERATOR_NOT_IN","LAYOUT_TABLE","LAYOUT_GRID","LAYOUT_LIST","VIEW_LAYOUTS","type","label","component","icon"],"sources":["@wordpress/dataviews/src/constants.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tblockTable,\n\tcategory,\n\tformatListBullets,\n\tformatListBulletsRTL,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ViewTable from './view-table';\nimport ViewGrid from './view-grid';\nimport ViewList from './view-list';\n\n// Field types.\nexport const ENUMERATION_TYPE = 'enumeration';\n\n// Filter operators.\nexport const OPERATOR_IN = 'in';\nexport const OPERATOR_NOT_IN = 'notIn';\n\n// View layouts.\nexport const LAYOUT_TABLE = 'table';\nexport const LAYOUT_GRID = 'grid';\nexport const LAYOUT_LIST = 'list';\n\nexport const VIEW_LAYOUTS = [\n\t{\n\t\ttype: LAYOUT_TABLE,\n\t\tlabel: __( 'Table' ),\n\t\tcomponent: ViewTable,\n\t\ticon: blockTable,\n\t},\n\t{\n\t\ttype: LAYOUT_GRID,\n\t\tlabel: __( 'Grid' ),\n\t\tcomponent: ViewGrid,\n\t\ticon: category,\n\t},\n\t{\n\t\ttype: LAYOUT_LIST,\n\t\tlabel: __( 'List' ),\n\t\tcomponent: ViewList,\n\t\ticon: isRTL() ? formatListBulletsRTL : formatListBullets,\n\t},\n];\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,EAAEC,KAAK,QAAQ,iBAAiB;AAC3C,SACCC,UAAU,EACVC,QAAQ,EACRC,iBAAiB,EACjBC,oBAAoB,QACd,kBAAkB;;AAEzB;AACA;AACA;AACA,OAAOC,SAAS,MAAM,cAAc;AACpC,OAAOC,QAAQ,MAAM,aAAa;AAClC,OAAOC,QAAQ,MAAM,aAAa;;AAElC;AACA,OAAO,MAAMC,gBAAgB,GAAG,aAAa;;AAE7C;AACA,OAAO,MAAMC,WAAW,GAAG,IAAI;AAC/B,OAAO,MAAMC,eAAe,GAAG,OAAO;;AAEtC;AACA,OAAO,MAAMC,YAAY,GAAG,OAAO;AACnC,OAAO,MAAMC,WAAW,GAAG,MAAM;AACjC,OAAO,MAAMC,WAAW,GAAG,MAAM;AAEjC,OAAO,MAAMC,YAAY,GAAG,CAC3B;EACCC,IAAI,EAAEJ,YAAY;EAClBK,KAAK,EAAEjB,EAAE,CAAE,OAAQ,CAAC;EACpBkB,SAAS,EAAEZ,SAAS;EACpBa,IAAI,EAAEjB;AACP,CAAC,EACD;EACCc,IAAI,EAAEH,WAAW;EACjBI,KAAK,EAAEjB,EAAE,CAAE,MAAO,CAAC;EACnBkB,SAAS,EAAEX,QAAQ;EACnBY,IAAI,EAAEhB;AACP,CAAC,EACD;EACCa,IAAI,EAAEF,WAAW;EACjBG,KAAK,EAAEjB,EAAE,CAAE,MAAO,CAAC;EACnBkB,SAAS,EAAEV,QAAQ;EACnBW,IAAI,EAAElB,KAAK,CAAC,CAAC,GAAGI,oBAAoB,GAAGD;AACxC,CAAC,CACD"}
@@ -0,0 +1,85 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { __experimentalVStack as VStack, __experimentalHStack as HStack } from '@wordpress/components';
6
+ import { useMemo, useState } from '@wordpress/element';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import Pagination from './pagination';
12
+ import ViewActions from './view-actions';
13
+ import Filters from './filters';
14
+ import Search from './search';
15
+ import { VIEW_LAYOUTS } from './constants';
16
+ export default function DataViews({
17
+ view,
18
+ onChangeView,
19
+ fields,
20
+ search = true,
21
+ searchLabel = undefined,
22
+ actions,
23
+ data,
24
+ getItemId,
25
+ isLoading = false,
26
+ paginationInfo,
27
+ supportedLayouts,
28
+ onSelectionChange,
29
+ deferredRendering
30
+ }) {
31
+ const [selection, setSelection] = useState([]);
32
+ const onSetSelection = items => {
33
+ setSelection(items.map(item => item.id));
34
+ onSelectionChange(items);
35
+ };
36
+ const ViewComponent = VIEW_LAYOUTS.find(v => v.type === view.type).component;
37
+ const _fields = useMemo(() => {
38
+ return fields.map(field => ({
39
+ ...field,
40
+ render: field.render || field.getValue
41
+ }));
42
+ }, [fields]);
43
+ return createElement("div", {
44
+ className: "dataviews-wrapper"
45
+ }, createElement(VStack, {
46
+ spacing: 0,
47
+ justify: "flex-start"
48
+ }, createElement(HStack, {
49
+ alignment: "flex-start",
50
+ className: "dataviews__filters-view-actions"
51
+ }, createElement(HStack, {
52
+ justify: "start",
53
+ wrap: true
54
+ }, search && createElement(Search, {
55
+ label: searchLabel,
56
+ view: view,
57
+ onChangeView: onChangeView
58
+ }), createElement(Filters, {
59
+ fields: fields,
60
+ view: view,
61
+ onChangeView: onChangeView
62
+ })), createElement(ViewActions, {
63
+ fields: fields,
64
+ view: view,
65
+ onChangeView: onChangeView,
66
+ supportedLayouts: supportedLayouts
67
+ })), createElement(ViewComponent, {
68
+ fields: _fields,
69
+ view: view,
70
+ onChangeView: onChangeView,
71
+ paginationInfo: paginationInfo,
72
+ actions: actions,
73
+ data: data,
74
+ getItemId: getItemId,
75
+ isLoading: isLoading,
76
+ onSelectionChange: onSetSelection,
77
+ selection: selection,
78
+ deferredRendering: deferredRendering
79
+ }), createElement(Pagination, {
80
+ view: view,
81
+ onChangeView: onChangeView,
82
+ paginationInfo: paginationInfo
83
+ })));
84
+ }
85
+ //# sourceMappingURL=dataviews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__experimentalVStack","VStack","__experimentalHStack","HStack","useMemo","useState","Pagination","ViewActions","Filters","Search","VIEW_LAYOUTS","DataViews","view","onChangeView","fields","search","searchLabel","undefined","actions","data","getItemId","isLoading","paginationInfo","supportedLayouts","onSelectionChange","deferredRendering","selection","setSelection","onSetSelection","items","map","item","id","ViewComponent","find","v","type","component","_fields","field","render","getValue","createElement","className","spacing","justify","alignment","wrap","label"],"sources":["@wordpress/dataviews/src/dataviews.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useMemo, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Pagination from './pagination';\nimport ViewActions from './view-actions';\nimport Filters from './filters';\nimport Search from './search';\nimport { VIEW_LAYOUTS } from './constants';\n\nexport default function DataViews( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions,\n\tdata,\n\tgetItemId,\n\tisLoading = false,\n\tpaginationInfo,\n\tsupportedLayouts,\n\tonSelectionChange,\n\tdeferredRendering,\n} ) {\n\tconst [ selection, setSelection ] = useState( [] );\n\n\tconst onSetSelection = ( items ) => {\n\t\tsetSelection( items.map( ( item ) => item.id ) );\n\t\tonSelectionChange( items );\n\t};\n\n\tconst ViewComponent = VIEW_LAYOUTS.find(\n\t\t( v ) => v.type === view.type\n\t).component;\n\tconst _fields = useMemo( () => {\n\t\treturn fields.map( ( field ) => ( {\n\t\t\t...field,\n\t\t\trender: field.render || field.getValue,\n\t\t} ) );\n\t}, [ fields ] );\n\treturn (\n\t\t<div className=\"dataviews-wrapper\">\n\t\t\t<VStack spacing={ 0 } justify=\"flex-start\">\n\t\t\t\t<HStack\n\t\t\t\t\talignment=\"flex-start\"\n\t\t\t\t\tclassName=\"dataviews__filters-view-actions\"\n\t\t\t\t>\n\t\t\t\t\t<HStack justify=\"start\" wrap>\n\t\t\t\t\t\t{ search && (\n\t\t\t\t\t\t\t<Search\n\t\t\t\t\t\t\t\tlabel={ searchLabel }\n\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<Filters\n\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<ViewActions\n\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\tsupportedLayouts={ supportedLayouts }\n\t\t\t\t\t/>\n\t\t\t\t</HStack>\n\t\t\t\t<ViewComponent\n\t\t\t\t\tfields={ _fields }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\t\tactions={ actions }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\tisLoading={ isLoading }\n\t\t\t\t\tonSelectionChange={ onSetSelection }\n\t\t\t\t\tselection={ selection }\n\t\t\t\t\tdeferredRendering={ deferredRendering }\n\t\t\t\t/>\n\t\t\t\t<Pagination\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\t/>\n\t\t\t</VStack>\n\t\t</div>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,oBAAoB,IAAIC,MAAM,EAC9BC,oBAAoB,IAAIC,MAAM,QACxB,uBAAuB;AAC9B,SAASC,OAAO,EAAEC,QAAQ,QAAQ,oBAAoB;;AAEtD;AACA;AACA;AACA,OAAOC,UAAU,MAAM,cAAc;AACrC,OAAOC,WAAW,MAAM,gBAAgB;AACxC,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAOC,MAAM,MAAM,UAAU;AAC7B,SAASC,YAAY,QAAQ,aAAa;AAE1C,eAAe,SAASC,SAASA,CAAE;EAClCC,IAAI;EACJC,YAAY;EACZC,MAAM;EACNC,MAAM,GAAG,IAAI;EACbC,WAAW,GAAGC,SAAS;EACvBC,OAAO;EACPC,IAAI;EACJC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,cAAc;EACdC,gBAAgB;EAChBC,iBAAiB;EACjBC;AACD,CAAC,EAAG;EACH,MAAM,CAAEC,SAAS,EAAEC,YAAY,CAAE,GAAGtB,QAAQ,CAAE,EAAG,CAAC;EAElD,MAAMuB,cAAc,GAAKC,KAAK,IAAM;IACnCF,YAAY,CAAEE,KAAK,CAACC,GAAG,CAAIC,IAAI,IAAMA,IAAI,CAACC,EAAG,CAAE,CAAC;IAChDR,iBAAiB,CAAEK,KAAM,CAAC;EAC3B,CAAC;EAED,MAAMI,aAAa,GAAGvB,YAAY,CAACwB,IAAI,CACpCC,CAAC,IAAMA,CAAC,CAACC,IAAI,KAAKxB,IAAI,CAACwB,IAC1B,CAAC,CAACC,SAAS;EACX,MAAMC,OAAO,GAAGlC,OAAO,CAAE,MAAM;IAC9B,OAAOU,MAAM,CAACgB,GAAG,CAAIS,KAAK,KAAQ;MACjC,GAAGA,KAAK;MACRC,MAAM,EAAED,KAAK,CAACC,MAAM,IAAID,KAAK,CAACE;IAC/B,CAAC,CAAG,CAAC;EACN,CAAC,EAAE,CAAE3B,MAAM,CAAG,CAAC;EACf,OACC4B,aAAA;IAAKC,SAAS,EAAC;EAAmB,GACjCD,aAAA,CAACzC,MAAM;IAAC2C,OAAO,EAAG,CAAG;IAACC,OAAO,EAAC;EAAY,GACzCH,aAAA,CAACvC,MAAM;IACN2C,SAAS,EAAC,YAAY;IACtBH,SAAS,EAAC;EAAiC,GAE3CD,aAAA,CAACvC,MAAM;IAAC0C,OAAO,EAAC,OAAO;IAACE,IAAI;EAAA,GACzBhC,MAAM,IACP2B,aAAA,CAACjC,MAAM;IACNuC,KAAK,EAAGhC,WAAa;IACrBJ,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA;EAAc,CAC7B,CACD,EACD6B,aAAA,CAAClC,OAAO;IACPM,MAAM,EAAGA,MAAQ;IACjBF,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA;EAAc,CAC7B,CACM,CAAC,EACT6B,aAAA,CAACnC,WAAW;IACXO,MAAM,EAAGA,MAAQ;IACjBF,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA,YAAc;IAC7BU,gBAAgB,EAAGA;EAAkB,CACrC,CACM,CAAC,EACTmB,aAAA,CAACT,aAAa;IACbnB,MAAM,EAAGwB,OAAS;IAClB1B,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA,YAAc;IAC7BS,cAAc,EAAGA,cAAgB;IACjCJ,OAAO,EAAGA,OAAS;IACnBC,IAAI,EAAGA,IAAM;IACbC,SAAS,EAAGA,SAAW;IACvBC,SAAS,EAAGA,SAAW;IACvBG,iBAAiB,EAAGI,cAAgB;IACpCF,SAAS,EAAGA,SAAW;IACvBD,iBAAiB,EAAGA;EAAmB,CACvC,CAAC,EACFiB,aAAA,CAACpC,UAAU;IACVM,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA,YAAc;IAC7BS,cAAc,EAAGA;EAAgB,CACjC,CACM,CACJ,CAAC;AAER"}