@wordpress/edit-site 5.20.1 → 5.21.1-next.f8d8eceb.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 (260) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/actions/index.js +121 -0
  3. package/build/components/actions/index.js.map +1 -0
  4. package/build/components/add-new-template/add-custom-template-modal-content.js +17 -13
  5. package/build/components/add-new-template/add-custom-template-modal-content.js.map +1 -1
  6. package/build/components/block-editor/resize-handle.js +2 -1
  7. package/build/components/block-editor/resize-handle.js.map +1 -1
  8. package/build/components/block-editor/use-site-editor-settings.js +12 -4
  9. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  10. package/build/components/create-template-part-modal/index.js +10 -6
  11. package/build/components/create-template-part-modal/index.js.map +1 -1
  12. package/build/components/dataviews/context.js +15 -0
  13. package/build/components/dataviews/context.js.map +1 -0
  14. package/build/components/dataviews/dataviews.js +50 -33
  15. package/build/components/dataviews/dataviews.js.map +1 -1
  16. package/build/components/dataviews/filters.js +74 -0
  17. package/build/components/dataviews/filters.js.map +1 -0
  18. package/build/components/dataviews/in-filter.js +49 -0
  19. package/build/components/dataviews/in-filter.js.map +1 -0
  20. package/build/components/dataviews/index.js +0 -7
  21. package/build/components/dataviews/index.js.map +1 -1
  22. package/build/components/dataviews/item-actions.js +62 -0
  23. package/build/components/dataviews/item-actions.js.map +1 -0
  24. package/build/components/dataviews/pagination.js +74 -45
  25. package/build/components/dataviews/pagination.js.map +1 -1
  26. package/build/components/dataviews/{text-filter.js → search.js} +21 -15
  27. package/build/components/dataviews/search.js.map +1 -0
  28. package/build/components/dataviews/view-actions.js +94 -56
  29. package/build/components/dataviews/view-actions.js.map +1 -1
  30. package/build/components/dataviews/view-grid.js +59 -0
  31. package/build/components/dataviews/view-grid.js.map +1 -0
  32. package/build/components/dataviews/view-list.js +283 -0
  33. package/build/components/dataviews/view-list.js.map +1 -0
  34. package/build/components/editor/index.js +2 -1
  35. package/build/components/editor/index.js.map +1 -1
  36. package/build/components/global-styles/font-library-modal/context.js +16 -10
  37. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  38. package/build/components/global-styles/font-library-modal/font-collection.js +20 -6
  39. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  40. package/build/components/global-styles/screen-block.js +2 -10
  41. package/build/components/global-styles/screen-block.js.map +1 -1
  42. package/build/components/global-styles/screen-root.js +1 -2
  43. package/build/components/global-styles/screen-root.js.map +1 -1
  44. package/build/components/global-styles/ui.js +3 -4
  45. package/build/components/global-styles/ui.js.map +1 -1
  46. package/build/components/layout/index.js +10 -2
  47. package/build/components/layout/index.js.map +1 -1
  48. package/build/components/media/index.js +34 -0
  49. package/build/components/media/index.js.map +1 -0
  50. package/build/components/page-actions/index.js +0 -2
  51. package/build/components/page-actions/index.js.map +1 -1
  52. package/build/components/page-pages/default-views.js +60 -0
  53. package/build/components/page-pages/default-views.js.map +1 -0
  54. package/build/components/page-pages/index.js +174 -107
  55. package/build/components/page-pages/index.js.map +1 -1
  56. package/build/components/page-patterns/delete-category-menu-item.js +89 -0
  57. package/build/components/page-patterns/delete-category-menu-item.js.map +1 -0
  58. package/build/components/page-patterns/duplicate-menu-item.js +52 -131
  59. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -1
  60. package/build/components/page-patterns/grid-item.js +1 -0
  61. package/build/components/page-patterns/grid-item.js.map +1 -1
  62. package/build/components/page-patterns/header.js +25 -3
  63. package/build/components/page-patterns/header.js.map +1 -1
  64. package/build/components/page-patterns/rename-category-menu-item.js +49 -0
  65. package/build/components/page-patterns/rename-category-menu-item.js.map +1 -0
  66. package/build/components/page-patterns/rename-menu-item.js +1 -1
  67. package/build/components/page-patterns/rename-menu-item.js.map +1 -1
  68. package/build/components/page-patterns/use-patterns.js +1 -0
  69. package/build/components/page-patterns/use-patterns.js.map +1 -1
  70. package/build/components/pattern-modal/duplicate.js +65 -0
  71. package/build/components/pattern-modal/duplicate.js.map +1 -0
  72. package/build/components/pattern-modal/index.js +24 -0
  73. package/build/components/pattern-modal/index.js.map +1 -0
  74. package/build/components/pattern-modal/rename.js +42 -0
  75. package/build/components/pattern-modal/rename.js.map +1 -0
  76. package/build/components/sidebar/index.js +3 -1
  77. package/build/components/sidebar/index.js.map +1 -1
  78. package/build/components/sidebar-dataviews/index.js +72 -0
  79. package/build/components/sidebar-dataviews/index.js.map +1 -0
  80. package/build/components/sidebar-edit-mode/template-panel/last-revision.js +3 -0
  81. package/build/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  82. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -2
  83. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  84. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -3
  85. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  86. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +29 -0
  87. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  88. package/build/components/sidebar-navigation-screen-template/home-template-details.js +12 -1
  89. package/build/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  90. package/build/hooks/commands/use-common-commands.js +1 -2
  91. package/build/hooks/commands/use-common-commands.js.map +1 -1
  92. package/build/hooks/commands/use-edit-mode-commands.js +50 -0
  93. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  94. package/build/lock-unlock.js +1 -1
  95. package/build/lock-unlock.js.map +1 -1
  96. package/build/store/selectors.js +4 -5
  97. package/build/store/selectors.js.map +1 -1
  98. package/build-module/components/actions/index.js +108 -0
  99. package/build-module/components/actions/index.js.map +1 -0
  100. package/build-module/components/add-new-template/add-custom-template-modal-content.js +16 -12
  101. package/build-module/components/add-new-template/add-custom-template-modal-content.js.map +1 -1
  102. package/build-module/components/block-editor/resize-handle.js +2 -1
  103. package/build-module/components/block-editor/resize-handle.js.map +1 -1
  104. package/build-module/components/block-editor/use-site-editor-settings.js +12 -4
  105. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  106. package/build-module/components/create-template-part-modal/index.js +10 -6
  107. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  108. package/build-module/components/dataviews/context.js +7 -0
  109. package/build-module/components/dataviews/context.js.map +1 -0
  110. package/build-module/components/dataviews/dataviews.js +49 -32
  111. package/build-module/components/dataviews/dataviews.js.map +1 -1
  112. package/build-module/components/dataviews/filters.js +66 -0
  113. package/build-module/components/dataviews/filters.js.map +1 -0
  114. package/build-module/components/dataviews/in-filter.js +41 -0
  115. package/build-module/components/dataviews/in-filter.js.map +1 -0
  116. package/build-module/components/dataviews/index.js +0 -1
  117. package/build-module/components/dataviews/index.js.map +1 -1
  118. package/build-module/components/dataviews/item-actions.js +55 -0
  119. package/build-module/components/dataviews/item-actions.js.map +1 -0
  120. package/build-module/components/dataviews/pagination.js +73 -46
  121. package/build-module/components/dataviews/pagination.js.map +1 -1
  122. package/build-module/components/dataviews/search.js +42 -0
  123. package/build-module/components/dataviews/search.js.map +1 -0
  124. package/build-module/components/dataviews/view-actions.js +95 -54
  125. package/build-module/components/dataviews/view-actions.js.map +1 -1
  126. package/build-module/components/dataviews/view-grid.js +51 -0
  127. package/build-module/components/dataviews/view-grid.js.map +1 -0
  128. package/build-module/components/dataviews/view-list.js +274 -0
  129. package/build-module/components/dataviews/view-list.js.map +1 -0
  130. package/build-module/components/editor/index.js +2 -1
  131. package/build-module/components/editor/index.js.map +1 -1
  132. package/build-module/components/global-styles/font-library-modal/context.js +16 -10
  133. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  134. package/build-module/components/global-styles/font-library-modal/font-collection.js +20 -6
  135. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  136. package/build-module/components/global-styles/screen-block.js +2 -10
  137. package/build-module/components/global-styles/screen-block.js.map +1 -1
  138. package/build-module/components/global-styles/screen-root.js +1 -2
  139. package/build-module/components/global-styles/screen-root.js.map +1 -1
  140. package/build-module/components/global-styles/ui.js +3 -4
  141. package/build-module/components/global-styles/ui.js.map +1 -1
  142. package/build-module/components/layout/index.js +11 -3
  143. package/build-module/components/layout/index.js.map +1 -1
  144. package/build-module/components/media/index.js +26 -0
  145. package/build-module/components/media/index.js.map +1 -0
  146. package/build-module/components/page-actions/index.js +0 -2
  147. package/build-module/components/page-actions/index.js.map +1 -1
  148. package/build-module/components/page-pages/default-views.js +53 -0
  149. package/build-module/components/page-pages/default-views.js.map +1 -0
  150. package/build-module/components/page-pages/index.js +175 -110
  151. package/build-module/components/page-pages/index.js.map +1 -1
  152. package/build-module/components/page-patterns/delete-category-menu-item.js +82 -0
  153. package/build-module/components/page-patterns/delete-category-menu-item.js.map +1 -0
  154. package/build-module/components/page-patterns/duplicate-menu-item.js +54 -133
  155. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -1
  156. package/build-module/components/page-patterns/grid-item.js +1 -0
  157. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  158. package/build-module/components/page-patterns/header.js +26 -4
  159. package/build-module/components/page-patterns/header.js.map +1 -1
  160. package/build-module/components/page-patterns/rename-category-menu-item.js +42 -0
  161. package/build-module/components/page-patterns/rename-category-menu-item.js.map +1 -0
  162. package/build-module/components/page-patterns/rename-menu-item.js +1 -1
  163. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -1
  164. package/build-module/components/page-patterns/use-patterns.js +1 -0
  165. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  166. package/build-module/components/pattern-modal/duplicate.js +57 -0
  167. package/build-module/components/pattern-modal/duplicate.js.map +1 -0
  168. package/build-module/components/pattern-modal/index.js +14 -0
  169. package/build-module/components/pattern-modal/index.js.map +1 -0
  170. package/build-module/components/pattern-modal/rename.js +34 -0
  171. package/build-module/components/pattern-modal/rename.js.map +1 -0
  172. package/build-module/components/sidebar/index.js +3 -1
  173. package/build-module/components/sidebar/index.js.map +1 -1
  174. package/build-module/components/sidebar-dataviews/index.js +64 -0
  175. package/build-module/components/sidebar-dataviews/index.js.map +1 -0
  176. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js +3 -0
  177. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  178. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -2
  179. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  180. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -3
  181. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  182. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +22 -0
  183. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  184. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js +12 -1
  185. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  186. package/build-module/hooks/commands/use-common-commands.js +1 -2
  187. package/build-module/hooks/commands/use-common-commands.js.map +1 -1
  188. package/build-module/hooks/commands/use-edit-mode-commands.js +51 -1
  189. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  190. package/build-module/lock-unlock.js +1 -1
  191. package/build-module/lock-unlock.js.map +1 -1
  192. package/build-module/store/selectors.js +4 -5
  193. package/build-module/store/selectors.js.map +1 -1
  194. package/build-style/style-rtl.css +48 -11
  195. package/build-style/style.css +48 -11
  196. package/package.json +40 -40
  197. package/src/components/actions/index.js +123 -0
  198. package/src/components/add-new-template/add-custom-template-modal-content.js +22 -17
  199. package/src/components/block-editor/resize-handle.js +1 -0
  200. package/src/components/block-editor/use-site-editor-settings.js +21 -13
  201. package/src/components/create-template-part-modal/index.js +9 -5
  202. package/src/components/dataviews/README.md +194 -0
  203. package/src/components/dataviews/context.js +7 -0
  204. package/src/components/dataviews/dataviews.js +55 -34
  205. package/src/components/dataviews/filters.js +75 -0
  206. package/src/components/dataviews/in-filter.js +45 -0
  207. package/src/components/dataviews/index.js +0 -1
  208. package/src/components/dataviews/item-actions.js +69 -0
  209. package/src/components/dataviews/pagination.js +80 -59
  210. package/src/components/dataviews/search.js +41 -0
  211. package/src/components/dataviews/style.scss +18 -3
  212. package/src/components/dataviews/view-actions.js +108 -63
  213. package/src/components/dataviews/view-grid.js +65 -0
  214. package/src/components/dataviews/view-list.js +348 -0
  215. package/src/components/editor/index.js +2 -0
  216. package/src/components/global-styles/font-library-modal/context.js +17 -11
  217. package/src/components/global-styles/font-library-modal/font-collection.js +19 -11
  218. package/src/components/global-styles/screen-block.js +2 -9
  219. package/src/components/global-styles/screen-root.js +1 -2
  220. package/src/components/global-styles/style.scss +16 -4
  221. package/src/components/global-styles/ui.js +1 -2
  222. package/src/components/layout/index.js +12 -4
  223. package/src/components/media/index.js +25 -0
  224. package/src/components/page-actions/index.js +1 -7
  225. package/src/components/page-pages/default-views.js +58 -0
  226. package/src/components/page-pages/index.js +181 -108
  227. package/src/components/page-pages/style.scss +3 -0
  228. package/src/components/page-patterns/delete-category-menu-item.js +104 -0
  229. package/src/components/page-patterns/duplicate-menu-item.js +68 -181
  230. package/src/components/page-patterns/grid-item.js +1 -0
  231. package/src/components/page-patterns/header.js +42 -6
  232. package/src/components/page-patterns/rename-category-menu-item.js +45 -0
  233. package/src/components/page-patterns/rename-menu-item.js +2 -2
  234. package/src/components/page-patterns/style.scss +8 -0
  235. package/src/components/page-patterns/use-patterns.js +5 -0
  236. package/src/components/pattern-modal/duplicate.js +53 -0
  237. package/src/components/pattern-modal/index.js +19 -0
  238. package/src/components/pattern-modal/rename.js +29 -0
  239. package/src/components/sidebar/index.js +2 -0
  240. package/src/components/sidebar-dataviews/index.js +65 -0
  241. package/src/components/sidebar-edit-mode/template-panel/last-revision.js +4 -0
  242. package/src/components/sidebar-navigation-screen/style.scss +17 -5
  243. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +2 -7
  244. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +2 -8
  245. package/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +32 -0
  246. package/src/components/sidebar-navigation-screen-template/home-template-details.js +21 -7
  247. package/src/hooks/commands/use-common-commands.js +1 -2
  248. package/src/hooks/commands/use-edit-mode-commands.js +43 -0
  249. package/src/lock-unlock.js +1 -1
  250. package/src/store/selectors.js +9 -10
  251. package/src/style.scss +1 -0
  252. package/build/components/dataviews/list-view.js +0 -89
  253. package/build/components/dataviews/list-view.js.map +0 -1
  254. package/build/components/dataviews/text-filter.js.map +0 -1
  255. package/build-module/components/dataviews/list-view.js +0 -80
  256. package/build-module/components/dataviews/list-view.js.map +0 -1
  257. package/build-module/components/dataviews/text-filter.js +0 -36
  258. package/build-module/components/dataviews/text-filter.js.map +0 -1
  259. package/src/components/dataviews/list-view.js +0 -106
  260. package/src/components/dataviews/text-filter.js +0 -37
@@ -2,7 +2,7 @@ import { createElement, Fragment } from "react";
2
2
  /**
3
3
  * WordPress dependencies
4
4
  */
5
- import { Button, Icon, SelectControl, privateApis as componentsPrivateApis, __experimentalInputControlPrefixWrapper as InputControlPrefixWrapper } from '@wordpress/components';
5
+ import { Button, Icon, privateApis as componentsPrivateApis } from '@wordpress/components';
6
6
  import { chevronRightSmall, check, blockTable, chevronDown, arrowUp, arrowDown } from '@wordpress/icons';
7
7
  import { __ } from '@wordpress/i18n';
8
8
 
@@ -17,50 +17,69 @@ const {
17
17
  DropdownSubMenuV2,
18
18
  DropdownSubMenuTriggerV2
19
19
  } = unlock(componentsPrivateApis);
20
- export const PAGE_SIZE_VALUES = [5, 20, 50];
21
- export function PageSizeControl({
22
- dataView
20
+ const availableViews = [{
21
+ id: 'list',
22
+ label: __('List')
23
+ }, {
24
+ id: 'grid',
25
+ label: __('Grid')
26
+ }];
27
+ function ViewTypeMenu({
28
+ view,
29
+ onChangeView
23
30
  }) {
24
- const label = __('Rows per page:');
25
- return createElement(SelectControl, {
26
- __nextHasNoMarginBottom: true,
27
- label: label,
28
- hideLabelFromVision: true
29
- // TODO: This should probably use a label based on the wanted design
30
- // and we could remove InputControlPrefixWrapper usage.
31
- ,
32
- prefix: createElement(InputControlPrefixWrapper, {
33
- as: "span",
34
- className: "dataviews__per-page-control-prefix"
35
- }, label),
36
- value: dataView.getState().pagination.pageSize,
37
- options: PAGE_SIZE_VALUES.map(pageSize => ({
38
- value: pageSize,
39
- label: pageSize
40
- })),
41
- onChange: value => dataView.setPageSize(+value)
42
- });
31
+ const activeView = availableViews.find(v => view.type === v.id);
32
+ return createElement(DropdownSubMenuV2, {
33
+ trigger: createElement(DropdownSubMenuTriggerV2, {
34
+ suffix: createElement(Fragment, null, activeView.label, createElement(Icon, {
35
+ icon: chevronRightSmall
36
+ }))
37
+ }, __('Layout'))
38
+ }, availableViews.map(availableView => {
39
+ return createElement(DropdownMenuItemV2, {
40
+ key: availableView.id,
41
+ prefix: availableView.id === view.type && createElement(Icon, {
42
+ icon: check
43
+ }),
44
+ onSelect: event => {
45
+ // We need to handle this on DropDown component probably..
46
+ event.preventDefault();
47
+ onChangeView({
48
+ ...view,
49
+ type: availableView.id
50
+ });
51
+ }
52
+ // TODO: check about role and a11y.
53
+ ,
54
+ role: "menuitemcheckbox"
55
+ }, availableView.label);
56
+ }));
43
57
  }
58
+ const PAGE_SIZE_VALUES = [5, 20, 50];
44
59
  function PageSizeMenu({
45
- dataView
60
+ view,
61
+ onChangeView
46
62
  }) {
47
- const currenPageSize = dataView.getState().pagination.pageSize;
48
63
  return createElement(DropdownSubMenuV2, {
49
64
  trigger: createElement(DropdownSubMenuTriggerV2, {
50
- suffix: createElement(Fragment, null, currenPageSize, createElement(Icon, {
65
+ suffix: createElement(Fragment, null, view.perPage, createElement(Icon, {
51
66
  icon: chevronRightSmall
52
67
  }))
53
68
  }, __('Rows per page'))
54
69
  }, PAGE_SIZE_VALUES.map(size => {
55
70
  return createElement(DropdownMenuItemV2, {
56
71
  key: size,
57
- prefix: currenPageSize === size && createElement(Icon, {
72
+ prefix: view.perPage === size && createElement(Icon, {
58
73
  icon: check
59
74
  }),
60
75
  onSelect: event => {
61
76
  // We need to handle this on DropDown component probably..
62
77
  event.preventDefault();
63
- dataView.setPageSize(size);
78
+ onChangeView({
79
+ ...view,
80
+ perPage: size,
81
+ page: 1
82
+ });
64
83
  }
65
84
  // TODO: check about role and a11y.
66
85
  ,
@@ -69,10 +88,12 @@ function PageSizeMenu({
69
88
  }));
70
89
  }
71
90
  function FieldsVisibilityMenu({
72
- dataView
91
+ view,
92
+ onChangeView,
93
+ fields
73
94
  }) {
74
- const hideableFields = dataView.getAllColumns().filter(columnn => columnn.getCanHide());
75
- if (!hideableFields?.length) {
95
+ const hidableFields = fields.filter(field => field.enableHiding !== false);
96
+ if (!hidableFields?.length) {
76
97
  return null;
77
98
  }
78
99
  return createElement(DropdownSubMenuV2, {
@@ -81,18 +102,21 @@ function FieldsVisibilityMenu({
81
102
  icon: chevronRightSmall
82
103
  })
83
104
  }, __('Fields'))
84
- }, hideableFields?.map(field => {
105
+ }, hidableFields?.map(field => {
85
106
  return createElement(DropdownMenuItemV2, {
86
107
  key: field.id,
87
- prefix: field.getIsVisible() && createElement(Icon, {
108
+ prefix: !view.hiddenFields?.includes(field.id) && createElement(Icon, {
88
109
  icon: check
89
110
  }),
90
111
  onSelect: event => {
91
112
  event.preventDefault();
92
- field.getToggleVisibilityHandler()(event);
113
+ onChangeView({
114
+ ...view,
115
+ hiddenFields: view.hiddenFields?.includes(field.id) ? view.hiddenFields.filter(id => id !== field.id) : [...view.hiddenFields, field.id]
116
+ });
93
117
  },
94
118
  role: "menuitemcheckbox"
95
- }, field.columnDef.header);
119
+ }, field.header);
96
120
  }));
97
121
  }
98
122
 
@@ -108,47 +132,56 @@ const sortingItemsInfo = {
108
132
  }
109
133
  };
110
134
  function SortMenu({
111
- dataView
135
+ fields,
136
+ view,
137
+ onChangeView
112
138
  }) {
113
- const sortableFields = dataView.getAllColumns().filter(columnn => columnn.getCanSort());
139
+ const sortableFields = fields.filter(field => field.enableSorting !== false);
114
140
  if (!sortableFields?.length) {
115
141
  return null;
116
142
  }
117
- const currentSortedField = sortableFields.find(field => field.getIsSorted());
143
+ const currentSortedField = fields.find(field => field.id === view.sort?.field);
118
144
  return createElement(DropdownSubMenuV2, {
119
145
  trigger: createElement(DropdownSubMenuTriggerV2, {
120
- suffix: createElement(Fragment, null, currentSortedField?.columnDef.header, createElement(Icon, {
146
+ suffix: createElement(Fragment, null, currentSortedField?.header, createElement(Icon, {
121
147
  icon: chevronRightSmall
122
148
  }))
123
149
  }, __('Sort by'))
124
150
  }, sortableFields?.map(field => {
125
- const sortedDirection = field.getIsSorted();
151
+ const sortedDirection = view.sort?.direction;
126
152
  return createElement(DropdownSubMenuV2, {
127
153
  key: field.id,
128
154
  trigger: createElement(DropdownSubMenuTriggerV2, {
129
155
  suffix: createElement(Icon, {
130
156
  icon: chevronRightSmall
131
157
  })
132
- }, field.columnDef.header),
158
+ }, field.header),
133
159
  side: "left"
134
160
  }, Object.entries(sortingItemsInfo).map(([direction, info]) => {
161
+ const isActive = currentSortedField && sortedDirection === direction && field.id === currentSortedField.id;
135
162
  return createElement(DropdownMenuItemV2, {
136
163
  key: direction,
137
164
  prefix: createElement(Icon, {
138
165
  icon: info.icon
139
166
  }),
140
- suffix: sortedDirection === direction && createElement(Icon, {
167
+ suffix: isActive && createElement(Icon, {
141
168
  icon: check
142
169
  }),
143
170
  onSelect: event => {
144
171
  event.preventDefault();
145
172
  if (sortedDirection === direction) {
146
- dataView.resetSorting();
173
+ onChangeView({
174
+ ...view,
175
+ sort: undefined
176
+ });
147
177
  } else {
148
- dataView.setSorting([{
149
- id: field.id,
150
- desc: direction === 'desc'
151
- }]);
178
+ onChangeView({
179
+ ...view,
180
+ sort: {
181
+ field: field.id,
182
+ direction
183
+ }
184
+ });
152
185
  }
153
186
  }
154
187
  }, info.label);
@@ -156,24 +189,32 @@ function SortMenu({
156
189
  }));
157
190
  }
158
191
  export default function ViewActions({
159
- dataView,
160
- className
192
+ fields,
193
+ view,
194
+ onChangeView
161
195
  }) {
162
196
  return createElement(DropdownMenuV2, {
163
197
  label: __('Actions'),
164
- className: className,
165
198
  trigger: createElement(Button, {
166
199
  variant: "tertiary",
167
200
  icon: blockTable
168
201
  }, __('View'), createElement(Icon, {
169
202
  icon: chevronDown
170
203
  }))
171
- }, createElement(DropdownMenuGroupV2, null, createElement(SortMenu, {
172
- dataView: dataView
204
+ }, createElement(DropdownMenuGroupV2, null, createElement(ViewTypeMenu, {
205
+ view: view,
206
+ onChangeView: onChangeView
207
+ }), createElement(SortMenu, {
208
+ fields: fields,
209
+ view: view,
210
+ onChangeView: onChangeView
173
211
  }), createElement(FieldsVisibilityMenu, {
174
- dataView: dataView
212
+ fields: fields,
213
+ view: view,
214
+ onChangeView: onChangeView
175
215
  }), createElement(PageSizeMenu, {
176
- dataView: dataView
216
+ view: view,
217
+ onChangeView: onChangeView
177
218
  })));
178
219
  }
179
220
  //# sourceMappingURL=view-actions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Icon","SelectControl","privateApis","componentsPrivateApis","__experimentalInputControlPrefixWrapper","InputControlPrefixWrapper","chevronRightSmall","check","blockTable","chevronDown","arrowUp","arrowDown","__","unlock","DropdownMenuV2","DropdownMenuGroupV2","DropdownMenuItemV2","DropdownSubMenuV2","DropdownSubMenuTriggerV2","PAGE_SIZE_VALUES","PageSizeControl","dataView","label","createElement","__nextHasNoMarginBottom","hideLabelFromVision","prefix","as","className","value","getState","pagination","pageSize","options","map","onChange","setPageSize","PageSizeMenu","currenPageSize","trigger","suffix","Fragment","icon","size","key","onSelect","event","preventDefault","role","FieldsVisibilityMenu","hideableFields","getAllColumns","filter","columnn","getCanHide","length","field","id","getIsVisible","getToggleVisibilityHandler","columnDef","header","sortingItemsInfo","asc","desc","SortMenu","sortableFields","getCanSort","currentSortedField","find","getIsSorted","sortedDirection","side","Object","entries","direction","info","resetSorting","setSorting","ViewActions","variant"],"sources":["@wordpress/edit-site/src/components/dataviews/view-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tIcon,\n\tSelectControl,\n\tprivateApis as componentsPrivateApis,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} from '@wordpress/components';\nimport {\n\tchevronRightSmall,\n\tcheck,\n\tblockTable,\n\tchevronDown,\n\tarrowUp,\n\tarrowDown,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst {\n\tDropdownMenuV2,\n\tDropdownMenuGroupV2,\n\tDropdownMenuItemV2,\n\tDropdownSubMenuV2,\n\tDropdownSubMenuTriggerV2,\n} = unlock( componentsPrivateApis );\n\nexport const PAGE_SIZE_VALUES = [ 5, 20, 50 ];\n\nexport function PageSizeControl( { dataView } ) {\n\tconst label = __( 'Rows per page:' );\n\treturn (\n\t\t<SelectControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\tlabel={ label }\n\t\t\thideLabelFromVision\n\t\t\t// TODO: This should probably use a label based on the wanted design\n\t\t\t// and we could remove InputControlPrefixWrapper usage.\n\t\t\tprefix={\n\t\t\t\t<InputControlPrefixWrapper\n\t\t\t\t\tas=\"span\"\n\t\t\t\t\tclassName=\"dataviews__per-page-control-prefix\"\n\t\t\t\t>\n\t\t\t\t\t{ label }\n\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t}\n\t\t\tvalue={ dataView.getState().pagination.pageSize }\n\t\t\toptions={ PAGE_SIZE_VALUES.map( ( pageSize ) => ( {\n\t\t\t\tvalue: pageSize,\n\t\t\t\tlabel: pageSize,\n\t\t\t} ) ) }\n\t\t\tonChange={ ( value ) => dataView.setPageSize( +value ) }\n\t\t/>\n\t);\n}\n\nfunction PageSizeMenu( { dataView } ) {\n\tconst currenPageSize = dataView.getState().pagination.pageSize;\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ currenPageSize }\n\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ /* TODO: probably label per view type. */ }\n\t\t\t\t\t{ __( 'Rows per page' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ PAGE_SIZE_VALUES.map( ( size ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\tkey={ size }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\tcurrenPageSize === size && <Icon icon={ check } />\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t// We need to handle this on DropDown component probably..\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tdataView.setPageSize( size );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t// TODO: check about role and a11y.\n\t\t\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ size }\n\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\nfunction FieldsVisibilityMenu( { dataView } ) {\n\tconst hideableFields = dataView\n\t\t.getAllColumns()\n\t\t.filter( ( columnn ) => columnn.getCanHide() );\n\tif ( ! hideableFields?.length ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={ <Icon icon={ chevronRightSmall } /> }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Fields' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ hideableFields?.map( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\tfield.getIsVisible() && <Icon icon={ check } />\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tfield.getToggleVisibilityHandler()( event );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ field.columnDef.header }\n\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\n// This object is used to construct the sorting options per sortable field.\nconst sortingItemsInfo = {\n\tasc: { icon: arrowUp, label: __( 'Sort ascending' ) },\n\tdesc: { icon: arrowDown, label: __( 'Sort descending' ) },\n};\nfunction SortMenu( { dataView } ) {\n\tconst sortableFields = dataView\n\t\t.getAllColumns()\n\t\t.filter( ( columnn ) => columnn.getCanSort() );\n\tif ( ! sortableFields?.length ) {\n\t\treturn null;\n\t}\n\tconst currentSortedField = sortableFields.find( ( field ) =>\n\t\tfield.getIsSorted()\n\t);\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ currentSortedField?.columnDef.header }\n\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Sort by' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ sortableFields?.map( ( field ) => {\n\t\t\t\tconst sortedDirection = field.getIsSorted();\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownSubMenuV2\n\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\t\t\t\tsuffix={ <Icon icon={ chevronRightSmall } /> }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ field.columnDef.header }\n\t\t\t\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tside=\"left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ Object.entries( sortingItemsInfo ).map(\n\t\t\t\t\t\t\t( [ direction, info ] ) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\t\t\t\t\tkey={ direction }\n\t\t\t\t\t\t\t\t\t\tprefix={ <Icon icon={ info.icon } /> }\n\t\t\t\t\t\t\t\t\t\tsuffix={\n\t\t\t\t\t\t\t\t\t\t\tsortedDirection === direction && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\tsortedDirection === direction\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tdataView.resetSorting();\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tdataView.setSorting( [\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\tid: field.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdesc:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdirection ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'desc',\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\t\t{ info.label }\n\t\t\t\t\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DropdownSubMenuV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\nexport default function ViewActions( { dataView, className } ) {\n\treturn (\n\t\t<DropdownMenuV2\n\t\t\tlabel={ __( 'Actions' ) }\n\t\t\tclassName={ className }\n\t\t\ttrigger={\n\t\t\t\t<Button variant=\"tertiary\" icon={ blockTable }>\n\t\t\t\t\t{ __( 'View' ) }\n\t\t\t\t\t<Icon icon={ chevronDown } />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t>\n\t\t\t<DropdownMenuGroupV2>\n\t\t\t\t<SortMenu dataView={ dataView } />\n\t\t\t\t<FieldsVisibilityMenu dataView={ dataView } />\n\t\t\t\t<PageSizeMenu dataView={ dataView } />\n\t\t\t</DropdownMenuGroupV2>\n\t\t</DropdownMenuV2>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Button","Icon","privateApis","componentsPrivateApis","chevronRightSmall","check","blockTable","chevronDown","arrowUp","arrowDown","__","unlock","DropdownMenuV2","DropdownMenuGroupV2","DropdownMenuItemV2","DropdownSubMenuV2","DropdownSubMenuTriggerV2","availableViews","id","label","ViewTypeMenu","view","onChangeView","activeView","find","v","type","createElement","trigger","suffix","Fragment","icon","map","availableView","key","prefix","onSelect","event","preventDefault","role","PAGE_SIZE_VALUES","PageSizeMenu","perPage","size","page","FieldsVisibilityMenu","fields","hidableFields","filter","field","enableHiding","length","hiddenFields","includes","header","sortingItemsInfo","asc","desc","SortMenu","sortableFields","enableSorting","currentSortedField","sort","sortedDirection","direction","side","Object","entries","info","isActive","undefined","ViewActions","variant"],"sources":["@wordpress/edit-site/src/components/dataviews/view-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tIcon,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport {\n\tchevronRightSmall,\n\tcheck,\n\tblockTable,\n\tchevronDown,\n\tarrowUp,\n\tarrowDown,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst {\n\tDropdownMenuV2,\n\tDropdownMenuGroupV2,\n\tDropdownMenuItemV2,\n\tDropdownSubMenuV2,\n\tDropdownSubMenuTriggerV2,\n} = unlock( componentsPrivateApis );\n\nconst availableViews = [\n\t{\n\t\tid: 'list',\n\t\tlabel: __( 'List' ),\n\t},\n\t{\n\t\tid: 'grid',\n\t\tlabel: __( 'Grid' ),\n\t},\n];\n\nfunction ViewTypeMenu( { view, onChangeView } ) {\n\tconst activeView = availableViews.find( ( v ) => view.type === v.id );\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ activeView.label }\n\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Layout' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ availableViews.map( ( availableView ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\tkey={ availableView.id }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\tavailableView.id === view.type && (\n\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t// We need to handle this on DropDown component probably..\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonChangeView( { ...view, type: availableView.id } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t// TODO: check about role and a11y.\n\t\t\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableView.label }\n\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\nconst PAGE_SIZE_VALUES = [ 5, 20, 50 ];\nfunction PageSizeMenu( { view, onChangeView } ) {\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ view.perPage }\n\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ /* TODO: probably label per view type. */ }\n\t\t\t\t\t{ __( 'Rows per page' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ PAGE_SIZE_VALUES.map( ( size ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\tkey={ size }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\tview.perPage === size && <Icon icon={ check } />\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t// We need to handle this on DropDown component probably..\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonChangeView( { ...view, perPage: size, page: 1 } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t// TODO: check about role and a11y.\n\t\t\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ size }\n\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\nfunction FieldsVisibilityMenu( { view, onChangeView, fields } ) {\n\tconst hidableFields = fields.filter(\n\t\t( field ) => field.enableHiding !== false\n\t);\n\tif ( ! hidableFields?.length ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={ <Icon icon={ chevronRightSmall } /> }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Fields' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ hidableFields?.map( ( field ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t! view.hiddenFields?.includes( field.id ) && (\n\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\thiddenFields: view.hiddenFields?.includes(\n\t\t\t\t\t\t\t\t\tfield.id\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t? view.hiddenFields.filter(\n\t\t\t\t\t\t\t\t\t\t\t( id ) => id !== field.id\n\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t: [ ...view.hiddenFields, field.id ],\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ field.header }\n\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\n// This object is used to construct the sorting options per sortable field.\nconst sortingItemsInfo = {\n\tasc: { icon: arrowUp, label: __( 'Sort ascending' ) },\n\tdesc: { icon: arrowDown, label: __( 'Sort descending' ) },\n};\nfunction SortMenu( { fields, view, onChangeView } ) {\n\tconst sortableFields = fields.filter(\n\t\t( field ) => field.enableSorting !== false\n\t);\n\tif ( ! sortableFields?.length ) {\n\t\treturn null;\n\t}\n\tconst currentSortedField = fields.find(\n\t\t( field ) => field.id === view.sort?.field\n\t);\n\treturn (\n\t\t<DropdownSubMenuV2\n\t\t\ttrigger={\n\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ currentSortedField?.header }\n\t\t\t\t\t\t\t<Icon icon={ chevronRightSmall } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Sort by' ) }\n\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t}\n\t\t>\n\t\t\t{ sortableFields?.map( ( field ) => {\n\t\t\t\tconst sortedDirection = view.sort?.direction;\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownSubMenuV2\n\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<DropdownSubMenuTriggerV2\n\t\t\t\t\t\t\t\tsuffix={ <Icon icon={ chevronRightSmall } /> }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ field.header }\n\t\t\t\t\t\t\t</DropdownSubMenuTriggerV2>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tside=\"left\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ Object.entries( sortingItemsInfo ).map(\n\t\t\t\t\t\t\t( [ direction, info ] ) => {\n\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\tcurrentSortedField &&\n\t\t\t\t\t\t\t\t\tsortedDirection === direction &&\n\t\t\t\t\t\t\t\t\tfield.id === currentSortedField.id;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DropdownMenuItemV2\n\t\t\t\t\t\t\t\t\t\tkey={ direction }\n\t\t\t\t\t\t\t\t\t\tprefix={ <Icon icon={ info.icon } /> }\n\t\t\t\t\t\t\t\t\t\tsuffix={\n\t\t\t\t\t\t\t\t\t\t\tisActive && <Icon icon={ check } />\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonSelect={ ( event ) => {\n\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\tsortedDirection === direction\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort: undefined,\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} else {\n\t\t\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfield: field.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdirection,\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\t\t{ info.label }\n\t\t\t\t\t\t\t\t\t</DropdownMenuItemV2>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DropdownSubMenuV2>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownSubMenuV2>\n\t);\n}\n\nexport default function ViewActions( { fields, view, onChangeView } ) {\n\treturn (\n\t\t<DropdownMenuV2\n\t\t\tlabel={ __( 'Actions' ) }\n\t\t\ttrigger={\n\t\t\t\t<Button variant=\"tertiary\" icon={ blockTable }>\n\t\t\t\t\t{ __( 'View' ) }\n\t\t\t\t\t<Icon icon={ chevronDown } />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t>\n\t\t\t<DropdownMenuGroupV2>\n\t\t\t\t<ViewTypeMenu view={ view } onChangeView={ onChangeView } />\n\t\t\t\t<SortMenu\n\t\t\t\t\tfields={ fields }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t/>\n\t\t\t\t<FieldsVisibilityMenu\n\t\t\t\t\tfields={ fields }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t/>\n\t\t\t\t<PageSizeMenu view={ view } onChangeView={ onChangeView } />\n\t\t\t</DropdownMenuGroupV2>\n\t\t</DropdownMenuV2>\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { __experimentalGrid as Grid, __experimentalHStack as HStack, __experimentalVStack as VStack, FlexBlock, Placeholder } from '@wordpress/components';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import ItemActions from './item-actions';
11
+ export function ViewGrid({
12
+ data,
13
+ fields,
14
+ view,
15
+ actions
16
+ }) {
17
+ const mediaField = fields.find(field => field.id === view.layout.mediaField);
18
+ const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && field.id !== view.layout.mediaField);
19
+ return createElement(Grid, {
20
+ gap: 8,
21
+ columns: 2,
22
+ alignment: "top"
23
+ }, data.map((item, index) => {
24
+ return createElement(VStack, {
25
+ key: index
26
+ }, createElement("div", {
27
+ className: "dataviews-view-grid__media"
28
+ }, mediaField?.render({
29
+ item,
30
+ view
31
+ }) || createElement(Placeholder, {
32
+ withIllustration: true,
33
+ style: {
34
+ width: '100%',
35
+ minHeight: '200px'
36
+ }
37
+ })), createElement(HStack, {
38
+ justify: "space-between",
39
+ alignment: "top"
40
+ }, createElement(FlexBlock, null, createElement(VStack, null, visibleFields.map(field => createElement("div", {
41
+ key: field.id
42
+ }, field.render({
43
+ item,
44
+ view
45
+ }))))), createElement(FlexBlock, null, createElement(ItemActions, {
46
+ item: item,
47
+ actions: actions
48
+ }))));
49
+ }));
50
+ }
51
+ //# sourceMappingURL=view-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__experimentalGrid","Grid","__experimentalHStack","HStack","__experimentalVStack","VStack","FlexBlock","Placeholder","ItemActions","ViewGrid","data","fields","view","actions","mediaField","find","field","id","layout","visibleFields","filter","hiddenFields","includes","createElement","gap","columns","alignment","map","item","index","key","className","render","withIllustration","style","width","minHeight","justify"],"sources":["@wordpress/edit-site/src/components/dataviews/view-grid.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tFlexBlock,\n\tPlaceholder,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\n\nexport function ViewGrid( { data, fields, view, actions } ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\tfield.id !== view.layout.mediaField\n\t);\n\treturn (\n\t\t<Grid gap={ 8 } columns={ 2 } alignment=\"top\">\n\t\t\t{ data.map( ( item, index ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<VStack key={ index }>\n\t\t\t\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t\t\t\t{ mediaField?.render( { item, view } ) || (\n\t\t\t\t\t\t\t\t<Placeholder\n\t\t\t\t\t\t\t\t\twithIllustration\n\t\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t\tminHeight: '200px',\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<HStack justify=\"space-between\" alignment=\"top\">\n\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t<VStack>\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 key={ field.id }>\n\t\t\t\t\t\t\t\t\t\t\t{ field.render( { item, view } ) }\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</VStack>\n\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t<ItemActions\n\t\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</VStack>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Grid>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,kBAAkB,IAAIC,IAAI,EAC1BC,oBAAoB,IAAIC,MAAM,EAC9BC,oBAAoB,IAAIC,MAAM,EAC9BC,SAAS,EACTC,WAAW,QACL,uBAAuB;;AAE9B;AACA;AACA;AACA,OAAOC,WAAW,MAAM,gBAAgB;AAExC,OAAO,SAASC,QAAQA,CAAE;EAAEC,IAAI;EAAEC,MAAM;EAAEC,IAAI;EAAEC;AAAQ,CAAC,EAAG;EAC3D,MAAMC,UAAU,GAAGH,MAAM,CAACI,IAAI,CAC3BC,KAAK,IAAMA,KAAK,CAACC,EAAE,KAAKL,IAAI,CAACM,MAAM,CAACJ,UACvC,CAAC;EACD,MAAMK,aAAa,GAAGR,MAAM,CAACS,MAAM,CAChCJ,KAAK,IACN,CAAEJ,IAAI,CAACS,YAAY,CAACC,QAAQ,CAAEN,KAAK,CAACC,EAAG,CAAC,IACxCD,KAAK,CAACC,EAAE,KAAKL,IAAI,CAACM,MAAM,CAACJ,UAC3B,CAAC;EACD,OACCS,aAAA,CAACtB,IAAI;IAACuB,GAAG,EAAG,CAAG;IAACC,OAAO,EAAG,CAAG;IAACC,SAAS,EAAC;EAAK,GAC1ChB,IAAI,CAACiB,GAAG,CAAE,CAAEC,IAAI,EAAEC,KAAK,KAAM;IAC9B,OACCN,aAAA,CAAClB,MAAM;MAACyB,GAAG,EAAGD;IAAO,GACpBN,aAAA;MAAKQ,SAAS,EAAC;IAA4B,GACxCjB,UAAU,EAAEkB,MAAM,CAAE;MAAEJ,IAAI;MAAEhB;IAAK,CAAE,CAAC,IACrCW,aAAA,CAAChB,WAAW;MACX0B,gBAAgB;MAChBC,KAAK,EAAG;QACPC,KAAK,EAAE,MAAM;QACbC,SAAS,EAAE;MACZ;IAAG,CACH,CAEE,CAAC,EAENb,aAAA,CAACpB,MAAM;MAACkC,OAAO,EAAC,eAAe;MAACX,SAAS,EAAC;IAAK,GAC9CH,aAAA,CAACjB,SAAS,QACTiB,aAAA,CAAClB,MAAM,QACJc,aAAa,CAACQ,GAAG,CAAIX,KAAK,IAC3BO,aAAA;MAAKO,GAAG,EAAGd,KAAK,CAACC;IAAI,GAClBD,KAAK,CAACgB,MAAM,CAAE;MAAEJ,IAAI;MAAEhB;IAAK,CAAE,CAC3B,CACJ,CACK,CACE,CAAC,EACZW,aAAA,CAACjB,SAAS,QACTiB,aAAA,CAACf,WAAW;MACXoB,IAAI,EAAGA,IAAM;MACbf,OAAO,EAAGA;IAAS,CACnB,CACS,CACJ,CACD,CAAC;EAEX,CAAE,CACG,CAAC;AAET"}
@@ -0,0 +1,274 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * External dependencies
4
+ */
5
+ import { getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, useReactTable, flexRender } from '@tanstack/react-table';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { __ } from '@wordpress/i18n';
11
+ import { chevronDown, chevronUp, unseen, check, arrowUp, arrowDown } from '@wordpress/icons';
12
+ import { Button, Icon, privateApis as componentsPrivateApis, VisuallyHidden } from '@wordpress/components';
13
+ import { useMemo, Children, Fragment } from '@wordpress/element';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import { unlock } from '../../lock-unlock';
19
+ import ItemActions from './item-actions';
20
+ const {
21
+ DropdownMenuV2,
22
+ DropdownMenuGroupV2,
23
+ DropdownMenuItemV2,
24
+ DropdownMenuSeparatorV2
25
+ } = unlock(componentsPrivateApis);
26
+ const EMPTY_OBJECT = {};
27
+ const sortingItemsInfo = {
28
+ asc: {
29
+ icon: arrowUp,
30
+ label: __('Sort ascending')
31
+ },
32
+ desc: {
33
+ icon: arrowDown,
34
+ label: __('Sort descending')
35
+ }
36
+ };
37
+ const sortIcons = {
38
+ asc: chevronUp,
39
+ desc: chevronDown
40
+ };
41
+ function HeaderMenu({
42
+ dataView,
43
+ header
44
+ }) {
45
+ if (header.isPlaceholder) {
46
+ return null;
47
+ }
48
+ const text = flexRender(header.column.columnDef.header, header.getContext());
49
+ const isSortable = !!header.column.getCanSort();
50
+ const isHidable = !!header.column.getCanHide();
51
+ if (!isSortable && !isHidable) {
52
+ return text;
53
+ }
54
+ const sortedDirection = header.column.getIsSorted();
55
+ return createElement(DropdownMenuV2, {
56
+ align: "start",
57
+ trigger: createElement(Button, {
58
+ icon: sortIcons[header.column.getIsSorted()],
59
+ iconPosition: "right",
60
+ text: text,
61
+ style: {
62
+ padding: 0
63
+ }
64
+ })
65
+ }, createElement(WithSeparators, null, isSortable && createElement(DropdownMenuGroupV2, null, Object.entries(sortingItemsInfo).map(([direction, info]) => createElement(DropdownMenuItemV2, {
66
+ key: direction,
67
+ prefix: createElement(Icon, {
68
+ icon: info.icon
69
+ }),
70
+ suffix: sortedDirection === direction && createElement(Icon, {
71
+ icon: check
72
+ }),
73
+ onSelect: event => {
74
+ event.preventDefault();
75
+ if (sortedDirection === direction) {
76
+ dataView.resetSorting();
77
+ } else {
78
+ dataView.setSorting([{
79
+ id: header.column.id,
80
+ desc: direction === 'desc'
81
+ }]);
82
+ }
83
+ }
84
+ }, info.label))), isHidable && createElement(DropdownMenuItemV2, {
85
+ prefix: createElement(Icon, {
86
+ icon: unseen
87
+ }),
88
+ onSelect: event => {
89
+ event.preventDefault();
90
+ header.column.getToggleVisibilityHandler()(event);
91
+ }
92
+ }, __('Hide'))));
93
+ }
94
+ function WithSeparators({
95
+ children
96
+ }) {
97
+ return Children.toArray(children).filter(Boolean).map((child, i) => createElement(Fragment, {
98
+ key: i
99
+ }, i > 0 && createElement(DropdownMenuSeparatorV2, null), child));
100
+ }
101
+ function ViewList({
102
+ view,
103
+ onChangeView,
104
+ fields,
105
+ actions,
106
+ data,
107
+ isLoading = false,
108
+ paginationInfo
109
+ }) {
110
+ const columns = useMemo(() => {
111
+ const _columns = fields.map(field => {
112
+ const {
113
+ render,
114
+ getValue,
115
+ ...column
116
+ } = field;
117
+ column.cell = props => render({
118
+ item: props.row.original,
119
+ view
120
+ });
121
+ if (getValue) {
122
+ column.accessorFn = item => getValue({
123
+ item
124
+ });
125
+ }
126
+ return column;
127
+ });
128
+ if (actions?.length) {
129
+ _columns.push({
130
+ header: createElement(VisuallyHidden, null, __('Actions')),
131
+ id: 'actions',
132
+ cell: props => {
133
+ return createElement(ItemActions, {
134
+ item: props.row.original,
135
+ actions: actions
136
+ });
137
+ },
138
+ enableHiding: false
139
+ });
140
+ }
141
+ return _columns;
142
+ }, [fields, actions, view]);
143
+ const columnVisibility = useMemo(() => {
144
+ if (!view.hiddenFields?.length) {
145
+ return;
146
+ }
147
+ return view.hiddenFields.reduce((accumulator, fieldId) => ({
148
+ ...accumulator,
149
+ [fieldId]: false
150
+ }), {});
151
+ }, [view.hiddenFields]);
152
+ const dataView = useReactTable({
153
+ data,
154
+ columns,
155
+ manualSorting: true,
156
+ manualFiltering: true,
157
+ manualPagination: true,
158
+ enableRowSelection: true,
159
+ state: {
160
+ sorting: view.sort ? [{
161
+ id: view.sort.field,
162
+ desc: view.sort.direction === 'desc'
163
+ }] : [],
164
+ globalFilter: view.search,
165
+ pagination: {
166
+ pageIndex: view.page,
167
+ pageSize: view.perPage
168
+ },
169
+ columnVisibility: columnVisibility !== null && columnVisibility !== void 0 ? columnVisibility : EMPTY_OBJECT
170
+ },
171
+ onSortingChange: sortingUpdater => {
172
+ onChangeView(currentView => {
173
+ const sort = typeof sortingUpdater === 'function' ? sortingUpdater(currentView.sort ? [{
174
+ id: currentView.sort.field,
175
+ desc: currentView.sort.direction === 'desc'
176
+ }] : []) : sortingUpdater;
177
+ if (!sort.length) {
178
+ return {
179
+ ...currentView,
180
+ sort: {}
181
+ };
182
+ }
183
+ const [{
184
+ id,
185
+ desc
186
+ }] = sort;
187
+ return {
188
+ ...currentView,
189
+ sort: {
190
+ field: id,
191
+ direction: desc ? 'desc' : 'asc'
192
+ }
193
+ };
194
+ });
195
+ },
196
+ onColumnVisibilityChange: columnVisibilityUpdater => {
197
+ onChangeView(currentView => {
198
+ const hiddenFields = Object.entries(columnVisibilityUpdater()).reduce((accumulator, [fieldId, value]) => {
199
+ if (value) {
200
+ return accumulator.filter(id => id !== fieldId);
201
+ }
202
+ return [...accumulator, fieldId];
203
+ }, [...(currentView.hiddenFields || [])]);
204
+ return {
205
+ ...currentView,
206
+ hiddenFields
207
+ };
208
+ });
209
+ },
210
+ onGlobalFilterChange: value => {
211
+ onChangeView({
212
+ ...view,
213
+ search: value,
214
+ page: 0
215
+ });
216
+ },
217
+ onPaginationChange: paginationUpdater => {
218
+ onChangeView(currentView => {
219
+ const {
220
+ pageIndex,
221
+ pageSize
222
+ } = paginationUpdater({
223
+ pageIndex: currentView.page,
224
+ pageSize: currentView.perPage
225
+ });
226
+ return {
227
+ ...view,
228
+ page: pageIndex,
229
+ perPage: pageSize
230
+ };
231
+ });
232
+ },
233
+ getCoreRowModel: getCoreRowModel(),
234
+ getFilteredRowModel: getFilteredRowModel(),
235
+ getSortedRowModel: getSortedRowModel(),
236
+ getPaginationRowModel: getPaginationRowModel(),
237
+ pageCount: paginationInfo.totalPages
238
+ });
239
+ const {
240
+ rows
241
+ } = dataView.getRowModel();
242
+ const hasRows = !!rows?.length;
243
+ if (isLoading) {
244
+ // TODO:Add spinner or progress bar..
245
+ return createElement("h3", null, __('Loading'));
246
+ }
247
+ return createElement("div", {
248
+ className: "dataviews-list-view-wrapper"
249
+ }, hasRows && createElement("table", {
250
+ className: "dataviews-list-view"
251
+ }, createElement("thead", null, dataView.getHeaderGroups().map(headerGroup => createElement("tr", {
252
+ key: headerGroup.id
253
+ }, headerGroup.headers.map(header => createElement("th", {
254
+ key: header.id,
255
+ colSpan: header.colSpan,
256
+ style: {
257
+ width: header.column.columnDef.width || undefined,
258
+ maxWidth: header.column.columnDef.maxWidth || undefined
259
+ }
260
+ }, createElement(HeaderMenu, {
261
+ dataView: dataView,
262
+ header: header
263
+ })))))), createElement("tbody", null, rows.map(row => createElement("tr", {
264
+ key: row.id
265
+ }, row.getVisibleCells().map(cell => createElement("td", {
266
+ key: cell.id,
267
+ style: {
268
+ width: cell.column.columnDef.width || undefined,
269
+ maxWidth: cell.column.columnDef.maxWidth || undefined
270
+ }
271
+ }, flexRender(cell.column.columnDef.cell, cell.getContext()))))))), !hasRows && createElement("p", null, __('no results')));
272
+ }
273
+ export default ViewList;
274
+ //# sourceMappingURL=view-list.js.map