@wordpress/dataviews 4.1.0 → 4.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.
Files changed (223) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +77 -29
  3. package/build/components/dataviews/index.js +10 -14
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-bulk-actions/index.js +145 -141
  6. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  7. package/build/components/dataviews-filters/add-filter.js +4 -6
  8. package/build/components/dataviews-filters/add-filter.js.map +1 -1
  9. package/build/components/dataviews-filters/index.js +3 -0
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/search-widget.js +30 -23
  12. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  13. package/build/components/dataviews-footer/index.js +45 -0
  14. package/build/components/dataviews-footer/index.js.map +1 -0
  15. package/build/components/dataviews-item-actions/index.js +5 -8
  16. package/build/components/dataviews-item-actions/index.js.map +1 -1
  17. package/build/components/dataviews-pagination/index.js +27 -19
  18. package/build/components/dataviews-pagination/index.js.map +1 -1
  19. package/build/components/dataviews-view-config/index.js +197 -41
  20. package/build/components/dataviews-view-config/index.js.map +1 -1
  21. package/build/dataform-controls/datetime.js +49 -0
  22. package/build/dataform-controls/datetime.js.map +1 -0
  23. package/build/dataform-controls/index.js +50 -0
  24. package/build/dataform-controls/index.js.map +1 -0
  25. package/build/dataform-controls/integer.js +45 -0
  26. package/build/dataform-controls/integer.js.map +1 -0
  27. package/build/dataform-controls/radio.js +45 -0
  28. package/build/dataform-controls/radio.js.map +1 -0
  29. package/build/dataform-controls/select.js +58 -0
  30. package/build/dataform-controls/select.js.map +1 -0
  31. package/build/dataform-controls/text.js +45 -0
  32. package/build/dataform-controls/text.js.map +1 -0
  33. package/build/dataforms-layouts/panel/index.js +10 -4
  34. package/build/dataforms-layouts/panel/index.js.map +1 -1
  35. package/build/dataforms-layouts/regular/index.js +6 -3
  36. package/build/dataforms-layouts/regular/index.js.map +1 -1
  37. package/build/dataviews-layouts/grid/density-picker.js +23 -52
  38. package/build/dataviews-layouts/grid/density-picker.js.map +1 -1
  39. package/build/dataviews-layouts/grid/index.js +1 -1
  40. package/build/dataviews-layouts/grid/index.js.map +1 -1
  41. package/build/dataviews-layouts/index.js +48 -2
  42. package/build/dataviews-layouts/index.js.map +1 -1
  43. package/build/dataviews-layouts/list/index.js +124 -80
  44. package/build/dataviews-layouts/list/index.js.map +1 -1
  45. package/build/dataviews-layouts/table/column-header-menu.js +52 -57
  46. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  47. package/build/dataviews-layouts/table/index.js +7 -35
  48. package/build/dataviews-layouts/table/index.js.map +1 -1
  49. package/build/field-types/datetime.js +30 -0
  50. package/build/field-types/datetime.js.map +1 -0
  51. package/build/field-types/index.js +4 -0
  52. package/build/field-types/index.js.map +1 -1
  53. package/build/field-types/integer.js +1 -60
  54. package/build/field-types/integer.js.map +1 -1
  55. package/build/field-types/text.js +1 -60
  56. package/build/field-types/text.js.map +1 -1
  57. package/build/normalize-fields.js +10 -9
  58. package/build/normalize-fields.js.map +1 -1
  59. package/build/types.js.map +1 -1
  60. package/build-module/components/dataviews/index.js +10 -14
  61. package/build-module/components/dataviews/index.js.map +1 -1
  62. package/build-module/components/dataviews-bulk-actions/index.js +145 -143
  63. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  64. package/build-module/components/dataviews-filters/add-filter.js +4 -6
  65. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  66. package/build-module/components/dataviews-filters/index.js +3 -0
  67. package/build-module/components/dataviews-filters/index.js.map +1 -1
  68. package/build-module/components/dataviews-filters/search-widget.js +30 -23
  69. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  70. package/build-module/components/dataviews-footer/index.js +38 -0
  71. package/build-module/components/dataviews-footer/index.js.map +1 -0
  72. package/build-module/components/dataviews-item-actions/index.js +5 -8
  73. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  74. package/build-module/components/dataviews-pagination/index.js +28 -20
  75. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  76. package/build-module/components/dataviews-view-config/index.js +203 -47
  77. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  78. package/build-module/dataform-controls/datetime.js +43 -0
  79. package/build-module/dataform-controls/datetime.js.map +1 -0
  80. package/build-module/dataform-controls/index.js +42 -0
  81. package/build-module/dataform-controls/index.js.map +1 -0
  82. package/build-module/dataform-controls/integer.js +38 -0
  83. package/build-module/dataform-controls/integer.js.map +1 -0
  84. package/build-module/dataform-controls/radio.js +38 -0
  85. package/build-module/dataform-controls/radio.js.map +1 -0
  86. package/build-module/dataform-controls/select.js +51 -0
  87. package/build-module/dataform-controls/select.js.map +1 -0
  88. package/build-module/dataform-controls/text.js +38 -0
  89. package/build-module/dataform-controls/text.js.map +1 -0
  90. package/build-module/dataforms-layouts/panel/index.js +10 -4
  91. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  92. package/build-module/dataforms-layouts/regular/index.js +6 -3
  93. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  94. package/build-module/dataviews-layouts/grid/density-picker.js +25 -56
  95. package/build-module/dataviews-layouts/grid/density-picker.js.map +1 -1
  96. package/build-module/dataviews-layouts/grid/index.js +1 -1
  97. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  98. package/build-module/dataviews-layouts/index.js +45 -1
  99. package/build-module/dataviews-layouts/index.js.map +1 -1
  100. package/build-module/dataviews-layouts/list/index.js +125 -80
  101. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  102. package/build-module/dataviews-layouts/table/column-header-menu.js +52 -57
  103. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  104. package/build-module/dataviews-layouts/table/index.js +9 -37
  105. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  106. package/build-module/field-types/datetime.js +24 -0
  107. package/build-module/field-types/datetime.js.map +1 -0
  108. package/build-module/field-types/index.js +4 -0
  109. package/build-module/field-types/index.js.map +1 -1
  110. package/build-module/field-types/integer.js +2 -60
  111. package/build-module/field-types/integer.js.map +1 -1
  112. package/build-module/field-types/text.js +2 -60
  113. package/build-module/field-types/text.js.map +1 -1
  114. package/build-module/normalize-fields.js +11 -9
  115. package/build-module/normalize-fields.js.map +1 -1
  116. package/build-module/types.js.map +1 -1
  117. package/build-style/style-rtl.css +93 -80
  118. package/build-style/style.css +93 -80
  119. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  120. package/build-types/components/dataviews/index.d.ts.map +1 -1
  121. package/build-types/components/dataviews/stories/fixtures.d.ts +28 -113
  122. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  123. package/build-types/components/dataviews/stories/index.story.d.ts +12 -44
  124. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  125. package/build-types/components/dataviews-bulk-actions/index.d.ts +11 -1
  126. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  127. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
  128. package/build-types/components/dataviews-filters/index.d.ts +1 -1
  129. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  130. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  131. package/build-types/components/dataviews-footer/index.d.ts +2 -0
  132. package/build-types/components/dataviews-footer/index.d.ts.map +1 -0
  133. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  134. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  135. package/build-types/components/dataviews-view-config/index.d.ts +4 -3
  136. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  137. package/build-types/dataform-controls/datetime.d.ts +6 -0
  138. package/build-types/dataform-controls/datetime.d.ts.map +1 -0
  139. package/build-types/dataform-controls/index.d.ts +11 -0
  140. package/build-types/dataform-controls/index.d.ts.map +1 -0
  141. package/build-types/dataform-controls/integer.d.ts +6 -0
  142. package/build-types/dataform-controls/integer.d.ts.map +1 -0
  143. package/build-types/dataform-controls/radio.d.ts +6 -0
  144. package/build-types/dataform-controls/radio.d.ts.map +1 -0
  145. package/build-types/dataform-controls/select.d.ts +6 -0
  146. package/build-types/dataform-controls/select.d.ts.map +1 -0
  147. package/build-types/dataform-controls/text.d.ts +6 -0
  148. package/build-types/dataform-controls/text.d.ts.map +1 -0
  149. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  150. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  151. package/build-types/dataviews-layouts/grid/density-picker.d.ts.map +1 -1
  152. package/build-types/dataviews-layouts/index.d.ts +4 -2
  153. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  154. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  155. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  156. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  157. package/build-types/field-types/datetime.d.ts +13 -0
  158. package/build-types/field-types/datetime.d.ts.map +1 -0
  159. package/build-types/field-types/index.d.ts +1 -1
  160. package/build-types/field-types/index.d.ts.map +1 -1
  161. package/build-types/field-types/integer.d.ts +2 -3
  162. package/build-types/field-types/integer.d.ts.map +1 -1
  163. package/build-types/field-types/text.d.ts +2 -3
  164. package/build-types/field-types/text.d.ts.map +1 -1
  165. package/build-types/normalize-fields.d.ts.map +1 -1
  166. package/build-types/types.d.ts +43 -21
  167. package/build-types/types.d.ts.map +1 -1
  168. package/package.json +12 -12
  169. package/src/components/dataform/stories/index.story.tsx +43 -2
  170. package/src/components/dataviews/index.tsx +14 -18
  171. package/src/components/dataviews/stories/fixtures.tsx +690 -0
  172. package/src/components/dataviews/stories/index.story.tsx +164 -0
  173. package/src/components/dataviews/style.scss +2 -12
  174. package/src/components/dataviews-bulk-actions/index.tsx +264 -213
  175. package/src/components/dataviews-bulk-actions/style.scss +9 -4
  176. package/src/components/dataviews-filters/add-filter.tsx +7 -11
  177. package/src/components/dataviews-filters/index.tsx +3 -0
  178. package/src/components/dataviews-filters/search-widget.tsx +46 -25
  179. package/src/components/dataviews-filters/style.scss +13 -3
  180. package/src/components/dataviews-footer/index.tsx +50 -0
  181. package/src/components/dataviews-footer/style.scss +40 -0
  182. package/src/components/dataviews-item-actions/index.tsx +8 -14
  183. package/src/components/dataviews-pagination/index.tsx +40 -21
  184. package/src/components/dataviews-pagination/style.scss +7 -21
  185. package/src/components/dataviews-view-config/index.tsx +297 -69
  186. package/src/components/dataviews-view-config/style.scss +25 -0
  187. package/src/dataform-controls/datetime.tsx +43 -0
  188. package/src/dataform-controls/index.tsx +61 -0
  189. package/src/dataform-controls/integer.tsx +38 -0
  190. package/src/dataform-controls/radio.tsx +42 -0
  191. package/src/dataform-controls/select.tsx +52 -0
  192. package/src/dataform-controls/style.scss +4 -0
  193. package/src/dataform-controls/text.tsx +40 -0
  194. package/src/dataforms-layouts/panel/index.tsx +8 -2
  195. package/src/dataforms-layouts/regular/index.tsx +6 -2
  196. package/src/dataviews-layouts/grid/density-picker.tsx +33 -67
  197. package/src/dataviews-layouts/grid/index.tsx +1 -1
  198. package/src/dataviews-layouts/grid/style.scss +1 -5
  199. package/src/dataviews-layouts/index.ts +63 -2
  200. package/src/dataviews-layouts/list/index.tsx +199 -123
  201. package/src/dataviews-layouts/list/style.scss +10 -4
  202. package/src/dataviews-layouts/table/column-header-menu.tsx +86 -90
  203. package/src/dataviews-layouts/table/index.tsx +8 -65
  204. package/src/dataviews-layouts/table/style.scss +0 -5
  205. package/src/field-types/datetime.tsx +28 -0
  206. package/src/field-types/index.tsx +5 -0
  207. package/src/field-types/integer.tsx +2 -71
  208. package/src/field-types/text.tsx +2 -70
  209. package/src/normalize-fields.ts +10 -10
  210. package/src/style.scss +2 -1
  211. package/src/test/filter-and-sort-data-view.js +28 -0
  212. package/src/types.ts +56 -32
  213. package/tsconfig.tsbuildinfo +1 -1
  214. package/build/components/dataviews-bulk-actions-toolbar/index.js +0 -207
  215. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  216. package/build-module/components/dataviews-bulk-actions-toolbar/index.js +0 -201
  217. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  218. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +0 -2
  219. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +0 -1
  220. package/src/components/dataviews/stories/fixtures.js +0 -222
  221. package/src/components/dataviews/stories/index.story.js +0 -65
  222. package/src/components/dataviews-bulk-actions-toolbar/index.tsx +0 -288
  223. package/src/components/dataviews-bulk-actions-toolbar/style.scss +0 -45
@@ -19,9 +19,6 @@ var _jsxRuntime = require("react/jsx-runtime");
19
19
  * External dependencies
20
20
  */
21
21
 
22
- // Import CompositeStore type, which is not exported from @wordpress/components.
23
- // eslint-disable-next-line no-restricted-imports
24
-
25
22
  /**
26
23
  * WordPress dependencies
27
24
  */
@@ -31,27 +28,78 @@ var _jsxRuntime = require("react/jsx-runtime");
31
28
  */
32
29
 
33
30
  const {
34
- useCompositeStoreV2: useCompositeStore,
35
31
  CompositeV2: Composite,
36
32
  CompositeItemV2: CompositeItem,
37
33
  CompositeRowV2: CompositeRow,
38
34
  DropdownMenuV2: DropdownMenu
39
35
  } = (0, _lockUnlock.unlock)(_components.privateApis);
36
+ function generateItemWrapperCompositeId(idPrefix) {
37
+ return `${idPrefix}-item-wrapper`;
38
+ }
39
+ function generatePrimaryActionCompositeId(idPrefix, primaryActionId) {
40
+ return `${idPrefix}-primary-action-${primaryActionId}`;
41
+ }
42
+ function generateDropdownTriggerCompositeId(idPrefix) {
43
+ return `${idPrefix}-dropdown`;
44
+ }
45
+ function PrimaryActionGridCell({
46
+ idPrefix,
47
+ primaryAction,
48
+ item
49
+ }) {
50
+ const registry = (0, _data.useRegistry)();
51
+ const [isModalOpen, setIsModalOpen] = (0, _element.useState)(false);
52
+ const compositeItemId = generatePrimaryActionCompositeId(idPrefix, primaryAction.id);
53
+ const label = typeof primaryAction.label === 'string' ? primaryAction.label : primaryAction.label([item]);
54
+ return 'RenderModal' in primaryAction ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
55
+ role: "gridcell",
56
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
57
+ id: compositeItemId,
58
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
59
+ label: label,
60
+ icon: primaryAction.icon,
61
+ isDestructive: primaryAction.isDestructive,
62
+ size: "small",
63
+ onClick: () => setIsModalOpen(true)
64
+ }),
65
+ children: isModalOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_dataviewsItemActions.ActionModal, {
66
+ action: primaryAction,
67
+ items: [item],
68
+ closeModal: () => setIsModalOpen(false)
69
+ })
70
+ })
71
+ }, primaryAction.id) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
72
+ role: "gridcell",
73
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
74
+ id: compositeItemId,
75
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
76
+ label: label,
77
+ icon: primaryAction.icon,
78
+ isDestructive: primaryAction.isDestructive,
79
+ size: "small",
80
+ onClick: () => {
81
+ primaryAction.callback([item], {
82
+ registry
83
+ });
84
+ }
85
+ })
86
+ })
87
+ }, primaryAction.id);
88
+ }
40
89
  function ListItem({
41
90
  actions,
42
- id,
91
+ idPrefix,
43
92
  isSelected,
44
93
  item,
45
94
  mediaField,
46
95
  onSelect,
47
96
  primaryField,
48
- store,
49
- visibleFields
97
+ visibleFields,
98
+ onDropdownTriggerKeyDown
50
99
  }) {
51
- const registry = (0, _data.useRegistry)();
52
100
  const itemRef = (0, _element.useRef)(null);
53
- const labelId = `${id}-label`;
54
- const descriptionId = `${id}-description`;
101
+ const labelId = `${idPrefix}-label`;
102
+ const descriptionId = `${idPrefix}-description`;
55
103
  const [isHovered, setIsHovered] = (0, _element.useState)(false);
56
104
  const handleMouseEnter = () => {
57
105
  setIsHovered(true);
@@ -81,8 +129,6 @@ function ListItem({
81
129
  eligibleActions: _eligibleActions
82
130
  };
83
131
  }, [actions, item]);
84
- const [isModalOpen, setIsModalOpen] = (0, _element.useState)(false);
85
- const primaryActionLabel = primaryAction && (typeof primaryAction.label === 'string' ? primaryAction.label : primaryAction.label([item]));
86
132
  const renderedMediaField = mediaField?.render ? /*#__PURE__*/(0, _jsxRuntime.jsx)(mediaField.render, {
87
133
  item: item
88
134
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -108,10 +154,9 @@ function ListItem({
108
154
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
109
155
  role: "gridcell",
110
156
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
111
- store: store,
112
157
  render: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {}),
113
158
  role: "button",
114
- id: id,
159
+ id: generateItemWrapperCompositeId(idPrefix),
115
160
  "aria-pressed": isSelected,
116
161
  "aria-labelledby": labelId,
117
162
  "aria-describedby": descriptionId,
@@ -159,62 +204,22 @@ function ListItem({
159
204
  flexShrink: '0',
160
205
  width: 'auto'
161
206
  },
162
- children: [primaryAction && 'RenderModal' in primaryAction && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
163
- role: "gridcell",
164
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
165
- store: store,
166
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
167
- label: primaryActionLabel,
168
- icon: primaryAction.icon,
169
- isDestructive: primaryAction.isDestructive,
170
- size: "small",
171
- onClick: () => setIsModalOpen(true)
172
- }),
173
- children: isModalOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_dataviewsItemActions.ActionModal, {
174
- action: primaryAction,
175
- items: [item],
176
- closeModal: () => setIsModalOpen(false)
177
- })
178
- })
179
- }), primaryAction && !('RenderModal' in primaryAction) && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
180
- role: "gridcell",
181
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
182
- store: store,
183
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
184
- label: primaryActionLabel,
185
- icon: primaryAction.icon,
186
- isDestructive: primaryAction.isDestructive,
187
- size: "small",
188
- onClick: () => {
189
- primaryAction.callback([item], {
190
- registry
191
- });
192
- }
193
- })
194
- })
195
- }, primaryAction.id), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
207
+ children: [primaryAction && /*#__PURE__*/(0, _jsxRuntime.jsx)(PrimaryActionGridCell, {
208
+ idPrefix: idPrefix,
209
+ primaryAction: primaryAction,
210
+ item: item
211
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
196
212
  role: "gridcell",
197
213
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenu, {
198
214
  trigger: /*#__PURE__*/(0, _jsxRuntime.jsx)(CompositeItem, {
199
- store: store,
215
+ id: generateDropdownTriggerCompositeId(idPrefix),
200
216
  render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
201
217
  size: "small",
202
218
  icon: _icons.moreVertical,
203
219
  label: (0, _i18n.__)('Actions'),
204
220
  accessibleWhenDisabled: true,
205
221
  disabled: !actions.length,
206
- onKeyDown: event => {
207
- if (event.key === 'ArrowDown') {
208
- // Prevent the default behaviour (open dropdown menu) and go down.
209
- event.preventDefault();
210
- store.move(store.down());
211
- }
212
- if (event.key === 'ArrowUp') {
213
- // Prevent the default behavior (open dropdown menu) and go up.
214
- event.preventDefault();
215
- store.move(store.up());
216
- }
217
- }
222
+ onKeyDown: onDropdownTriggerKeyDown
218
223
  })
219
224
  }),
220
225
  placement: "bottom-end",
@@ -246,23 +251,61 @@ function ViewList(props) {
246
251
  const viewFields = view.fields || fields.map(field => field.id);
247
252
  const visibleFields = fields.filter(field => viewFields.includes(field.id) && ![view.layout?.primaryField, view.layout?.mediaField].includes(field.id));
248
253
  const onSelect = item => onChangeSelection([getItemId(item)]);
249
- const getItemDomId = (0, _element.useCallback)(item => item ? `${baseId}-${getItemId(item)}` : undefined, [baseId, getItemId]);
250
- const store = useCompositeStore({
251
- defaultActiveId: getItemDomId(selectedItem)
252
- });
254
+ const generateCompositeItemIdPrefix = (0, _element.useCallback)(item => `${baseId}-${getItemId(item)}`, [baseId, getItemId]);
255
+ const isActiveCompositeItem = (0, _element.useCallback)((item, idToCheck) => {
256
+ // All composite items use the same prefix in their IDs.
257
+ return idToCheck.startsWith(generateCompositeItemIdPrefix(item));
258
+ }, [generateCompositeItemIdPrefix]);
253
259
 
254
- // Manage focused item, when the active one is removed from the list.
255
- const isActiveIdInList = store.useState(state => state.items.some(item => item.id === state.activeId));
260
+ // Controlled state for the active composite item.
261
+ const [activeCompositeId, setActiveCompositeId] = (0, _element.useState)(undefined);
262
+
263
+ // Update the active composite item when the selected item changes.
264
+ (0, _element.useEffect)(() => {
265
+ if (selectedItem) {
266
+ setActiveCompositeId(generateItemWrapperCompositeId(generateCompositeItemIdPrefix(selectedItem)));
267
+ }
268
+ }, [selectedItem, generateCompositeItemIdPrefix]);
269
+ const activeItemIndex = data.findIndex(item => isActiveCompositeItem(item, activeCompositeId !== null && activeCompositeId !== void 0 ? activeCompositeId : ''));
270
+ const previousActiveItemIndex = (0, _compose.usePrevious)(activeItemIndex);
271
+ const isActiveIdInList = activeItemIndex !== -1;
272
+ const selectCompositeItem = (0, _element.useCallback)((targetIndex, generateCompositeId) => {
273
+ // Clamping between 0 and data.length - 1 to avoid out of bounds.
274
+ const clampedIndex = Math.min(data.length - 1, Math.max(0, targetIndex));
275
+ const itemIdPrefix = generateCompositeItemIdPrefix(data[clampedIndex]);
276
+ const targetCompositeItemId = generateCompositeId(itemIdPrefix);
277
+ setActiveCompositeId(targetCompositeItemId);
278
+ document.getElementById(targetCompositeItemId)?.focus();
279
+ }, [data, generateCompositeItemIdPrefix]);
280
+
281
+ // Select a new active composite item when the current active item
282
+ // is removed from the list.
256
283
  (0, _element.useEffect)(() => {
257
- if (!isActiveIdInList) {
258
- // Prefer going down, except if there is no item below (last item), then go up (last item in list).
259
- if (store.down()) {
260
- store.move(store.down());
261
- } else if (store.up()) {
262
- store.move(store.up());
263
- }
284
+ const wasActiveIdInList = previousActiveItemIndex !== undefined && previousActiveItemIndex !== -1;
285
+ if (!isActiveIdInList && wasActiveIdInList) {
286
+ // By picking `previousActiveItemIndex` as the next item index, we are
287
+ // basically picking the item that would have been after the deleted one.
288
+ // If the previously active (and removed) item was the last of the list,
289
+ // we will select the item before it — which is the new last item.
290
+ selectCompositeItem(previousActiveItemIndex, generateItemWrapperCompositeId);
291
+ }
292
+ }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]);
293
+
294
+ // Prevent the default behavior (open dropdown menu) and instead select the
295
+ // dropdown menu trigger on the previous/next row.
296
+ // https://github.com/ariakit/ariakit/issues/3768
297
+ const onDropdownTriggerKeyDown = (0, _element.useCallback)(event => {
298
+ if (event.key === 'ArrowDown') {
299
+ // Select the dropdown menu trigger item in the next row.
300
+ event.preventDefault();
301
+ selectCompositeItem(activeItemIndex + 1, generateDropdownTriggerCompositeId);
302
+ }
303
+ if (event.key === 'ArrowUp') {
304
+ // Select the dropdown menu trigger item in the previous row.
305
+ event.preventDefault();
306
+ selectCompositeItem(activeItemIndex - 1, generateDropdownTriggerCompositeId);
264
307
  }
265
- }, [isActiveIdInList]);
308
+ }, [selectCompositeItem, activeItemIndex]);
266
309
  const hasData = data?.length;
267
310
  if (!hasData) {
268
311
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -280,19 +323,20 @@ function ViewList(props) {
280
323
  render: /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {}),
281
324
  className: "dataviews-view-list",
282
325
  role: "grid",
283
- store: store,
326
+ activeId: activeCompositeId,
327
+ setActiveId: setActiveCompositeId,
284
328
  children: data.map(item => {
285
- const id = getItemDomId(item);
329
+ const id = generateCompositeItemIdPrefix(item);
286
330
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ListItem, {
287
- id: id,
331
+ idPrefix: id,
288
332
  actions: actions,
289
333
  item: item,
290
334
  isSelected: item === selectedItem,
291
335
  onSelect: onSelect,
292
336
  mediaField: mediaField,
293
337
  primaryField: primaryField,
294
- store: store,
295
- visibleFields: visibleFields
338
+ visibleFields: visibleFields,
339
+ onDropdownTriggerKeyDown: onDropdownTriggerKeyDown
296
340
  }, id);
297
341
  })
298
342
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_clsx","_interopRequireDefault","require","_compose","_components","_element","_i18n","_icons","_data","_lockUnlock","_dataviewsItemActions","_jsxRuntime","useCompositeStoreV2","useCompositeStore","CompositeV2","Composite","CompositeItemV2","CompositeItem","CompositeRowV2","CompositeRow","DropdownMenuV2","DropdownMenu","unlock","componentsPrivateApis","ListItem","actions","id","isSelected","item","mediaField","onSelect","primaryField","store","visibleFields","registry","useRegistry","itemRef","useRef","labelId","descriptionId","isHovered","setIsHovered","useState","handleMouseEnter","handleMouseLeave","useEffect","current","scrollIntoView","behavior","block","inline","primaryAction","eligibleActions","useMemo","_eligibleActions","filter","action","isEligible","_primaryActions","isPrimary","icon","isModalOpen","setIsModalOpen","primaryActionLabel","label","renderedMediaField","render","jsx","className","renderedPrimaryField","ref","role","clsx","onMouseEnter","onMouseLeave","children","jsxs","__experimentalHStack","alignment","spacing","onClick","justify","__experimentalVStack","map","field","VisuallyHidden","as","length","style","flexShrink","width","Button","isDestructive","size","ActionModal","items","closeModal","callback","trigger","moreVertical","__","accessibleWhenDisabled","disabled","onKeyDown","event","key","preventDefault","move","down","up","placement","ActionsDropdownMenuGroup","ViewList","props","data","fields","getItemId","isLoading","onChangeSelection","selection","view","baseId","useInstanceId","selectedItem","findLast","includes","find","layout","viewFields","getItemDomId","useCallback","undefined","defaultActiveId","isActiveIdInList","state","some","activeId","hasData","Spinner"],"sources":["@wordpress/dataviews/src/dataviews-layouts/list/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n// Import CompositeStore type, which is not exported from @wordpress/components.\n// eslint-disable-next-line no-restricted-imports\nimport type { CompositeStore } from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tprivateApis as componentsPrivateApis,\n\tSpinner,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { moreVertical } from '@wordpress/icons';\nimport { useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport {\n\tActionsDropdownMenuGroup,\n\tActionModal,\n} from '../../components/dataviews-item-actions';\nimport type { Action, NormalizedField, ViewListProps } from '../../types';\n\ninterface ListViewItemProps< Item > {\n\tactions: Action< Item >[];\n\tid?: string;\n\tisSelected: boolean;\n\titem: Item;\n\tmediaField?: NormalizedField< Item >;\n\tonSelect: ( item: Item ) => void;\n\tprimaryField?: NormalizedField< Item >;\n\tstore: CompositeStore;\n\tvisibleFields: NormalizedField< Item >[];\n}\n\nconst {\n\tuseCompositeStoreV2: useCompositeStore,\n\tCompositeV2: Composite,\n\tCompositeItemV2: CompositeItem,\n\tCompositeRowV2: CompositeRow,\n\tDropdownMenuV2: DropdownMenu,\n} = unlock( componentsPrivateApis );\n\nfunction ListItem< Item >( {\n\tactions,\n\tid,\n\tisSelected,\n\titem,\n\tmediaField,\n\tonSelect,\n\tprimaryField,\n\tstore,\n\tvisibleFields,\n}: ListViewItemProps< Item > ) {\n\tconst registry = useRegistry();\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst labelId = `${ id }-label`;\n\tconst descriptionId = `${ id }-description`;\n\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst handleMouseEnter = () => {\n\t\tsetIsHovered( true );\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetIsHovered( false );\n\t};\n\n\tuseEffect( () => {\n\t\tif ( isSelected ) {\n\t\t\titemRef.current?.scrollIntoView( {\n\t\t\t\tbehavior: 'auto',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\t}, [ isSelected ] );\n\n\tconst { primaryAction, eligibleActions } = useMemo( () => {\n\t\t// If an action is eligible for all items, doesn't need\n\t\t// to provide the `isEligible` function.\n\t\tconst _eligibleActions = actions.filter(\n\t\t\t( action ) => ! action.isEligible || action.isEligible( item )\n\t\t);\n\t\tconst _primaryActions = _eligibleActions.filter(\n\t\t\t( action ) => action.isPrimary && !! action.icon\n\t\t);\n\t\treturn {\n\t\t\tprimaryAction: _primaryActions?.[ 0 ],\n\t\t\teligibleActions: _eligibleActions,\n\t\t};\n\t}, [ actions, item ] );\n\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst primaryActionLabel =\n\t\tprimaryAction &&\n\t\t( typeof primaryAction.label === 'string'\n\t\t\t? primaryAction.label\n\t\t\t: primaryAction.label( [ item ] ) );\n\n\tconst renderedMediaField = mediaField?.render ? (\n\t\t<mediaField.render item={ item } />\n\t) : (\n\t\t<div className=\"dataviews-view-list__media-placeholder\"></div>\n\t);\n\n\tconst renderedPrimaryField = primaryField?.render ? (\n\t\t<primaryField.render item={ item } />\n\t) : null;\n\n\treturn (\n\t\t<CompositeRow\n\t\t\tref={ itemRef }\n\t\t\trender={ <li /> }\n\t\t\trole=\"row\"\n\t\t\tclassName={ clsx( {\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-hovered': isHovered,\n\t\t\t} ) }\n\t\t\tonMouseEnter={ handleMouseEnter }\n\t\t\tonMouseLeave={ handleMouseLeave }\n\t\t>\n\t\t\t<HStack\n\t\t\t\tclassName=\"dataviews-view-list__item-wrapper\"\n\t\t\t\talignment=\"center\"\n\t\t\t\tspacing={ 0 }\n\t\t\t>\n\t\t\t\t<div role=\"gridcell\">\n\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\tstore={ store }\n\t\t\t\t\t\trender={ <div /> }\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\taria-pressed={ isSelected }\n\t\t\t\t\t\taria-labelledby={ labelId }\n\t\t\t\t\t\taria-describedby={ descriptionId }\n\t\t\t\t\t\tclassName=\"dataviews-view-list__item\"\n\t\t\t\t\t\tonClick={ () => onSelect( item ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\t\t\talignment=\"flex-start\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-wrapper\">\n\t\t\t\t\t\t\t\t{ renderedMediaField }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field-wrapper\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__primary-field\"\n\t\t\t\t\t\t\t\t\tid={ labelId }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ renderedPrimaryField }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__fields\"\n\t\t\t\t\t\t\t\t\tid={ descriptionId }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\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>\n\t\t\t\t\t\t\t\t\t\t\t<VisuallyHidden\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field-label\"\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{ field.label }\n\t\t\t\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"dataviews-view-list__field-value\">\n\t\t\t\t\t\t\t\t\t\t\t\t<field.render item={ item } />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</CompositeItem>\n\t\t\t\t</div>\n\t\t\t\t{ eligibleActions?.length > 0 && (\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\t\tclassName=\"dataviews-view-list__item-actions\"\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tflexShrink: '0',\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ primaryAction && 'RenderModal' in primaryAction && (\n\t\t\t\t\t\t\t<div role=\"gridcell\">\n\t\t\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\t\t\tstore={ store }\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tlabel={ primaryActionLabel }\n\t\t\t\t\t\t\t\t\t\t\ticon={ primaryAction.icon }\n\t\t\t\t\t\t\t\t\t\t\tisDestructive={\n\t\t\t\t\t\t\t\t\t\t\t\tprimaryAction.isDestructive\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( true )\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\t\t{ isModalOpen && (\n\t\t\t\t\t\t\t\t\t\t<ActionModal< Item >\n\t\t\t\t\t\t\t\t\t\t\taction={ primaryAction }\n\t\t\t\t\t\t\t\t\t\t\titems={ [ item ] }\n\t\t\t\t\t\t\t\t\t\t\tcloseModal={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsModalOpen( false )\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</CompositeItem>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ primaryAction &&\n\t\t\t\t\t\t\t! ( 'RenderModal' in primaryAction ) && (\n\t\t\t\t\t\t\t\t<div role=\"gridcell\" key={ primaryAction.id }>\n\t\t\t\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\t\t\t\tstore={ store }\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ primaryActionLabel }\n\t\t\t\t\t\t\t\t\t\t\t\ticon={ primaryAction.icon }\n\t\t\t\t\t\t\t\t\t\t\t\tisDestructive={\n\t\t\t\t\t\t\t\t\t\t\t\t\tprimaryAction.isDestructive\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\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tprimaryAction.callback(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ item ],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ registry }\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/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t<div role=\"gridcell\">\n\t\t\t\t\t\t\t<DropdownMenu\n\t\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\t\t\t\tstore={ store }\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ ! actions.length }\n\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={ ( event: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreventDefault: () => void;\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\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'ArrowDown'\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// Prevent the default behaviour (open dropdown menu) and go down.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstore.move(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstore.down()\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\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.key === 'ArrowUp'\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// Prevent the default behavior (open dropdown menu) and go up.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstore.move(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstore.up()\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/>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ActionsDropdownMenuGroup\n\t\t\t\t\t\t\t\t\tactions={ eligibleActions }\n\t\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</HStack>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</CompositeRow>\n\t);\n}\n\nexport default function ViewList< Item >( props: ViewListProps< Item > ) {\n\tconst {\n\t\tactions,\n\t\tdata,\n\t\tfields,\n\t\tgetItemId,\n\t\tisLoading,\n\t\tonChangeSelection,\n\t\tselection,\n\t\tview,\n\t} = props;\n\tconst baseId = useInstanceId( ViewList, 'view-list' );\n\tconst selectedItem = data?.findLast( ( item ) =>\n\t\tselection.includes( getItemId( item ) )\n\t);\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 viewFields = view.fields || fields.map( ( field ) => field.id );\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\tviewFields.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 onSelect = ( item: Item ) =>\n\t\tonChangeSelection( [ getItemId( item ) ] );\n\n\tconst getItemDomId = useCallback(\n\t\t( item?: Item ) =>\n\t\t\titem ? `${ baseId }-${ getItemId( item ) }` : undefined,\n\t\t[ baseId, getItemId ]\n\t);\n\n\tconst store = useCompositeStore( {\n\t\tdefaultActiveId: getItemDomId( selectedItem ),\n\t} );\n\n\t// Manage focused item, when the active one is removed from the list.\n\tconst isActiveIdInList = store.useState(\n\t\t( state: { items: any[]; activeId: any } ) =>\n\t\t\tstate.items.some(\n\t\t\t\t( item: { id: any } ) => item.id === state.activeId\n\t\t\t)\n\t);\n\tuseEffect( () => {\n\t\tif ( ! isActiveIdInList ) {\n\t\t\t// Prefer going down, except if there is no item below (last item), then go up (last item in list).\n\t\t\tif ( store.down() ) {\n\t\t\t\tstore.move( store.down() );\n\t\t\t} else if ( store.up() ) {\n\t\t\t\tstore.move( store.up() );\n\t\t\t}\n\t\t}\n\t}, [ isActiveIdInList ] );\n\n\tconst hasData = data?.length;\n\tif ( ! hasData ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( {\n\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t'dataviews-no-results': ! hasData && ! isLoading,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t{ ! hasData && (\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Composite\n\t\t\tid={ baseId }\n\t\t\trender={ <ul /> }\n\t\t\tclassName=\"dataviews-view-list\"\n\t\t\trole=\"grid\"\n\t\t\tstore={ store }\n\t\t>\n\t\t\t{ data.map( ( item ) => {\n\t\t\t\tconst id = getItemDomId( item );\n\t\t\t\treturn (\n\t\t\t\t\t<ListItem\n\t\t\t\t\t\tkey={ id }\n\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tisSelected={ item === selectedItem }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\t\tstore={ store }\n\t\t\t\t\t\tvisibleFields={ visibleFields }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Composite>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clsx","_interopRequireDefault","require","_compose","_components","_element","_i18n","_icons","_data","_lockUnlock","_dataviewsItemActions","_jsxRuntime","CompositeV2","Composite","CompositeItemV2","CompositeItem","CompositeRowV2","CompositeRow","DropdownMenuV2","DropdownMenu","unlock","componentsPrivateApis","generateItemWrapperCompositeId","idPrefix","generatePrimaryActionCompositeId","primaryActionId","generateDropdownTriggerCompositeId","PrimaryActionGridCell","primaryAction","item","registry","useRegistry","isModalOpen","setIsModalOpen","useState","compositeItemId","id","label","jsx","role","children","render","Button","icon","isDestructive","size","onClick","ActionModal","action","items","closeModal","callback","ListItem","actions","isSelected","mediaField","onSelect","primaryField","visibleFields","onDropdownTriggerKeyDown","itemRef","useRef","labelId","descriptionId","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","useEffect","current","scrollIntoView","behavior","block","inline","eligibleActions","useMemo","_eligibleActions","filter","isEligible","_primaryActions","isPrimary","renderedMediaField","className","renderedPrimaryField","ref","clsx","onMouseEnter","onMouseLeave","jsxs","__experimentalHStack","alignment","spacing","justify","__experimentalVStack","map","field","VisuallyHidden","as","length","style","flexShrink","width","trigger","moreVertical","__","accessibleWhenDisabled","disabled","onKeyDown","placement","ActionsDropdownMenuGroup","ViewList","props","data","fields","getItemId","isLoading","onChangeSelection","selection","view","baseId","useInstanceId","selectedItem","findLast","includes","find","layout","viewFields","generateCompositeItemIdPrefix","useCallback","isActiveCompositeItem","idToCheck","startsWith","activeCompositeId","setActiveCompositeId","undefined","activeItemIndex","findIndex","previousActiveItemIndex","usePrevious","isActiveIdInList","selectCompositeItem","targetIndex","generateCompositeId","clampedIndex","Math","min","max","itemIdPrefix","targetCompositeItemId","document","getElementById","focus","wasActiveIdInList","event","key","preventDefault","hasData","Spinner","activeId","setActiveId"],"sources":["@wordpress/dataviews/src/dataviews-layouts/list/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId, usePrevious } from '@wordpress/compose';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tprivateApis as componentsPrivateApis,\n\tSpinner,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { moreVertical } from '@wordpress/icons';\nimport { useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport {\n\tActionsDropdownMenuGroup,\n\tActionModal,\n} from '../../components/dataviews-item-actions';\nimport type { Action, NormalizedField, ViewListProps } from '../../types';\n\ninterface ListViewItemProps< Item > {\n\tactions: Action< Item >[];\n\tidPrefix: string;\n\tisSelected: boolean;\n\titem: Item;\n\tmediaField?: NormalizedField< Item >;\n\tonSelect: ( item: Item ) => void;\n\tprimaryField?: NormalizedField< Item >;\n\tvisibleFields: NormalizedField< Item >[];\n\tonDropdownTriggerKeyDown: React.KeyboardEventHandler< HTMLButtonElement >;\n}\n\nconst {\n\tCompositeV2: Composite,\n\tCompositeItemV2: CompositeItem,\n\tCompositeRowV2: CompositeRow,\n\tDropdownMenuV2: DropdownMenu,\n} = unlock( componentsPrivateApis );\n\nfunction generateItemWrapperCompositeId( idPrefix: string ) {\n\treturn `${ idPrefix }-item-wrapper`;\n}\nfunction generatePrimaryActionCompositeId(\n\tidPrefix: string,\n\tprimaryActionId: string\n) {\n\treturn `${ idPrefix }-primary-action-${ primaryActionId }`;\n}\nfunction generateDropdownTriggerCompositeId( idPrefix: string ) {\n\treturn `${ idPrefix }-dropdown`;\n}\n\nfunction PrimaryActionGridCell< Item >( {\n\tidPrefix,\n\tprimaryAction,\n\titem,\n}: {\n\tidPrefix: string;\n\tprimaryAction: Action< Item >;\n\titem: Item;\n} ) {\n\tconst registry = useRegistry();\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\n\tconst compositeItemId = generatePrimaryActionCompositeId(\n\t\tidPrefix,\n\t\tprimaryAction.id\n\t);\n\n\tconst label =\n\t\ttypeof primaryAction.label === 'string'\n\t\t\t? primaryAction.label\n\t\t\t: primaryAction.label( [ item ] );\n\n\treturn 'RenderModal' in primaryAction ? (\n\t\t<div role=\"gridcell\" key={ primaryAction.id }>\n\t\t\t<CompositeItem\n\t\t\t\tid={ compositeItemId }\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\ticon={ primaryAction.icon }\n\t\t\t\t\t\tisDestructive={ primaryAction.isDestructive }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t<ActionModal< Item >\n\t\t\t\t\t\taction={ primaryAction }\n\t\t\t\t\t\titems={ [ item ] }\n\t\t\t\t\t\tcloseModal={ () => setIsModalOpen( false ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</CompositeItem>\n\t\t</div>\n\t) : (\n\t\t<div role=\"gridcell\" key={ primaryAction.id }>\n\t\t\t<CompositeItem\n\t\t\t\tid={ compositeItemId }\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\ticon={ primaryAction.icon }\n\t\t\t\t\t\tisDestructive={ primaryAction.isDestructive }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tprimaryAction.callback( [ item ], { registry } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction ListItem< Item >( {\n\tactions,\n\tidPrefix,\n\tisSelected,\n\titem,\n\tmediaField,\n\tonSelect,\n\tprimaryField,\n\tvisibleFields,\n\tonDropdownTriggerKeyDown,\n}: ListViewItemProps< Item > ) {\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst labelId = `${ idPrefix }-label`;\n\tconst descriptionId = `${ idPrefix }-description`;\n\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst handleMouseEnter = () => {\n\t\tsetIsHovered( true );\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetIsHovered( false );\n\t};\n\n\tuseEffect( () => {\n\t\tif ( isSelected ) {\n\t\t\titemRef.current?.scrollIntoView( {\n\t\t\t\tbehavior: 'auto',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\t}, [ isSelected ] );\n\n\tconst { primaryAction, eligibleActions } = useMemo( () => {\n\t\t// If an action is eligible for all items, doesn't need\n\t\t// to provide the `isEligible` function.\n\t\tconst _eligibleActions = actions.filter(\n\t\t\t( action ) => ! action.isEligible || action.isEligible( item )\n\t\t);\n\t\tconst _primaryActions = _eligibleActions.filter(\n\t\t\t( action ) => action.isPrimary && !! action.icon\n\t\t);\n\t\treturn {\n\t\t\tprimaryAction: _primaryActions?.[ 0 ],\n\t\t\teligibleActions: _eligibleActions,\n\t\t};\n\t}, [ actions, item ] );\n\n\tconst renderedMediaField = mediaField?.render ? (\n\t\t<mediaField.render item={ item } />\n\t) : (\n\t\t<div className=\"dataviews-view-list__media-placeholder\"></div>\n\t);\n\n\tconst renderedPrimaryField = primaryField?.render ? (\n\t\t<primaryField.render item={ item } />\n\t) : null;\n\n\treturn (\n\t\t<CompositeRow\n\t\t\tref={ itemRef }\n\t\t\trender={ <li /> }\n\t\t\trole=\"row\"\n\t\t\tclassName={ clsx( {\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-hovered': isHovered,\n\t\t\t} ) }\n\t\t\tonMouseEnter={ handleMouseEnter }\n\t\t\tonMouseLeave={ handleMouseLeave }\n\t\t>\n\t\t\t<HStack\n\t\t\t\tclassName=\"dataviews-view-list__item-wrapper\"\n\t\t\t\talignment=\"center\"\n\t\t\t\tspacing={ 0 }\n\t\t\t>\n\t\t\t\t<div role=\"gridcell\">\n\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\trender={ <div /> }\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tid={ generateItemWrapperCompositeId( idPrefix ) }\n\t\t\t\t\t\taria-pressed={ isSelected }\n\t\t\t\t\t\taria-labelledby={ labelId }\n\t\t\t\t\t\taria-describedby={ descriptionId }\n\t\t\t\t\t\tclassName=\"dataviews-view-list__item\"\n\t\t\t\t\t\tonClick={ () => onSelect( item ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\t\t\talignment=\"flex-start\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-wrapper\">\n\t\t\t\t\t\t\t\t{ renderedMediaField }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field-wrapper\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__primary-field\"\n\t\t\t\t\t\t\t\t\tid={ labelId }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ renderedPrimaryField }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__fields\"\n\t\t\t\t\t\t\t\t\tid={ descriptionId }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\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>\n\t\t\t\t\t\t\t\t\t\t\t<VisuallyHidden\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field-label\"\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{ field.label }\n\t\t\t\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"dataviews-view-list__field-value\">\n\t\t\t\t\t\t\t\t\t\t\t\t<field.render item={ item } />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</CompositeItem>\n\t\t\t\t</div>\n\t\t\t\t{ eligibleActions?.length > 0 && (\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\t\tclassName=\"dataviews-view-list__item-actions\"\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tflexShrink: '0',\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ primaryAction && (\n\t\t\t\t\t\t\t<PrimaryActionGridCell\n\t\t\t\t\t\t\t\tidPrefix={ idPrefix }\n\t\t\t\t\t\t\t\tprimaryAction={ primaryAction }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<div role=\"gridcell\">\n\t\t\t\t\t\t\t<DropdownMenu\n\t\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\t\t\t\tid={ generateDropdownTriggerCompositeId(\n\t\t\t\t\t\t\t\t\t\t\tidPrefix\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ ! actions.length }\n\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDropdownTriggerKeyDown\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}\n\t\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ActionsDropdownMenuGroup\n\t\t\t\t\t\t\t\t\tactions={ eligibleActions }\n\t\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</HStack>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</CompositeRow>\n\t);\n}\n\nexport default function ViewList< Item >( props: ViewListProps< Item > ) {\n\tconst {\n\t\tactions,\n\t\tdata,\n\t\tfields,\n\t\tgetItemId,\n\t\tisLoading,\n\t\tonChangeSelection,\n\t\tselection,\n\t\tview,\n\t} = props;\n\tconst baseId = useInstanceId( ViewList, 'view-list' );\n\n\tconst selectedItem = data?.findLast( ( item ) =>\n\t\tselection.includes( getItemId( item ) )\n\t);\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 viewFields = view.fields || fields.map( ( field ) => field.id );\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\tviewFields.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 onSelect = ( item: Item ) =>\n\t\tonChangeSelection( [ getItemId( item ) ] );\n\n\tconst generateCompositeItemIdPrefix = useCallback(\n\t\t( item: Item ) => `${ baseId }-${ getItemId( item ) }`,\n\t\t[ baseId, getItemId ]\n\t);\n\n\tconst isActiveCompositeItem = useCallback(\n\t\t( item: Item, idToCheck: string ) => {\n\t\t\t// All composite items use the same prefix in their IDs.\n\t\t\treturn idToCheck.startsWith(\n\t\t\t\tgenerateCompositeItemIdPrefix( item )\n\t\t\t);\n\t\t},\n\t\t[ generateCompositeItemIdPrefix ]\n\t);\n\n\t// Controlled state for the active composite item.\n\tconst [ activeCompositeId, setActiveCompositeId ] = useState<\n\t\tstring | null | undefined\n\t>( undefined );\n\n\t// Update the active composite item when the selected item changes.\n\tuseEffect( () => {\n\t\tif ( selectedItem ) {\n\t\t\tsetActiveCompositeId(\n\t\t\t\tgenerateItemWrapperCompositeId(\n\t\t\t\t\tgenerateCompositeItemIdPrefix( selectedItem )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}, [ selectedItem, generateCompositeItemIdPrefix ] );\n\n\tconst activeItemIndex = data.findIndex( ( item ) =>\n\t\tisActiveCompositeItem( item, activeCompositeId ?? '' )\n\t);\n\tconst previousActiveItemIndex = usePrevious( activeItemIndex );\n\tconst isActiveIdInList = activeItemIndex !== -1;\n\n\tconst selectCompositeItem = useCallback(\n\t\t(\n\t\t\ttargetIndex: number,\n\t\t\t// Allows invokers to specify a custom function to generate the\n\t\t\t// target composite item ID\n\t\t\tgenerateCompositeId: ( idPrefix: string ) => string\n\t\t) => {\n\t\t\t// Clamping between 0 and data.length - 1 to avoid out of bounds.\n\t\t\tconst clampedIndex = Math.min(\n\t\t\t\tdata.length - 1,\n\t\t\t\tMath.max( 0, targetIndex )\n\t\t\t);\n\t\t\tconst itemIdPrefix = generateCompositeItemIdPrefix(\n\t\t\t\tdata[ clampedIndex ]\n\t\t\t);\n\t\t\tconst targetCompositeItemId = generateCompositeId( itemIdPrefix );\n\n\t\t\tsetActiveCompositeId( targetCompositeItemId );\n\t\t\tdocument.getElementById( targetCompositeItemId )?.focus();\n\t\t},\n\t\t[ data, generateCompositeItemIdPrefix ]\n\t);\n\n\t// Select a new active composite item when the current active item\n\t// is removed from the list.\n\tuseEffect( () => {\n\t\tconst wasActiveIdInList =\n\t\t\tpreviousActiveItemIndex !== undefined &&\n\t\t\tpreviousActiveItemIndex !== -1;\n\t\tif ( ! isActiveIdInList && wasActiveIdInList ) {\n\t\t\t// By picking `previousActiveItemIndex` as the next item index, we are\n\t\t\t// basically picking the item that would have been after the deleted one.\n\t\t\t// If the previously active (and removed) item was the last of the list,\n\t\t\t// we will select the item before it — which is the new last item.\n\t\t\tselectCompositeItem(\n\t\t\t\tpreviousActiveItemIndex,\n\t\t\t\tgenerateItemWrapperCompositeId\n\t\t\t);\n\t\t}\n\t}, [ isActiveIdInList, selectCompositeItem, previousActiveItemIndex ] );\n\n\t// Prevent the default behavior (open dropdown menu) and instead select the\n\t// dropdown menu trigger on the previous/next row.\n\t// https://github.com/ariakit/ariakit/issues/3768\n\tconst onDropdownTriggerKeyDown = useCallback(\n\t\t( event: React.KeyboardEvent< HTMLButtonElement > ) => {\n\t\t\tif ( event.key === 'ArrowDown' ) {\n\t\t\t\t// Select the dropdown menu trigger item in the next row.\n\t\t\t\tevent.preventDefault();\n\t\t\t\tselectCompositeItem(\n\t\t\t\t\tactiveItemIndex + 1,\n\t\t\t\t\tgenerateDropdownTriggerCompositeId\n\t\t\t\t);\n\t\t\t}\n\t\t\tif ( event.key === 'ArrowUp' ) {\n\t\t\t\t// Select the dropdown menu trigger item in the previous row.\n\t\t\t\tevent.preventDefault();\n\t\t\t\tselectCompositeItem(\n\t\t\t\t\tactiveItemIndex - 1,\n\t\t\t\t\tgenerateDropdownTriggerCompositeId\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ selectCompositeItem, activeItemIndex ]\n\t);\n\n\tconst hasData = data?.length;\n\tif ( ! hasData ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( {\n\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t'dataviews-no-results': ! hasData && ! isLoading,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t{ ! hasData && (\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Composite\n\t\t\tid={ baseId }\n\t\t\trender={ <ul /> }\n\t\t\tclassName=\"dataviews-view-list\"\n\t\t\trole=\"grid\"\n\t\t\tactiveId={ activeCompositeId }\n\t\t\tsetActiveId={ setActiveCompositeId }\n\t\t>\n\t\t\t{ data.map( ( item ) => {\n\t\t\t\tconst id = generateCompositeItemIdPrefix( item );\n\t\t\t\treturn (\n\t\t\t\t\t<ListItem\n\t\t\t\t\t\tkey={ id }\n\t\t\t\t\t\tidPrefix={ id }\n\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tisSelected={ item === selectedItem }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\t\tvisibleFields={ visibleFields }\n\t\t\t\t\t\tonDropdownTriggerKeyDown={ onDropdownTriggerKeyDown }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Composite>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ var _element = require("@wordpress/element");
11
11
  var _lockUnlock = require("../../lock-unlock");
12
12
  var _utils = require("../../utils");
13
13
  var _constants = require("../../constants");
14
+ var _index = require("../index");
14
15
  var _jsxRuntime = require("react/jsx-runtime");
15
16
  /**
16
17
  * External dependencies
@@ -25,18 +26,13 @@ var _jsxRuntime = require("react/jsx-runtime");
25
26
  */
26
27
 
27
28
  const {
28
- DropdownMenuV2: DropdownMenu,
29
- DropdownMenuGroupV2: DropdownMenuGroup,
30
- DropdownMenuItemV2: DropdownMenuItem,
31
- DropdownMenuRadioItemV2: DropdownMenuRadioItem,
32
- DropdownMenuItemLabelV2: DropdownMenuItemLabel,
33
- DropdownMenuSeparatorV2: DropdownMenuSeparator
29
+ DropdownMenuV2
34
30
  } = (0, _lockUnlock.unlock)(_components.privateApis);
35
31
  function WithDropDownMenuSeparators({
36
32
  children
37
33
  }) {
38
34
  return _element.Children.toArray(children).filter(Boolean).map((child, i) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_element.Fragment, {
39
- children: [i > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuSeparator, {}), child]
35
+ children: [i > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Separator, {}), child]
40
36
  }, i));
41
37
  }
42
38
  const _HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
@@ -47,35 +43,41 @@ const _HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
47
43
  onHide,
48
44
  setOpenedFilter
49
45
  }, ref) {
46
+ const visibleFieldIds = (0, _index.getVisibleFieldIds)(view, fields);
47
+ const index = visibleFieldIds?.indexOf(fieldId);
48
+ const isSorted = view.sort?.field === fieldId;
49
+ let isHidable = false;
50
+ let isSortable = false;
51
+ let canAddFilter = false;
52
+ let header;
53
+ let operators = [];
50
54
  const combinedField = view.layout?.combinedFields?.find(f => f.id === fieldId);
51
- const index = view.fields?.indexOf(fieldId);
52
- if (!!combinedField) {
53
- return combinedField.label;
54
- }
55
55
  const field = fields.find(f => f.id === fieldId);
56
- if (!field) {
57
- return null;
58
- }
59
- const isHidable = field.enableHiding !== false;
60
- const isSortable = field.enableSorting !== false;
61
- const isSorted = view.sort?.field === field.id;
62
- const operators = (0, _utils.sanitizeOperators)(field);
63
- // Filter can be added:
64
- // 1. If the field is not already part of a view's filters.
65
- // 2. If the field meets the type and operator requirements.
66
- // 3. If it's not primary. If it is, it should be already visible.
67
- const canAddFilter = !view.filters?.some(_filter => field.id === _filter.field) && !!field.elements?.length && !!operators.length && !field.filterBy?.isPrimary;
68
- if (!isSortable && !isHidable && !canAddFilter) {
69
- return field.label;
56
+ if (!combinedField) {
57
+ if (!field) {
58
+ // No combined or regular field found.
59
+ return null;
60
+ }
61
+ isHidable = field.enableHiding !== false;
62
+ isSortable = field.enableSorting !== false;
63
+ header = field.header;
64
+ operators = (0, _utils.sanitizeOperators)(field);
65
+ // Filter can be added:
66
+ // 1. If the field is not already part of a view's filters.
67
+ // 2. If the field meets the type and operator requirements.
68
+ // 3. If it's not primary. If it is, it should be already visible.
69
+ canAddFilter = !view.filters?.some(_filter => fieldId === _filter.field) && !!field.elements?.length && !!operators.length && !field.filterBy?.isPrimary;
70
+ } else {
71
+ header = combinedField.header || combinedField.label;
70
72
  }
71
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenu, {
73
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2, {
72
74
  align: "start",
73
75
  trigger: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.Button, {
74
76
  size: "compact",
75
77
  className: "dataviews-view-table-header-button",
76
78
  ref: ref,
77
79
  variant: "tertiary",
78
- children: [field.label, view.sort && isSorted && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
80
+ children: [header, view.sort && isSorted && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
79
81
  "aria-hidden": "true",
80
82
  children: _constants.sortArrows[view.sort.direction]
81
83
  })]
@@ -84,11 +86,11 @@ const _HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
84
86
  minWidth: '240px'
85
87
  },
86
88
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(WithDropDownMenuSeparators, {
87
- children: [isSortable && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuGroup, {
89
+ children: [isSortable && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Group, {
88
90
  children: _constants.SORTING_DIRECTIONS.map(direction => {
89
91
  const isChecked = view.sort && isSorted && view.sort.direction === direction;
90
- const value = `${field.id}-${direction}`;
91
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuRadioItem, {
92
+ const value = `${fieldId}-${direction}`;
93
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.RadioItem, {
92
94
  // All sorting radio items share the same name, so that
93
95
  // selecting a sorting option automatically deselects the
94
96
  // previously selected one, even if it is displayed in
@@ -101,87 +103,80 @@ const _HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
101
103
  onChangeView({
102
104
  ...view,
103
105
  sort: {
104
- field: field.id,
106
+ field: fieldId,
105
107
  direction
106
108
  }
107
109
  });
108
110
  },
109
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItemLabel, {
111
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
110
112
  children: _constants.sortLabels[direction]
111
113
  })
112
114
  }, value);
113
115
  })
114
- }), canAddFilter && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuGroup, {
115
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItem, {
116
+ }), canAddFilter && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Group, {
117
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Item, {
116
118
  prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, {
117
119
  icon: _icons.funnel
118
120
  }),
119
121
  onClick: () => {
120
- setOpenedFilter(field.id);
122
+ setOpenedFilter(fieldId);
121
123
  onChangeView({
122
124
  ...view,
123
125
  page: 1,
124
126
  filters: [...(view.filters || []), {
125
- field: field.id,
127
+ field: fieldId,
126
128
  value: undefined,
127
129
  operator: operators[0]
128
130
  }]
129
131
  });
130
132
  },
131
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItemLabel, {
133
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
132
134
  children: (0, _i18n.__)('Add filter')
133
135
  })
134
136
  })
135
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(DropdownMenuGroup, {
136
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItem, {
137
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(DropdownMenuV2.Group, {
138
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Item, {
137
139
  prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, {
138
140
  icon: _icons.arrowLeft
139
141
  }),
140
142
  disabled: index < 1,
141
143
  onClick: () => {
142
- var _view$fields$slice;
143
- if (!view.fields || index < 1) {
144
- return;
145
- }
144
+ var _visibleFieldIds$slic;
146
145
  onChangeView({
147
146
  ...view,
148
- fields: [...((_view$fields$slice = view.fields.slice(0, index - 1)) !== null && _view$fields$slice !== void 0 ? _view$fields$slice : []), field.id, view.fields[index - 1], ...view.fields.slice(index + 1)]
147
+ fields: [...((_visibleFieldIds$slic = visibleFieldIds.slice(0, index - 1)) !== null && _visibleFieldIds$slic !== void 0 ? _visibleFieldIds$slic : []), fieldId, visibleFieldIds[index - 1], ...visibleFieldIds.slice(index + 1)]
149
148
  });
150
149
  },
151
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItemLabel, {
150
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
152
151
  children: (0, _i18n.__)('Move left')
153
152
  })
154
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItem, {
153
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Item, {
155
154
  prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, {
156
155
  icon: _icons.arrowRight
157
156
  }),
158
- disabled: !view.fields || index >= view.fields.length - 1,
157
+ disabled: index >= visibleFieldIds.length - 1,
159
158
  onClick: () => {
160
- var _view$fields$slice2;
161
- if (!view.fields || index >= view.fields.length - 1) {
162
- return;
163
- }
159
+ var _visibleFieldIds$slic2;
164
160
  onChangeView({
165
161
  ...view,
166
- fields: [...((_view$fields$slice2 = view.fields.slice(0, index)) !== null && _view$fields$slice2 !== void 0 ? _view$fields$slice2 : []), view.fields[index + 1], field.id, ...view.fields.slice(index + 2)]
162
+ fields: [...((_visibleFieldIds$slic2 = visibleFieldIds.slice(0, index)) !== null && _visibleFieldIds$slic2 !== void 0 ? _visibleFieldIds$slic2 : []), visibleFieldIds[index + 1], fieldId, ...visibleFieldIds.slice(index + 2)]
167
163
  });
168
164
  },
169
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItemLabel, {
165
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
170
166
  children: (0, _i18n.__)('Move right')
171
167
  })
172
- }), isHidable && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItem, {
168
+ }), isHidable && field && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Item, {
173
169
  prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, {
174
170
  icon: _icons.unseen
175
171
  }),
176
172
  onClick: () => {
177
- const viewFields = view.fields || fields.map(f => f.id);
178
173
  onHide(field);
179
174
  onChangeView({
180
175
  ...view,
181
- fields: viewFields.filter(id => id !== field.id)
176
+ fields: visibleFieldIds.filter(id => id !== fieldId)
182
177
  });
183
178
  },
184
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuItemLabel, {
179
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
185
180
  children: (0, _i18n.__)('Hide column')
186
181
  })
187
182
  })]