@wordpress/dataviews 1.1.0 → 2.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.
Files changed (176) hide show
  1. package/CHANGELOG.md +27 -5
  2. package/README.md +33 -30
  3. package/build/add-filter.js +30 -22
  4. package/build/add-filter.js.map +1 -1
  5. package/build/bulk-actions-toolbar.js +187 -0
  6. package/build/bulk-actions-toolbar.js.map +1 -0
  7. package/build/bulk-actions.js +75 -62
  8. package/build/bulk-actions.js.map +1 -1
  9. package/build/constants.js +17 -10
  10. package/build/constants.js.map +1 -1
  11. package/build/dataviews.js +64 -50
  12. package/build/dataviews.js.map +1 -1
  13. package/build/filter-and-sort-data-view.js +2 -2
  14. package/build/filter-and-sort-data-view.js.map +1 -1
  15. package/build/filter-summary.js +106 -96
  16. package/build/filter-summary.js.map +1 -1
  17. package/build/filters.js +18 -17
  18. package/build/filters.js.map +1 -1
  19. package/build/index.js.map +1 -1
  20. package/build/item-actions.js +101 -69
  21. package/build/item-actions.js.map +1 -1
  22. package/build/layouts.js.map +1 -1
  23. package/build/lock-unlock.js.map +1 -1
  24. package/build/normalize-fields.js.map +1 -1
  25. package/build/pagination.js +66 -57
  26. package/build/pagination.js.map +1 -1
  27. package/build/reset-filters.js +9 -4
  28. package/build/reset-filters.js.map +1 -1
  29. package/build/search-widget.js +108 -89
  30. package/build/search-widget.js.map +1 -1
  31. package/build/search.js +13 -6
  32. package/build/search.js.map +1 -1
  33. package/build/single-selection-checkbox.js +6 -2
  34. package/build/single-selection-checkbox.js.map +1 -1
  35. package/build/types.js.map +1 -1
  36. package/build/utils.js +3 -15
  37. package/build/utils.js.map +1 -1
  38. package/build/view-actions.js +168 -120
  39. package/build/view-actions.js.map +1 -1
  40. package/build/view-grid.js +119 -106
  41. package/build/view-grid.js.map +1 -1
  42. package/build/view-list.js +217 -83
  43. package/build/view-list.js.map +1 -1
  44. package/build/view-table.js +227 -199
  45. package/build/view-table.js.map +1 -1
  46. package/build-module/add-filter.js +30 -22
  47. package/build-module/add-filter.js.map +1 -1
  48. package/build-module/bulk-actions-toolbar.js +182 -0
  49. package/build-module/bulk-actions-toolbar.js.map +1 -0
  50. package/build-module/bulk-actions.js +77 -62
  51. package/build-module/bulk-actions.js.map +1 -1
  52. package/build-module/constants.js +16 -9
  53. package/build-module/constants.js.map +1 -1
  54. package/build-module/dataviews.js +65 -50
  55. package/build-module/dataviews.js.map +1 -1
  56. package/build-module/filter-and-sort-data-view.js +2 -2
  57. package/build-module/filter-and-sort-data-view.js.map +1 -1
  58. package/build-module/filter-summary.js +107 -97
  59. package/build-module/filter-summary.js.map +1 -1
  60. package/build-module/filters.js +18 -17
  61. package/build-module/filters.js.map +1 -1
  62. package/build-module/index.js.map +1 -1
  63. package/build-module/item-actions.js +102 -71
  64. package/build-module/item-actions.js.map +1 -1
  65. package/build-module/layouts.js.map +1 -1
  66. package/build-module/lock-unlock.js.map +1 -1
  67. package/build-module/normalize-fields.js.map +1 -1
  68. package/build-module/pagination.js +67 -57
  69. package/build-module/pagination.js.map +1 -1
  70. package/build-module/reset-filters.js +9 -4
  71. package/build-module/reset-filters.js.map +1 -1
  72. package/build-module/search-widget.js +109 -89
  73. package/build-module/search-widget.js.map +1 -1
  74. package/build-module/search.js +13 -6
  75. package/build-module/search.js.map +1 -1
  76. package/build-module/single-selection-checkbox.js +6 -2
  77. package/build-module/single-selection-checkbox.js.map +1 -1
  78. package/build-module/types.js.map +1 -1
  79. package/build-module/utils.js +2 -13
  80. package/build-module/utils.js.map +1 -1
  81. package/build-module/view-actions.js +170 -121
  82. package/build-module/view-actions.js.map +1 -1
  83. package/build-module/view-grid.js +121 -106
  84. package/build-module/view-grid.js.map +1 -1
  85. package/build-module/view-list.js +219 -85
  86. package/build-module/view-list.js.map +1 -1
  87. package/build-module/view-table.js +230 -201
  88. package/build-module/view-table.js.map +1 -1
  89. package/build-style/style-rtl.css +168 -44
  90. package/build-style/style.css +168 -44
  91. package/build-types/add-filter.d.ts +11 -0
  92. package/build-types/add-filter.d.ts.map +1 -0
  93. package/build-types/bulk-actions-toolbar.d.ts +12 -0
  94. package/build-types/bulk-actions-toolbar.d.ts.map +1 -0
  95. package/build-types/bulk-actions.d.ts +14 -0
  96. package/build-types/bulk-actions.d.ts.map +1 -0
  97. package/build-types/constants.d.ts +19 -32
  98. package/build-types/constants.d.ts.map +1 -1
  99. package/build-types/dataviews.d.ts +22 -0
  100. package/build-types/dataviews.d.ts.map +1 -0
  101. package/build-types/filter-and-sort-data-view.d.ts +3 -3
  102. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  103. package/build-types/filter-summary.d.ts +14 -0
  104. package/build-types/filter-summary.d.ts.map +1 -0
  105. package/build-types/filters.d.ts +13 -0
  106. package/build-types/filters.d.ts.map +1 -0
  107. package/build-types/index.d.ts +4 -0
  108. package/build-types/index.d.ts.map +1 -0
  109. package/build-types/item-actions.d.ts +35 -0
  110. package/build-types/item-actions.d.ts.map +1 -0
  111. package/build-types/layouts.d.ts +24 -0
  112. package/build-types/layouts.d.ts.map +1 -0
  113. package/build-types/lock-unlock.d.ts +2 -0
  114. package/build-types/lock-unlock.d.ts.map +1 -0
  115. package/build-types/normalize-fields.d.ts +2 -2
  116. package/build-types/normalize-fields.d.ts.map +1 -1
  117. package/build-types/pagination.d.ts +16 -0
  118. package/build-types/pagination.d.ts.map +1 -0
  119. package/build-types/reset-filters.d.ts +13 -0
  120. package/build-types/reset-filters.d.ts.map +1 -0
  121. package/build-types/search-widget.d.ts +10 -0
  122. package/build-types/search-widget.d.ts.map +1 -0
  123. package/build-types/search.d.ts +13 -0
  124. package/build-types/search.d.ts.map +1 -0
  125. package/build-types/single-selection-checkbox.d.ts +17 -0
  126. package/build-types/single-selection-checkbox.d.ts.map +1 -0
  127. package/build-types/stories/fixtures.d.ts +114 -0
  128. package/build-types/stories/fixtures.d.ts.map +1 -0
  129. package/build-types/stories/index.story.d.ts +15 -0
  130. package/build-types/stories/index.story.d.ts.map +1 -0
  131. package/build-types/types.d.ts +221 -21
  132. package/build-types/types.d.ts.map +1 -1
  133. package/build-types/utils.d.ts +3 -0
  134. package/build-types/utils.d.ts.map +1 -0
  135. package/build-types/view-actions.d.ts +12 -0
  136. package/build-types/view-actions.d.ts.map +1 -0
  137. package/build-types/view-grid.d.ts +4 -0
  138. package/build-types/view-grid.d.ts.map +1 -0
  139. package/build-types/view-list.d.ts +4 -0
  140. package/build-types/view-list.d.ts.map +1 -0
  141. package/build-types/view-table.d.ts +5 -0
  142. package/build-types/view-table.d.ts.map +1 -0
  143. package/package.json +12 -13
  144. package/src/{add-filter.js → add-filter.tsx} +17 -1
  145. package/src/bulk-actions-toolbar.tsx +272 -0
  146. package/src/{bulk-actions.js → bulk-actions.tsx} +77 -17
  147. package/src/constants.ts +12 -5
  148. package/src/{dataviews.js → dataviews.tsx} +54 -14
  149. package/src/filter-and-sort-data-view.ts +13 -8
  150. package/src/{filter-summary.js → filter-summary.tsx} +38 -9
  151. package/src/{filters.js → filters.tsx} +18 -6
  152. package/src/{item-actions.js → item-actions.tsx} +119 -30
  153. package/src/normalize-fields.ts +4 -2
  154. package/src/{pagination.js → pagination.tsx} +29 -8
  155. package/src/{reset-filters.js → reset-filters.tsx} +17 -2
  156. package/src/{search-widget.js → search-widget.tsx} +27 -7
  157. package/src/{search.js → search.tsx} +22 -5
  158. package/src/{single-selection-checkbox.js → single-selection-checkbox.tsx} +17 -2
  159. package/src/style.scss +166 -43
  160. package/src/types.ts +286 -21
  161. package/src/{utils.js → utils.ts} +5 -13
  162. package/src/{view-actions.js → view-actions.tsx} +105 -49
  163. package/src/{view-grid.js → view-grid.tsx} +31 -18
  164. package/src/view-list.tsx +410 -0
  165. package/src/{view-table.js → view-table.tsx} +99 -40
  166. package/tsconfig.json +3 -4
  167. package/tsconfig.tsbuildinfo +1 -1
  168. package/build/dropdown-menu-helper.js +0 -71
  169. package/build/dropdown-menu-helper.js.map +0 -1
  170. package/build-module/dropdown-menu-helper.js +0 -64
  171. package/build-module/dropdown-menu-helper.js.map +0 -1
  172. package/src/dropdown-menu-helper.js +0 -61
  173. package/src/view-list.js +0 -207
  174. /package/src/{index.js → index.ts} +0 -0
  175. /package/src/{layouts.js → layouts.ts} +0 -0
  176. /package/src/{lock-unlock.js → lock-unlock.ts} +0 -0
@@ -1,9 +1,7 @@
1
- import { createElement } from "react";
2
1
  /**
3
2
  * External dependencies
4
3
  */
5
- import classnames from 'classnames';
6
-
4
+ import clsx from 'clsx';
7
5
  /**
8
6
  * WordPress dependencies
9
7
  */
@@ -19,8 +17,11 @@ import SingleSelectionCheckbox from './single-selection-checkbox';
19
17
  import { unlock } from './lock-unlock';
20
18
  import ItemActions from './item-actions';
21
19
  import { sanitizeOperators } from './utils';
22
- import { SORTING_DIRECTIONS } from './constants';
20
+ import { SORTING_DIRECTIONS, sortArrows, sortLabels, sortValues } from './constants';
23
21
  import { useSomeItemHasAPossibleBulkAction, useHasAPossibleBulkAction } from './bulk-actions';
22
+ import { jsx as _jsx } from "react/jsx-runtime";
23
+ import { jsxs as _jsxs } from "react/jsx-runtime";
24
+ import { Fragment as _Fragment } from "react/jsx-runtime";
24
25
  const {
25
26
  DropdownMenuV2: DropdownMenu,
26
27
  DropdownMenuGroupV2: DropdownMenuGroup,
@@ -32,15 +33,11 @@ const {
32
33
  function WithDropDownMenuSeparators({
33
34
  children
34
35
  }) {
35
- return Children.toArray(children).filter(Boolean).map((child, i) => createElement(Fragment, {
36
- key: i
37
- }, i > 0 && createElement(DropdownMenuSeparator, null), child));
36
+ return Children.toArray(children).filter(Boolean).map((child, i) => /*#__PURE__*/_jsxs(Fragment, {
37
+ children: [i > 0 && /*#__PURE__*/_jsx(DropdownMenuSeparator, {}), child]
38
+ }, i));
38
39
  }
39
- const sortArrows = {
40
- asc: '↑',
41
- desc: '↓'
42
- };
43
- const HeaderMenu = forwardRef(function HeaderMenu({
40
+ const _HeaderMenu = forwardRef(function HeaderMenu({
44
41
  field,
45
42
  view,
46
43
  onChangeView,
@@ -59,72 +56,91 @@ const HeaderMenu = forwardRef(function HeaderMenu({
59
56
  if (!isSortable && !isHidable && !canAddFilter) {
60
57
  return field.header;
61
58
  }
62
- return createElement(DropdownMenu, {
59
+ return /*#__PURE__*/_jsx(DropdownMenu, {
63
60
  align: "start",
64
- trigger: createElement(Button, {
61
+ trigger: /*#__PURE__*/_jsxs(Button, {
65
62
  size: "compact",
66
63
  className: "dataviews-view-table-header-button",
67
64
  ref: ref,
68
- variant: "tertiary"
69
- }, field.header, isSorted && createElement("span", {
70
- "aria-hidden": "true"
71
- }, isSorted && sortArrows[view.sort.direction])),
65
+ variant: "tertiary",
66
+ children: [field.header, view.sort && isSorted && /*#__PURE__*/_jsx("span", {
67
+ "aria-hidden": "true",
68
+ children: sortArrows[view.sort.direction]
69
+ })]
70
+ }),
72
71
  style: {
73
72
  minWidth: '240px'
74
- }
75
- }, createElement(WithDropDownMenuSeparators, null, isSortable && createElement(DropdownMenuGroup, null, Object.entries(SORTING_DIRECTIONS).map(([direction, info]) => {
76
- const isChecked = isSorted && view.sort.direction === direction;
77
- const value = `${field.id}-${direction}`;
78
- return createElement(DropdownMenuRadioItem, {
79
- key: value
80
- // All sorting radio items share the same name, so that
81
- // selecting a sorting option automatically deselects the
82
- // previously selected one, even if it is displayed in
83
- // another submenu. The field and direction are passed via
84
- // the `value` prop.
85
- ,
86
- name: "view-table-sorting",
87
- value: value,
88
- checked: isChecked,
89
- onChange: () => {
90
- onChangeView({
91
- ...view,
92
- sort: {
93
- field: field.id,
94
- direction
95
- }
96
- });
97
- }
98
- }, createElement(DropdownMenuItemLabel, null, info.label));
99
- })), canAddFilter && createElement(DropdownMenuGroup, null, createElement(DropdownMenuItem, {
100
- prefix: createElement(Icon, {
101
- icon: funnel
102
- }),
103
- onClick: () => {
104
- setOpenedFilter(field.id);
105
- onChangeView({
106
- ...view,
107
- page: 1,
108
- filters: [...(view.filters || []), {
109
- field: field.id,
110
- value: undefined,
111
- operator: operators[0]
112
- }]
113
- });
114
- }
115
- }, createElement(DropdownMenuItemLabel, null, __('Add filter')))), isHidable && createElement(DropdownMenuItem, {
116
- prefix: createElement(Icon, {
117
- icon: unseen
118
- }),
119
- onClick: () => {
120
- onHide(field);
121
- onChangeView({
122
- ...view,
123
- hiddenFields: view.hiddenFields.concat(field.id)
124
- });
125
- }
126
- }, createElement(DropdownMenuItemLabel, null, __('Hide')))));
73
+ },
74
+ children: /*#__PURE__*/_jsxs(WithDropDownMenuSeparators, {
75
+ children: [isSortable && /*#__PURE__*/_jsx(DropdownMenuGroup, {
76
+ children: SORTING_DIRECTIONS.map(direction => {
77
+ const isChecked = view.sort && isSorted && view.sort.direction === direction;
78
+ const value = `${field.id}-${direction}`;
79
+ return /*#__PURE__*/_jsx(DropdownMenuRadioItem, {
80
+ // All sorting radio items share the same name, so that
81
+ // selecting a sorting option automatically deselects the
82
+ // previously selected one, even if it is displayed in
83
+ // another submenu. The field and direction are passed via
84
+ // the `value` prop.
85
+ name: "view-table-sorting",
86
+ value: value,
87
+ checked: isChecked,
88
+ onChange: () => {
89
+ onChangeView({
90
+ ...view,
91
+ sort: {
92
+ field: field.id,
93
+ direction
94
+ }
95
+ });
96
+ },
97
+ children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
98
+ children: sortLabels[direction]
99
+ })
100
+ }, value);
101
+ })
102
+ }), canAddFilter && /*#__PURE__*/_jsx(DropdownMenuGroup, {
103
+ children: /*#__PURE__*/_jsx(DropdownMenuItem, {
104
+ prefix: /*#__PURE__*/_jsx(Icon, {
105
+ icon: funnel
106
+ }),
107
+ onClick: () => {
108
+ setOpenedFilter(field.id);
109
+ onChangeView({
110
+ ...view,
111
+ page: 1,
112
+ filters: [...(view.filters || []), {
113
+ field: field.id,
114
+ value: undefined,
115
+ operator: operators[0]
116
+ }]
117
+ });
118
+ },
119
+ children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
120
+ children: __('Add filter')
121
+ })
122
+ })
123
+ }), isHidable && /*#__PURE__*/_jsx(DropdownMenuItem, {
124
+ prefix: /*#__PURE__*/_jsx(Icon, {
125
+ icon: unseen
126
+ }),
127
+ onClick: () => {
128
+ onHide(field);
129
+ onChangeView({
130
+ ...view,
131
+ hiddenFields: view.hiddenFields.concat(field.id)
132
+ });
133
+ },
134
+ children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
135
+ children: __('Hide')
136
+ })
137
+ })]
138
+ })
139
+ });
127
140
  });
141
+
142
+ // @ts-expect-error Lift the `Item` type argument through the forwardRef.
143
+ const HeaderMenu = _HeaderMenu;
128
144
  function BulkSelectionCheckbox({
129
145
  selection,
130
146
  onSelectionChange,
@@ -133,15 +149,15 @@ function BulkSelectionCheckbox({
133
149
  }) {
134
150
  const selectableItems = useMemo(() => {
135
151
  return data.filter(item => {
136
- return actions.some(action => action.supportsBulk && action.isEligible(item));
152
+ return actions.some(action => action.supportsBulk && (!action.isEligible || action.isEligible(item)));
137
153
  });
138
154
  }, [data, actions]);
139
155
  const areAllSelected = selection.length === selectableItems.length;
140
- return createElement(CheckboxControl, {
156
+ return /*#__PURE__*/_jsx(CheckboxControl, {
141
157
  className: "dataviews-view-table-selection-checkbox",
142
158
  __nextHasNoMarginBottom: true,
143
159
  checked: areAllSelected,
144
- indeterminate: !areAllSelected && selection.length,
160
+ indeterminate: !areAllSelected && !!selection.length,
145
161
  onChange: () => {
146
162
  if (areAllSelected) {
147
163
  onSelectionChange([]);
@@ -178,8 +194,8 @@ function TableRow({
178
194
  // `onClick` and can be used to exclude touchscreen devices from certain
179
195
  // behaviours.
180
196
  const isTouchDevice = useRef(false);
181
- return createElement("tr", {
182
- className: classnames('dataviews-view-table__row', {
197
+ return /*#__PURE__*/_jsxs("tr", {
198
+ className: clsx('dataviews-view-table__row', {
183
199
  'is-selected': hasPossibleBulkAction && isSelected,
184
200
  'is-hovered': isHovered,
185
201
  'has-bulk-actions': hasPossibleBulkAction
@@ -190,7 +206,7 @@ function TableRow({
190
206
  isTouchDevice.current = true;
191
207
  },
192
208
  onClick: () => {
193
- if (!isTouchDevice.current && document.getSelection().type !== 'Range') {
209
+ if (!isTouchDevice.current && document.getSelection()?.type !== 'Range') {
194
210
  if (!isSelected) {
195
211
  onSelectionChange(data.filter(_item => {
196
212
  const itemId = getItemId?.(_item);
@@ -203,64 +219,68 @@ function TableRow({
203
219
  }));
204
220
  }
205
221
  }
206
- }
207
- }, hasBulkActions && createElement("td", {
208
- className: "dataviews-view-table__checkbox-column",
209
- style: {
210
- width: '1%'
211
- }
212
- }, createElement("div", {
213
- className: "dataviews-view-table__cell-content-wrapper"
214
- }, createElement(SingleSelectionCheckbox, {
215
- id: id,
216
- item: item,
217
- selection: selection,
218
- onSelectionChange: onSelectionChange,
219
- getItemId: getItemId,
220
- data: data,
221
- primaryField: primaryField,
222
- disabled: !hasPossibleBulkAction
223
- }))), visibleFields.map(field => createElement("td", {
224
- key: field.id,
225
- style: {
226
- width: field.width || undefined,
227
- minWidth: field.minWidth || undefined,
228
- maxWidth: field.maxWidth || undefined
229
- }
230
- }, createElement("div", {
231
- className: classnames('dataviews-view-table__cell-content-wrapper', {
232
- 'dataviews-view-table__primary-field': primaryField?.id === field.id
222
+ },
223
+ children: [hasBulkActions && /*#__PURE__*/_jsx("td", {
224
+ className: "dataviews-view-table__checkbox-column",
225
+ style: {
226
+ width: '1%'
227
+ },
228
+ children: /*#__PURE__*/_jsx("div", {
229
+ className: "dataviews-view-table__cell-content-wrapper",
230
+ children: /*#__PURE__*/_jsx(SingleSelectionCheckbox, {
231
+ item: item,
232
+ selection: selection,
233
+ onSelectionChange: onSelectionChange,
234
+ getItemId: getItemId,
235
+ data: data,
236
+ primaryField: primaryField,
237
+ disabled: !hasPossibleBulkAction
238
+ })
239
+ })
240
+ }), visibleFields.map(field => /*#__PURE__*/_jsx("td", {
241
+ style: {
242
+ width: field.width || undefined,
243
+ minWidth: field.minWidth || undefined,
244
+ maxWidth: field.maxWidth || undefined
245
+ },
246
+ children: /*#__PURE__*/_jsx("div", {
247
+ className: clsx('dataviews-view-table__cell-content-wrapper', {
248
+ 'dataviews-view-table__primary-field': primaryField?.id === field.id
249
+ }),
250
+ children: field.render({
251
+ item
252
+ })
253
+ })
254
+ }, field.id)), !!actions?.length &&
255
+ /*#__PURE__*/
256
+ // Disable reason: we are not making the element interactive,
257
+ // but preventing any click events from bubbling up to the
258
+ // table row. This allows us to add a click handler to the row
259
+ // itself (to toggle row selection) without erroneously
260
+ // intercepting click events from ItemActions.
261
+ /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
262
+ _jsx("td", {
263
+ className: "dataviews-view-table__actions-column",
264
+ onClick: e => e.stopPropagation(),
265
+ children: /*#__PURE__*/_jsx(ItemActions, {
266
+ item: item,
267
+ actions: actions
268
+ })
233
269
  })
234
- }, field.render({
235
- item
236
- })))), !!actions?.length &&
237
- // Disable reason: we are not making the element interactive,
238
- // but preventing any click events from bubbling up to the
239
- // table row. This allows us to add a click handler to the row
240
- // itself (to toggle row selection) without erroneously
241
- // intercepting click events from ItemActions.
242
-
243
- /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
244
- createElement("td", {
245
- className: "dataviews-view-table__actions-column",
246
- onClick: e => e.stopPropagation()
247
- }, createElement(ItemActions, {
248
- item: item,
249
- actions: actions
250
- }))
251
- /* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */);
270
+ /* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */]
271
+ });
252
272
  }
253
273
  function ViewTable({
254
- view,
255
- onChangeView,
256
- fields,
257
274
  actions,
258
275
  data,
276
+ fields,
259
277
  getItemId,
260
278
  isLoading = false,
261
- selection,
279
+ onChangeView,
262
280
  onSelectionChange,
263
- setOpenedFilter
281
+ selection,
282
+ setOpenedFilter,
283
+ view
264
284
  }) {
265
285
  const headerMenuRefs = useRef(new Map());
266
286
  const headerMenuToFocusRef = useRef();
@@ -279,89 +299,98 @@ function ViewTable({
279
299
  // Clearing out the focus directive is necessary to make sure
280
300
  // future renders don't cause unexpected focus jumps.
281
301
  headerMenuToFocusRef.current = nextHeaderMenuToFocus;
282
- setNextHeaderMenuToFocus();
302
+ setNextHeaderMenuToFocus(undefined);
283
303
  return;
284
304
  }
285
305
  const onHide = field => {
286
306
  const hidden = headerMenuRefs.current.get(field.id);
287
- const fallback = headerMenuRefs.current.get(hidden.fallback);
307
+ const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : undefined;
288
308
  setNextHeaderMenuToFocus(fallback?.node);
289
309
  };
290
310
  const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && ![view.layout.mediaField].includes(field.id));
291
311
  const hasData = !!data?.length;
292
- const sortValues = {
293
- asc: 'ascending',
294
- desc: 'descending'
295
- };
296
312
  const primaryField = fields.find(field => field.id === view.layout.primaryField);
297
- return createElement(Fragment, null, createElement("table", {
298
- className: "dataviews-view-table",
299
- "aria-busy": isLoading,
300
- "aria-describedby": tableNoticeId
301
- }, createElement("thead", null, createElement("tr", {
302
- className: "dataviews-view-table__row"
303
- }, hasBulkActions && createElement("th", {
304
- className: "dataviews-view-table__checkbox-column",
305
- style: {
306
- width: '1%'
307
- },
308
- "data-field-id": "selection",
309
- scope: "col"
310
- }, createElement(BulkSelectionCheckbox, {
311
- selection: selection,
312
- onSelectionChange: onSelectionChange,
313
- data: data,
314
- actions: actions
315
- })), visibleFields.map((field, index) => createElement("th", {
316
- key: field.id,
317
- style: {
318
- width: field.width || undefined,
319
- minWidth: field.minWidth || undefined,
320
- maxWidth: field.maxWidth || undefined
321
- },
322
- "data-field-id": field.id,
323
- "aria-sort": view.sort?.field === field.id && sortValues[view.sort.direction],
324
- scope: "col"
325
- }, createElement(HeaderMenu, {
326
- ref: node => {
327
- if (node) {
328
- headerMenuRefs.current.set(field.id, {
329
- node,
330
- fallback: visibleFields[index > 0 ? index - 1 : 1]?.id
331
- });
332
- } else {
333
- headerMenuRefs.current.delete(field.id);
334
- }
335
- },
336
- field: field,
337
- view: view,
338
- onChangeView: onChangeView,
339
- onHide: onHide,
340
- setOpenedFilter: setOpenedFilter
341
- }))), !!actions?.length && createElement("th", {
342
- "data-field-id": "actions",
343
- className: "dataviews-view-table__actions-column"
344
- }, createElement("span", {
345
- className: "dataviews-view-table-header"
346
- }, __('Actions'))))), createElement("tbody", null, hasData && data.map((item, index) => createElement(TableRow, {
347
- key: getItemId(item),
348
- item: item,
349
- hasBulkActions: hasBulkActions,
350
- actions: actions,
351
- id: getItemId(item) || index,
352
- visibleFields: visibleFields,
353
- primaryField: primaryField,
354
- selection: selection,
355
- getItemId: getItemId,
356
- onSelectionChange: onSelectionChange,
357
- data: data
358
- })))), createElement("div", {
359
- className: classnames({
360
- 'dataviews-loading': isLoading,
361
- 'dataviews-no-results': !hasData && !isLoading
362
- }),
363
- id: tableNoticeId
364
- }, !hasData && createElement("p", null, isLoading ? createElement(Spinner, null) : __('No results'))));
313
+ return /*#__PURE__*/_jsxs(_Fragment, {
314
+ children: [/*#__PURE__*/_jsxs("table", {
315
+ className: "dataviews-view-table",
316
+ "aria-busy": isLoading,
317
+ "aria-describedby": tableNoticeId,
318
+ children: [/*#__PURE__*/_jsx("thead", {
319
+ children: /*#__PURE__*/_jsxs("tr", {
320
+ className: "dataviews-view-table__row",
321
+ children: [hasBulkActions && /*#__PURE__*/_jsx("th", {
322
+ className: "dataviews-view-table__checkbox-column",
323
+ style: {
324
+ width: '1%'
325
+ },
326
+ "data-field-id": "selection",
327
+ scope: "col",
328
+ children: /*#__PURE__*/_jsx(BulkSelectionCheckbox, {
329
+ selection: selection,
330
+ onSelectionChange: onSelectionChange,
331
+ data: data,
332
+ actions: actions
333
+ })
334
+ }), visibleFields.map((field, index) => /*#__PURE__*/_jsx("th", {
335
+ style: {
336
+ width: field.width || undefined,
337
+ minWidth: field.minWidth || undefined,
338
+ maxWidth: field.maxWidth || undefined
339
+ },
340
+ "data-field-id": field.id,
341
+ "aria-sort": view.sort?.field === field.id ? sortValues[view.sort.direction] : undefined,
342
+ scope: "col",
343
+ children: /*#__PURE__*/_jsx(HeaderMenu, {
344
+ ref: node => {
345
+ if (node) {
346
+ headerMenuRefs.current.set(field.id, {
347
+ node,
348
+ fallback: visibleFields[index > 0 ? index - 1 : 1]?.id
349
+ });
350
+ } else {
351
+ headerMenuRefs.current.delete(field.id);
352
+ }
353
+ },
354
+ field: field,
355
+ view: view,
356
+ onChangeView: onChangeView,
357
+ onHide: onHide,
358
+ setOpenedFilter: setOpenedFilter
359
+ })
360
+ }, field.id)), !!actions?.length && /*#__PURE__*/_jsx("th", {
361
+ "data-field-id": "actions",
362
+ className: "dataviews-view-table__actions-column",
363
+ children: /*#__PURE__*/_jsx("span", {
364
+ className: "dataviews-view-table-header",
365
+ children: __('Actions')
366
+ })
367
+ })]
368
+ })
369
+ }), /*#__PURE__*/_jsx("tbody", {
370
+ children: hasData && data.map((item, index) => /*#__PURE__*/_jsx(TableRow, {
371
+ item: item,
372
+ hasBulkActions: hasBulkActions,
373
+ actions: actions,
374
+ id: getItemId(item) || index.toString(),
375
+ visibleFields: visibleFields,
376
+ primaryField: primaryField,
377
+ selection: selection,
378
+ getItemId: getItemId,
379
+ onSelectionChange: onSelectionChange,
380
+ data: data
381
+ }, getItemId(item)))
382
+ })]
383
+ }), /*#__PURE__*/_jsx("div", {
384
+ className: clsx({
385
+ 'dataviews-loading': isLoading,
386
+ 'dataviews-no-results': !hasData && !isLoading
387
+ }),
388
+ id: tableNoticeId,
389
+ children: !hasData && /*#__PURE__*/_jsx("p", {
390
+ children: isLoading ? /*#__PURE__*/_jsx(Spinner, {}) : __('No results')
391
+ })
392
+ })]
393
+ });
365
394
  }
366
395
  export default ViewTable;
367
396
  //# sourceMappingURL=view-table.js.map