@wordpress/edit-site 5.22.0 → 5.24.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 (524) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/actions/index.js +115 -15
  3. package/build/components/actions/index.js.map +1 -1
  4. package/build/components/add-new-template/new-template.js +0 -7
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/block-editor/site-editor-canvas.js +7 -2
  7. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  8. package/build/components/block-editor/use-site-editor-settings.js +54 -63
  9. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  10. package/build/components/dataviews/add-filter.js +91 -0
  11. package/build/components/dataviews/add-filter.js.map +1 -0
  12. package/build/components/dataviews/constants.js +14 -0
  13. package/build/components/dataviews/constants.js.map +1 -0
  14. package/build/components/dataviews/dataviews.js +30 -9
  15. package/build/components/dataviews/dataviews.js.map +1 -1
  16. package/build/components/dataviews/filter-summary.js +62 -0
  17. package/build/components/dataviews/filter-summary.js.map +1 -0
  18. package/build/components/dataviews/filters.js +37 -48
  19. package/build/components/dataviews/filters.js.map +1 -1
  20. package/build/components/dataviews/index.js +9 -2
  21. package/build/components/dataviews/index.js.map +1 -1
  22. package/build/components/dataviews/item-actions.js +139 -17
  23. package/build/components/dataviews/item-actions.js.map +1 -1
  24. package/build/components/dataviews/pagination.js +7 -2
  25. package/build/components/dataviews/pagination.js.map +1 -1
  26. package/build/components/dataviews/reset-filters.js +33 -0
  27. package/build/components/dataviews/reset-filters.js.map +1 -0
  28. package/build/components/dataviews/search.js +1 -0
  29. package/build/components/dataviews/search.js.map +1 -1
  30. package/build/components/dataviews/view-actions.js +49 -32
  31. package/build/components/dataviews/view-actions.js.map +1 -1
  32. package/build/components/dataviews/view-grid.js +48 -25
  33. package/build/components/dataviews/view-grid.js.map +1 -1
  34. package/build/components/dataviews/view-list.js +130 -14
  35. package/build/components/dataviews/view-list.js.map +1 -1
  36. package/build/components/dataviews/view-side-by-side.js +20 -0
  37. package/build/components/dataviews/view-side-by-side.js.map +1 -0
  38. package/build/components/editor/index.js +52 -56
  39. package/build/components/editor/index.js.map +1 -1
  40. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  41. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  42. package/build/components/global-styles/font-library-modal/utils/index.js +15 -2
  43. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  44. package/build/components/global-styles/header.js +4 -2
  45. package/build/components/global-styles/header.js.map +1 -1
  46. package/build/components/global-styles/screen-block-list.js +22 -16
  47. package/build/components/global-styles/screen-block-list.js.map +1 -1
  48. package/build/components/global-styles/screen-revisions/index.js +66 -24
  49. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  50. package/build/components/global-styles/screen-revisions/revisions-buttons.js +52 -24
  51. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  52. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  53. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  54. package/build/components/global-styles/screen-root.js +3 -3
  55. package/build/components/global-styles/screen-root.js.map +1 -1
  56. package/build/components/global-styles/ui.js +31 -39
  57. package/build/components/global-styles/ui.js.map +1 -1
  58. package/build/components/global-styles-renderer/index.js +1 -1
  59. package/build/components/global-styles-renderer/index.js.map +1 -1
  60. package/build/components/header-edit-mode/document-actions/index.js +21 -16
  61. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  62. package/build/components/header-edit-mode/document-tools/index.js +160 -0
  63. package/build/components/header-edit-mode/document-tools/index.js.map +1 -0
  64. package/build/components/header-edit-mode/index.js +50 -117
  65. package/build/components/header-edit-mode/index.js.map +1 -1
  66. package/build/components/header-edit-mode/more-menu/index.js +1 -1
  67. package/build/components/header-edit-mode/more-menu/index.js.map +1 -1
  68. package/build/components/header-edit-mode/more-menu/site-export.js +2 -6
  69. package/build/components/header-edit-mode/more-menu/site-export.js.map +1 -1
  70. package/build/components/layout/index.js +4 -19
  71. package/build/components/layout/index.js.map +1 -1
  72. package/build/components/list/added-by.js +44 -54
  73. package/build/components/list/added-by.js.map +1 -1
  74. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +11 -15
  75. package/build/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  76. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  77. package/build/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  78. package/build/components/page-content-focus-notifications/index.js +22 -0
  79. package/build/components/page-content-focus-notifications/index.js.map +1 -0
  80. package/build/components/page-main/index.js +2 -1
  81. package/build/components/page-main/index.js.map +1 -1
  82. package/build/components/page-pages/index.js +137 -88
  83. package/build/components/page-pages/index.js.map +1 -1
  84. package/build/components/page-pages/side-editor.js +25 -0
  85. package/build/components/page-pages/side-editor.js.map +1 -0
  86. package/build/components/page-patterns/grid-item.js +2 -2
  87. package/build/components/page-patterns/grid-item.js.map +1 -1
  88. package/build/components/page-patterns/patterns-list.js +3 -3
  89. package/build/components/page-patterns/patterns-list.js.map +1 -1
  90. package/build/components/page-patterns/use-patterns.js +2 -2
  91. package/build/components/page-patterns/use-patterns.js.map +1 -1
  92. package/build/components/page-templates/dataviews-templates.js +316 -0
  93. package/build/components/page-templates/dataviews-templates.js.map +1 -0
  94. package/build/components/page-templates/template-actions.js +168 -0
  95. package/build/components/page-templates/template-actions.js.map +1 -0
  96. package/build/components/preferences-modal/index.js +1 -1
  97. package/build/components/preferences-modal/index.js.map +1 -1
  98. package/build/components/save-button/index.js +9 -6
  99. package/build/components/save-button/index.js.map +1 -1
  100. package/build/components/save-hub/index.js +14 -0
  101. package/build/components/save-hub/index.js.map +1 -1
  102. package/build/components/sidebar/index.js +1 -2
  103. package/build/components/sidebar/index.js.map +1 -1
  104. package/build/components/sidebar-dataviews/add-new-view.js +124 -0
  105. package/build/components/sidebar-dataviews/add-new-view.js.map +1 -0
  106. package/build/components/sidebar-dataviews/custom-dataviews-list.js +191 -0
  107. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -0
  108. package/build/components/sidebar-dataviews/dataview-item.js +71 -0
  109. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -0
  110. package/build/components/sidebar-dataviews/default-views.js +65 -0
  111. package/build/components/sidebar-dataviews/default-views.js.map +1 -0
  112. package/build/components/sidebar-dataviews/index.js +21 -38
  113. package/build/components/sidebar-dataviews/index.js.map +1 -1
  114. package/build/components/sidebar-edit-mode/default-sidebar.js +2 -6
  115. package/build/components/sidebar-edit-mode/default-sidebar.js.map +1 -1
  116. package/build/components/sidebar-edit-mode/index.js +6 -5
  117. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  118. package/build/components/sidebar-edit-mode/page-panels/edit-template.js +18 -29
  119. package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  120. package/build/components/sidebar-edit-mode/page-panels/hooks.js +22 -8
  121. package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  122. package/build/components/sidebar-edit-mode/page-panels/page-status.js +8 -5
  123. package/build/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  124. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +5 -8
  125. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  126. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +6 -14
  127. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  128. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js +4 -12
  129. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -1
  130. package/build/components/sidebar-edit-mode/plugin-sidebar/index.js +2 -6
  131. package/build/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -1
  132. package/build/components/sidebar-edit-mode/settings-header/index.js +10 -6
  133. package/build/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  134. package/build/components/sidebar-edit-mode/template-panel/hooks.js +3 -3
  135. package/build/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -1
  136. package/build/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  137. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  139. package/build/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-page/index.js +23 -4
  141. package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
  142. package/build/components/sidebar-navigation-screen-page/page-details.js +3 -11
  143. package/build/components/sidebar-navigation-screen-page/page-details.js.map +1 -1
  144. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +1 -1
  145. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  146. package/build/components/site-hub/index.js +18 -6
  147. package/build/components/site-hub/index.js.map +1 -1
  148. package/build/components/start-template-options/index.js +12 -16
  149. package/build/components/start-template-options/index.js.map +1 -1
  150. package/build/components/style-book/index.js +22 -12
  151. package/build/components/style-book/index.js.map +1 -1
  152. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +150 -55
  153. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  154. package/build/components/template-part-converter/convert-to-regular.js +1 -1
  155. package/build/components/template-part-converter/convert-to-regular.js.map +1 -1
  156. package/build/components/welcome-guide/page.js +2 -2
  157. package/build/components/welcome-guide/page.js.map +1 -1
  158. package/build/components/welcome-guide/template.js +6 -3
  159. package/build/components/welcome-guide/template.js.map +1 -1
  160. package/build/hooks/commands/use-edit-mode-commands.js +24 -14
  161. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  162. package/build/hooks/push-changes-to-global-styles/index.js +3 -1
  163. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  164. package/build/hooks/template-part-edit.js +6 -2
  165. package/build/hooks/template-part-edit.js.map +1 -1
  166. package/build/index.js +0 -3
  167. package/build/index.js.map +1 -1
  168. package/build/store/actions.js +39 -83
  169. package/build/store/actions.js.map +1 -1
  170. package/build/store/private-actions.js +2 -27
  171. package/build/store/private-actions.js.map +1 -1
  172. package/build/store/private-selectors.js +0 -23
  173. package/build/store/private-selectors.js.map +1 -1
  174. package/build/store/reducer.js +1 -40
  175. package/build/store/reducer.js.map +1 -1
  176. package/build/store/selectors.js +33 -67
  177. package/build/store/selectors.js.map +1 -1
  178. package/build/utils/constants.js +3 -14
  179. package/build/utils/constants.js.map +1 -1
  180. package/build-module/components/actions/index.js +113 -14
  181. package/build-module/components/actions/index.js.map +1 -1
  182. package/build-module/components/add-new-template/new-template.js +0 -7
  183. package/build-module/components/add-new-template/new-template.js.map +1 -1
  184. package/build-module/components/block-editor/site-editor-canvas.js +7 -2
  185. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  186. package/build-module/components/block-editor/use-site-editor-settings.js +54 -62
  187. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  188. package/build-module/components/dataviews/add-filter.js +84 -0
  189. package/build-module/components/dataviews/add-filter.js.map +1 -0
  190. package/build-module/components/dataviews/constants.js +6 -0
  191. package/build-module/components/dataviews/constants.js.map +1 -0
  192. package/build-module/components/dataviews/dataviews.js +29 -9
  193. package/build-module/components/dataviews/dataviews.js.map +1 -1
  194. package/build-module/components/dataviews/filter-summary.js +55 -0
  195. package/build-module/components/dataviews/filter-summary.js.map +1 -0
  196. package/build-module/components/dataviews/filters.js +37 -48
  197. package/build-module/components/dataviews/filters.js.map +1 -1
  198. package/build-module/components/dataviews/index.js +1 -1
  199. package/build-module/components/dataviews/index.js.map +1 -1
  200. package/build-module/components/dataviews/item-actions.js +142 -20
  201. package/build-module/components/dataviews/item-actions.js.map +1 -1
  202. package/build-module/components/dataviews/pagination.js +7 -2
  203. package/build-module/components/dataviews/pagination.js.map +1 -1
  204. package/build-module/components/dataviews/reset-filters.js +26 -0
  205. package/build-module/components/dataviews/reset-filters.js.map +1 -0
  206. package/build-module/components/dataviews/search.js +1 -0
  207. package/build-module/components/dataviews/search.js.map +1 -1
  208. package/build-module/components/dataviews/view-actions.js +50 -33
  209. package/build-module/components/dataviews/view-actions.js.map +1 -1
  210. package/build-module/components/dataviews/view-grid.js +49 -26
  211. package/build-module/components/dataviews/view-grid.js.map +1 -1
  212. package/build-module/components/dataviews/view-list.js +132 -16
  213. package/build-module/components/dataviews/view-list.js.map +1 -1
  214. package/build-module/components/dataviews/view-side-by-side.js +12 -0
  215. package/build-module/components/dataviews/view-side-by-side.js.map +1 -0
  216. package/build-module/components/editor/index.js +55 -59
  217. package/build-module/components/editor/index.js.map +1 -1
  218. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  219. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  220. package/build-module/components/global-styles/font-library-modal/utils/index.js +14 -2
  221. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  222. package/build-module/components/global-styles/header.js +4 -2
  223. package/build-module/components/global-styles/header.js.map +1 -1
  224. package/build-module/components/global-styles/screen-block-list.js +23 -17
  225. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  226. package/build-module/components/global-styles/screen-revisions/index.js +67 -25
  227. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  228. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +51 -24
  229. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  230. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  231. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  232. package/build-module/components/global-styles/screen-root.js +3 -3
  233. package/build-module/components/global-styles/screen-root.js.map +1 -1
  234. package/build-module/components/global-styles/ui.js +31 -39
  235. package/build-module/components/global-styles/ui.js.map +1 -1
  236. package/build-module/components/global-styles-renderer/index.js +1 -1
  237. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  238. package/build-module/components/header-edit-mode/document-actions/index.js +21 -16
  239. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  240. package/build-module/components/header-edit-mode/document-tools/index.js +152 -0
  241. package/build-module/components/header-edit-mode/document-tools/index.js.map +1 -0
  242. package/build-module/components/header-edit-mode/index.js +54 -121
  243. package/build-module/components/header-edit-mode/index.js.map +1 -1
  244. package/build-module/components/header-edit-mode/more-menu/index.js +1 -1
  245. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -1
  246. package/build-module/components/header-edit-mode/more-menu/site-export.js +2 -6
  247. package/build-module/components/header-edit-mode/more-menu/site-export.js.map +1 -1
  248. package/build-module/components/layout/index.js +5 -20
  249. package/build-module/components/layout/index.js.map +1 -1
  250. package/build-module/components/list/added-by.js +45 -56
  251. package/build-module/components/list/added-by.js.map +1 -1
  252. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +11 -15
  253. package/build-module/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  254. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  255. package/build-module/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  256. package/build-module/components/page-content-focus-notifications/index.js +14 -0
  257. package/build-module/components/page-content-focus-notifications/index.js.map +1 -0
  258. package/build-module/components/page-main/index.js +2 -1
  259. package/build-module/components/page-main/index.js.map +1 -1
  260. package/build-module/components/page-pages/index.js +141 -90
  261. package/build-module/components/page-pages/index.js.map +1 -1
  262. package/build-module/components/page-pages/side-editor.js +17 -0
  263. package/build-module/components/page-pages/side-editor.js.map +1 -0
  264. package/build-module/components/page-patterns/grid-item.js +2 -2
  265. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  266. package/build-module/components/page-patterns/patterns-list.js +4 -4
  267. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  268. package/build-module/components/page-patterns/use-patterns.js +3 -3
  269. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  270. package/build-module/components/page-templates/dataviews-templates.js +308 -0
  271. package/build-module/components/page-templates/dataviews-templates.js.map +1 -0
  272. package/build-module/components/page-templates/template-actions.js +157 -0
  273. package/build-module/components/page-templates/template-actions.js.map +1 -0
  274. package/build-module/components/preferences-modal/index.js +1 -1
  275. package/build-module/components/preferences-modal/index.js.map +1 -1
  276. package/build-module/components/save-button/index.js +11 -8
  277. package/build-module/components/save-button/index.js.map +1 -1
  278. package/build-module/components/save-hub/index.js +14 -0
  279. package/build-module/components/save-hub/index.js.map +1 -1
  280. package/build-module/components/sidebar/index.js +1 -2
  281. package/build-module/components/sidebar/index.js.map +1 -1
  282. package/build-module/components/sidebar-dataviews/add-new-view.js +116 -0
  283. package/build-module/components/sidebar-dataviews/add-new-view.js.map +1 -0
  284. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +182 -0
  285. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -0
  286. package/build-module/components/sidebar-dataviews/dataview-item.js +63 -0
  287. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -0
  288. package/build-module/components/sidebar-dataviews/default-views.js +57 -0
  289. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -0
  290. package/build-module/components/sidebar-dataviews/index.js +22 -39
  291. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  292. package/build-module/components/sidebar-edit-mode/default-sidebar.js +2 -6
  293. package/build-module/components/sidebar-edit-mode/default-sidebar.js.map +1 -1
  294. package/build-module/components/sidebar-edit-mode/index.js +6 -5
  295. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  296. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +20 -31
  297. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  298. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +21 -7
  299. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  300. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js +9 -6
  301. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  302. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +6 -8
  303. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  304. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +8 -16
  305. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  306. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js +5 -13
  307. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -1
  308. package/build-module/components/sidebar-edit-mode/plugin-sidebar/index.js +2 -6
  309. package/build-module/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -1
  310. package/build-module/components/sidebar-edit-mode/settings-header/index.js +10 -6
  311. package/build-module/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  312. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js +4 -4
  313. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -1
  314. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  315. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  316. package/build-module/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  317. package/build-module/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js.map +1 -1
  318. package/build-module/components/sidebar-navigation-screen-page/index.js +23 -4
  319. package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
  320. package/build-module/components/sidebar-navigation-screen-page/page-details.js +3 -11
  321. package/build-module/components/sidebar-navigation-screen-page/page-details.js.map +1 -1
  322. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -2
  323. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  324. package/build-module/components/site-hub/index.js +19 -7
  325. package/build-module/components/site-hub/index.js.map +1 -1
  326. package/build-module/components/start-template-options/index.js +13 -16
  327. package/build-module/components/start-template-options/index.js.map +1 -1
  328. package/build-module/components/style-book/index.js +22 -12
  329. package/build-module/components/style-book/index.js.map +1 -1
  330. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +150 -56
  331. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  332. package/build-module/components/template-part-converter/convert-to-regular.js +1 -1
  333. package/build-module/components/template-part-converter/convert-to-regular.js.map +1 -1
  334. package/build-module/components/welcome-guide/page.js +2 -2
  335. package/build-module/components/welcome-guide/page.js.map +1 -1
  336. package/build-module/components/welcome-guide/template.js +6 -3
  337. package/build-module/components/welcome-guide/template.js.map +1 -1
  338. package/build-module/hooks/commands/use-edit-mode-commands.js +24 -14
  339. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  340. package/build-module/hooks/push-changes-to-global-styles/index.js +4 -2
  341. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  342. package/build-module/hooks/template-part-edit.js +6 -2
  343. package/build-module/hooks/template-part-edit.js.map +1 -1
  344. package/build-module/index.js +0 -3
  345. package/build-module/index.js.map +1 -1
  346. package/build-module/store/actions.js +37 -80
  347. package/build-module/store/actions.js.map +1 -1
  348. package/build-module/store/private-actions.js +1 -25
  349. package/build-module/store/private-actions.js.map +1 -1
  350. package/build-module/store/private-selectors.js +0 -22
  351. package/build-module/store/private-selectors.js.map +1 -1
  352. package/build-module/store/reducer.js +1 -38
  353. package/build-module/store/reducer.js.map +1 -1
  354. package/build-module/store/selectors.js +27 -62
  355. package/build-module/store/selectors.js.map +1 -1
  356. package/build-module/utils/constants.js +1 -11
  357. package/build-module/utils/constants.js.map +1 -1
  358. package/build-style/style-rtl.css +221 -181
  359. package/build-style/style.css +221 -181
  360. package/package.json +41 -41
  361. package/src/components/actions/index.js +150 -14
  362. package/src/components/add-new-template/new-template.js +0 -5
  363. package/src/components/block-editor/site-editor-canvas.js +8 -2
  364. package/src/components/block-editor/style.scss +0 -87
  365. package/src/components/block-editor/use-site-editor-settings.js +68 -89
  366. package/src/components/dataviews/README.md +80 -83
  367. package/src/components/dataviews/add-filter.js +108 -0
  368. package/src/components/dataviews/constants.js +5 -0
  369. package/src/components/dataviews/dataviews.js +28 -10
  370. package/src/components/dataviews/filter-summary.js +79 -0
  371. package/src/components/dataviews/filters.js +48 -58
  372. package/src/components/dataviews/index.js +1 -1
  373. package/src/components/dataviews/item-actions.js +169 -30
  374. package/src/components/dataviews/pagination.js +9 -4
  375. package/src/components/dataviews/reset-filters.js +26 -0
  376. package/src/components/dataviews/search.js +1 -0
  377. package/src/components/dataviews/style.scss +89 -9
  378. package/src/components/dataviews/view-actions.js +77 -49
  379. package/src/components/dataviews/view-grid.js +63 -38
  380. package/src/components/dataviews/view-list.js +182 -18
  381. package/src/components/dataviews/view-side-by-side.js +9 -0
  382. package/src/components/editor/index.js +135 -123
  383. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  384. package/src/components/global-styles/font-library-modal/utils/index.js +20 -9
  385. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +46 -15
  386. package/src/components/global-styles/font-library-modal/utils/test/wpKebabCase.spec.js +28 -0
  387. package/src/components/global-styles/header.js +2 -1
  388. package/src/components/global-styles/screen-block-list.js +37 -26
  389. package/src/components/global-styles/screen-revisions/index.js +91 -35
  390. package/src/components/global-styles/screen-revisions/revisions-buttons.js +65 -45
  391. package/src/components/global-styles/screen-revisions/style.scss +52 -28
  392. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -6
  393. package/src/components/global-styles/screen-root.js +2 -1
  394. package/src/components/global-styles/style.scss +0 -11
  395. package/src/components/global-styles/ui.js +60 -75
  396. package/src/components/global-styles-renderer/index.js +1 -1
  397. package/src/components/header-edit-mode/document-actions/index.js +20 -18
  398. package/src/components/header-edit-mode/document-tools/index.js +201 -0
  399. package/src/components/header-edit-mode/index.js +87 -184
  400. package/src/components/header-edit-mode/more-menu/index.js +1 -1
  401. package/src/components/header-edit-mode/more-menu/site-export.js +2 -6
  402. package/src/components/header-edit-mode/style.scss +35 -2
  403. package/src/components/layout/index.js +4 -11
  404. package/src/components/layout/style.scss +6 -18
  405. package/src/components/list/added-by.js +24 -64
  406. package/src/components/list/style.scss +11 -13
  407. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +10 -22
  408. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  409. package/src/components/page-content-focus-notifications/index.js +14 -0
  410. package/src/components/page-main/index.js +6 -1
  411. package/src/components/page-pages/index.js +167 -91
  412. package/src/components/page-pages/side-editor.js +14 -0
  413. package/src/components/page-patterns/grid-item.js +3 -3
  414. package/src/components/page-patterns/patterns-list.js +10 -4
  415. package/src/components/page-patterns/use-patterns.js +4 -3
  416. package/src/components/page-templates/dataviews-templates.js +345 -0
  417. package/src/components/page-templates/style.scss +13 -0
  418. package/src/components/page-templates/template-actions.js +209 -0
  419. package/src/components/preferences-modal/index.js +1 -1
  420. package/src/components/save-button/index.js +37 -24
  421. package/src/components/save-hub/index.js +15 -0
  422. package/src/components/save-hub/style.scss +7 -0
  423. package/src/components/sidebar/index.js +1 -2
  424. package/src/components/sidebar-dataviews/add-new-view.js +141 -0
  425. package/src/components/sidebar-dataviews/custom-dataviews-list.js +229 -0
  426. package/src/components/sidebar-dataviews/dataview-item.js +67 -0
  427. package/src/components/sidebar-dataviews/default-views.js +59 -0
  428. package/src/components/sidebar-dataviews/index.js +36 -45
  429. package/src/components/sidebar-dataviews/style.scss +29 -0
  430. package/src/components/sidebar-edit-mode/default-sidebar.js +6 -6
  431. package/src/components/sidebar-edit-mode/index.js +13 -9
  432. package/src/components/sidebar-edit-mode/page-panels/edit-template.js +31 -57
  433. package/src/components/sidebar-edit-mode/page-panels/hooks.js +20 -9
  434. package/src/components/sidebar-edit-mode/page-panels/page-status.js +6 -6
  435. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +10 -8
  436. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +13 -12
  437. package/src/components/sidebar-edit-mode/page-panels/style.scss +14 -19
  438. package/src/components/sidebar-edit-mode/page-panels/swap-template-button.js +10 -9
  439. package/src/components/sidebar-edit-mode/plugin-sidebar/index.js +6 -6
  440. package/src/components/sidebar-edit-mode/settings-header/index.js +8 -9
  441. package/src/components/sidebar-edit-mode/template-panel/hooks.js +11 -7
  442. package/src/components/sidebar-navigation-screen/style.scss +1 -0
  443. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  444. package/src/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  445. package/src/components/sidebar-navigation-screen-page/index.js +24 -3
  446. package/src/components/sidebar-navigation-screen-page/page-details.js +4 -17
  447. package/src/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -2
  448. package/src/components/sidebar-navigation-screen-template/style.scss +6 -1
  449. package/src/components/site-hub/index.js +9 -8
  450. package/src/components/start-template-options/index.js +14 -12
  451. package/src/components/style-book/index.js +48 -35
  452. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +182 -63
  453. package/src/components/template-part-converter/convert-to-regular.js +1 -1
  454. package/src/components/welcome-guide/page.js +2 -2
  455. package/src/components/welcome-guide/template.js +4 -2
  456. package/src/hooks/commands/use-edit-mode-commands.js +22 -16
  457. package/src/hooks/push-changes-to-global-styles/index.js +13 -6
  458. package/src/hooks/template-part-edit.js +4 -2
  459. package/src/index.js +0 -8
  460. package/src/store/actions.js +42 -96
  461. package/src/store/private-actions.js +1 -24
  462. package/src/store/private-selectors.js +0 -22
  463. package/src/store/reducer.js +0 -39
  464. package/src/store/selectors.js +43 -95
  465. package/src/store/test/actions.js +14 -169
  466. package/src/store/test/reducer.js +0 -62
  467. package/src/store/test/selectors.js +0 -117
  468. package/src/style.scss +2 -0
  469. package/src/utils/constants.js +1 -11
  470. package/build/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -77
  471. package/build/components/block-editor/block-editor-provider/default-block-editor-provider.js.map +0 -1
  472. package/build/components/block-editor/block-editor-provider/index.js +0 -31
  473. package/build/components/block-editor/block-editor-provider/index.js.map +0 -1
  474. package/build/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -110
  475. package/build/components/block-editor/block-editor-provider/navigation-block-editor-provider.js.map +0 -1
  476. package/build/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -84
  477. package/build/components/block-editor/block-editor-provider/use-page-content-blocks.js.map +0 -1
  478. package/build/components/block-editor/index.js +0 -30
  479. package/build/components/block-editor/index.js.map +0 -1
  480. package/build/components/dataviews/in-filter.js +0 -49
  481. package/build/components/dataviews/in-filter.js.map +0 -1
  482. package/build/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  483. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -50
  484. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  485. package/build/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  486. package/build/components/page-content-focus-manager/index.js +0 -61
  487. package/build/components/page-content-focus-manager/index.js.map +0 -1
  488. package/build/components/page-pages/default-views.js +0 -62
  489. package/build/components/page-pages/default-views.js.map +0 -1
  490. package/build/components/sidebar-edit-mode/page-panels/publish-date.js +0 -87
  491. package/build/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  492. package/build-module/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -69
  493. package/build-module/components/block-editor/block-editor-provider/default-block-editor-provider.js.map +0 -1
  494. package/build-module/components/block-editor/block-editor-provider/index.js +0 -23
  495. package/build-module/components/block-editor/block-editor-provider/index.js.map +0 -1
  496. package/build-module/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -102
  497. package/build-module/components/block-editor/block-editor-provider/navigation-block-editor-provider.js.map +0 -1
  498. package/build-module/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -78
  499. package/build-module/components/block-editor/block-editor-provider/use-page-content-blocks.js.map +0 -1
  500. package/build-module/components/block-editor/index.js +0 -22
  501. package/build-module/components/block-editor/index.js.map +0 -1
  502. package/build-module/components/dataviews/in-filter.js +0 -41
  503. package/build-module/components/dataviews/in-filter.js.map +0 -1
  504. package/build-module/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  505. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -43
  506. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  507. package/build-module/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  508. package/build-module/components/page-content-focus-manager/index.js +0 -52
  509. package/build-module/components/page-content-focus-manager/index.js.map +0 -1
  510. package/build-module/components/page-pages/default-views.js +0 -55
  511. package/build-module/components/page-pages/default-views.js.map +0 -1
  512. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js +0 -80
  513. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  514. package/src/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -75
  515. package/src/components/block-editor/block-editor-provider/index.js +0 -29
  516. package/src/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -114
  517. package/src/components/block-editor/block-editor-provider/test/use-page-content-blocks.js +0 -116
  518. package/src/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -90
  519. package/src/components/block-editor/index.js +0 -28
  520. package/src/components/dataviews/in-filter.js +0 -45
  521. package/src/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -52
  522. package/src/components/page-content-focus-manager/index.js +0 -51
  523. package/src/components/page-pages/default-views.js +0 -60
  524. package/src/components/sidebar-edit-mode/page-panels/publish-date.js +0 -94
@@ -5,7 +5,8 @@ This file documents the DataViews UI component, which provides an API to render
5
5
  ```js
6
6
  <DataViews
7
7
  data={ pages }
8
- isLoading= { isLoadingPages }
8
+ getItemId={ ( item ) => item.id }
9
+ isLoading={ isLoadingPages }
9
10
  view={ view }
10
11
  onChangeView={ onChangeView }
11
12
  fields={ fields }
@@ -16,7 +17,7 @@ This file documents the DataViews UI component, which provides an API to render
16
17
 
17
18
  ## Data
18
19
 
19
- The dataset to work with, represented as a one-dimensional array.
20
+ The dataset to work with, represented as a one-dimensional array.
20
21
 
21
22
  Example:
22
23
 
@@ -43,50 +44,75 @@ Example:
43
44
  direction: 'desc',
44
45
  },
45
46
  search: '',
46
- filters: {
47
- author: 2,
48
- status: 'publish, draft'
49
- },
50
- visibleFilters: [ 'author', 'status' ],
47
+ filters: [
48
+ { field: 'author', operator: OPERATOR_IN, value: 2 },
49
+ { field: 'status', operator: OPERATOR_IN, value: 'publish,draft' }
50
+ ],
51
51
  hiddenFields: [ 'date', 'featured-image' ],
52
52
  layout: {},
53
53
  }
54
54
  ```
55
55
 
56
- - `type`: view type, one of `list` or `grid`.
57
- - `perPage`: number of records to show per page.
58
- - `page`: the page that is visible.
59
- - `sort.field`: field used for sorting the dataset.
60
- - `sort.direction`: the direction to use for sorting, one of `asc` or `desc`.
61
- - `search`: the text search applied to the dataset.
62
- - `filters`: the filters applied to the dataset. See filters section.
63
- - `visibleFilters`: the `id` of the filters that are visible in the UI.
64
- - `hiddenFields`: the `id` of the fields that are hidden in the UI.
65
- - `layout`: ...
56
+ - `type`: view type, one of `list` or `grid`.
57
+ - `perPage`: number of records to show per page.
58
+ - `page`: the page that is visible.
59
+ - `sort.field`: field used for sorting the dataset.
60
+ - `sort.direction`: the direction to use for sorting, one of `asc` or `desc`.
61
+ - `search`: the text search applied to the dataset.
62
+ - `filters`: the filters applied to the dataset. Each item describes:
63
+ - `field`: which field this filter is bound to.
64
+ - `operator`: which type of filter it is. Only `in` available at the moment.
65
+ - `value`: the actual value selected by the user.
66
+ - `hiddenFields`: the `id` of the fields that are hidden in the UI.
67
+ - `layout`: config that is specific to a particular layout type.
68
+ - `mediaField`: used by the `grid` layout. The `id` of the field to be used for rendering each card's media.
69
+ - `primaryField`: used by the `grid` layout. The `id` of the field to be used for rendering each card's title.
66
70
 
67
- Note that it's the consumer's responsibility to provide the data and make sure the dataset corresponds to the view's config (sort, pagination, filters, etc.).
71
+ ### View <=> data
68
72
 
69
- Example:
73
+ The view is a representation of the visible state of the dataset. Note, however, that it's the consumer's responsibility to work with the data provider to make sure the user options defined through the view's config (sort, pagination, filters, etc.) are respected.
74
+
75
+ The following example shows how a view object is used to query the WordPress REST API via the entities abstraction. The same can be done with any other data provider.
70
76
 
71
77
  ```js
72
- function MyCustomPageList() {
78
+ function MyCustomPageList() {
73
79
  const [ view, setView ] = useState( {
74
80
  type: 'list',
81
+ perPage: 5,
75
82
  page: 1,
76
- "...": "..."
83
+ sort: {
84
+ field: 'date',
85
+ direction: 'desc',
86
+ },
87
+ search: '',
88
+ filters: [
89
+ { field: 'author', operator: OPERATOR_IN, value: 2 },
90
+ { field: 'status', operator: OPERATOR_IN, value: 'publish,draft' }
91
+ ],
92
+ hiddenFields: [ 'date', 'featured-image' ],
93
+ layout: {},
77
94
  } );
78
95
 
79
- const queryArgs = useMemo(
80
- () => ( {
96
+ const queryArgs = useMemo( () => {
97
+ const filters = {};
98
+ view.filters.forEach( ( filter ) => {
99
+ if ( filter.field === 'status' && filter.operator === OPERATOR_IN ) {
100
+ filters.status = filter.value;
101
+ }
102
+ if ( filter.field === 'author' && filter.operator === OPERATOR_IN ) {
103
+ filters.author = filter.value;
104
+ }
105
+ } );
106
+ return {
81
107
  per_page: view.perPage,
82
108
  page: view.page,
109
+ _embed: 'author',
83
110
  order: view.sort?.direction,
84
- orderby: view.sort?.field
111
+ orderby: view.sort?.field,
85
112
  search: view.search,
86
- ...view.filters
87
- } ),
88
- [ view ]
89
- );
113
+ ...filters,
114
+ };
115
+ }, [ view ] );
90
116
 
91
117
  const {
92
118
  records
@@ -119,7 +145,8 @@ Example:
119
145
  return (
120
146
  <time>{ getFormattedDate( item.date ) }</time>
121
147
  );
122
- }
148
+ },
149
+ enableHiding: false
123
150
  },
124
151
  {
125
152
  id: 'author',
@@ -130,65 +157,35 @@ Example:
130
157
  <a href="...">{ item.author }</a>
131
158
  );
132
159
  },
160
+ type: ENUMERATION_TYPE,
133
161
  elements: [
134
162
  { value: 1, label: 'Admin' }
135
163
  { value: 2, label: 'User' }
136
164
  ]
137
- filters: [ 'enumeration' ],
165
+ enableSorting: false
138
166
  }
139
167
  ]
140
168
  ```
141
169
 
142
- - `id`: identifier for the field. Unique.
143
- - `header`: the field's name to be shown in the UI.
144
- - `getValue`: function that returns the value of the field.
145
- - `render`: function that renders the field.
146
- - `elements`: the set of valid values for the field's value.
147
- - `filters`: what filters are available for the user to use. See filters section.
148
-
149
- ## Filters
150
-
151
- Filters describe the conditions a record should match to be listed as part of the dataset. Filters are provided per field.
152
-
153
- ```js
154
- const field = [
155
- {
156
- id: 'author',
157
- filters: [ 'enumeration' ],
158
- }
159
- ];
160
-
161
- <DataViews
162
- fields={ fields }
163
- />
164
- ```
165
-
166
- A filter is an object that may contain the following properties:
167
-
168
- - `id`: unique identifier for the filter. Matches the entity query param. Field filters may omit it, in which case the field's `id` will be used.
169
- - `name`: nice looking name for the filter. Field filters may omit it, in which case the field's `header` will be used.
170
- - `type`: the type of filter. Only `enumeration` is supported at the moment.
171
- - `elements`: for filters of type `enumeration`, the list of options to show. A one-dimensional array of object with value/label keys, as in `[ { value: 1, label: "Value name" } ]`.
172
- - `value`: what's serialized into the view's filters.
173
- - `label`: nice-looking name for users.
174
- - `resetValue`: for filters of type `enumeration`, this is the value for the reset option. If none is provided, `''` will be used.
175
- - `resetLabel`: for filters of type `enumeration`, this is the label for the reset option. If none is provided, `All` will be used.
176
-
177
- As a convenience, field's filter can provide abbreviated versions for the filter. All of following examples result in the same filter:
178
-
179
- ```js
180
- const field = [
181
- {
182
- id: 'author',
183
- header: __( 'Author' ),
184
- elements: authors,
185
- filters: [
186
- 'enumeration',
187
- { type: 'enumeration' },
188
- { id: 'author', type: 'enumeration' },
189
- { id: 'author', type: 'enumeration', name: __( 'Author' ) },
190
- { id: 'author', type: 'enumeration', name: __( 'Author' ), elements: authors },
191
- ],
192
- }
193
- ];
194
- ```
170
+ - `id`: identifier for the field. Unique.
171
+ - `header`: the field's name to be shown in the UI.
172
+ - `getValue`: function that returns the value of the field.
173
+ - `render`: function that renders the field.
174
+ - `elements`: the set of valid values for the field's value.
175
+ - `type`: the type of the field. Used to generate the proper filters. Only `enumeration` available at the moment.
176
+ - `enableSorting`: whether the data can be sorted by the given field. True by default.
177
+ - `enableHiding`: whether the field can be hidden. True by default.
178
+
179
+ ## Actions
180
+
181
+ Array of operations that can be performed upon each record. Each action is an object with the following properties:
182
+
183
+ - `id`: string, required. Unique identifier of the action. For example, `move-to-trash`.
184
+ - `label`: string, required. User facing description of the action. For example, `Move to Trash`.
185
+ - `isPrimary`: boolean, optional. Whether the action should be listed inline (primary) or in hidden in the more actions menu (secondary).
186
+ - `icon`: icon to show for primary actions. It's required for a primary action, otherwise the action would be considered secondary.
187
+ - `isEligible`: function, optional. Whether the action can be performed for a given record. If not present, the action is considered to be eligible for all items. It takes the given record as input.
188
+ - `isDestructive`: boolean, optional. Whether the action can delete data, in which case the UI would communicate it via red color.
189
+ - `callback`: function, required unless `RenderModal` is provided. Callback function that takes the record as input and performs the required action.
190
+ - `RenderModal`: ReactElement, optional. If an action requires that some UI be rendered in a modal, it can provide a component which takes as props the record as `item` and a `closeModal` function. When this prop is provided, the `callback` property is ignored.
191
+ - `hideModalHeader`: boolean, optional. This property is used in combination with `RenderModal` and controls the visibility of the modal's header. If the action renders a modal and doesn't hide the header, the action's label is going to be used in the modal's header.
@@ -0,0 +1,108 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ privateApis as componentsPrivateApis,
6
+ Button,
7
+ Icon,
8
+ } from '@wordpress/components';
9
+ import { chevronRightSmall, plus } from '@wordpress/icons';
10
+ import { __ } from '@wordpress/i18n';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import { unlock } from '../../lock-unlock';
16
+ import { ENUMERATION_TYPE, OPERATOR_IN } from './constants';
17
+
18
+ const {
19
+ DropdownMenuV2: DropdownMenu,
20
+ DropdownSubMenuV2: DropdownSubMenu,
21
+ DropdownSubMenuTriggerV2: DropdownSubMenuTrigger,
22
+ DropdownMenuItemV2: DropdownMenuItem,
23
+ } = unlock( componentsPrivateApis );
24
+
25
+ export default function AddFilter( { fields, view, onChangeView } ) {
26
+ const filters = [];
27
+ fields.forEach( ( field ) => {
28
+ if ( ! field.type ) {
29
+ return;
30
+ }
31
+
32
+ switch ( field.type ) {
33
+ case ENUMERATION_TYPE:
34
+ filters.push( {
35
+ field: field.id,
36
+ name: field.header,
37
+ elements: field.elements || [],
38
+ isVisible: view.filters.some(
39
+ ( f ) =>
40
+ f.field === field.id && f.operator === OPERATOR_IN
41
+ ),
42
+ } );
43
+ }
44
+ } );
45
+
46
+ if ( filters.length === 0 ) {
47
+ return null;
48
+ }
49
+
50
+ return (
51
+ <DropdownMenu
52
+ label={ __( 'Add filter' ) }
53
+ trigger={
54
+ <Button
55
+ disabled={ filters.length === view.filters?.length }
56
+ __experimentalIsFocusable
57
+ variant="tertiary"
58
+ size="compact"
59
+ >
60
+ <Icon icon={ plus } style={ { flexShrink: 0 } } />
61
+ { __( 'Add filter' ) }
62
+ </Button>
63
+ }
64
+ >
65
+ { filters.map( ( filter ) => {
66
+ if ( filter.isVisible ) {
67
+ return null;
68
+ }
69
+
70
+ return (
71
+ <DropdownSubMenu
72
+ key={ filter.field }
73
+ trigger={
74
+ <DropdownSubMenuTrigger
75
+ suffix={ <Icon icon={ chevronRightSmall } /> }
76
+ >
77
+ { filter.name }
78
+ </DropdownSubMenuTrigger>
79
+ }
80
+ >
81
+ { filter.elements.map( ( element ) => (
82
+ <DropdownMenuItem
83
+ key={ element.value }
84
+ onSelect={ () => {
85
+ onChangeView( ( currentView ) => ( {
86
+ ...currentView,
87
+ page: 1,
88
+ filters: [
89
+ ...currentView.filters,
90
+ {
91
+ field: filter.field,
92
+ operator: OPERATOR_IN,
93
+ value: element.value,
94
+ },
95
+ ],
96
+ } ) );
97
+ } }
98
+ role="menuitemcheckbox"
99
+ >
100
+ { element.label }
101
+ </DropdownMenuItem>
102
+ ) ) }
103
+ </DropdownSubMenu>
104
+ );
105
+ } ) }
106
+ </DropdownMenu>
107
+ );
108
+ }
@@ -0,0 +1,5 @@
1
+ // Field types.
2
+ export const ENUMERATION_TYPE = 'enumeration';
3
+
4
+ // Filter operators.
5
+ export const OPERATOR_IN = 'in';
@@ -16,6 +16,22 @@ import ViewActions from './view-actions';
16
16
  import Filters from './filters';
17
17
  import Search from './search';
18
18
  import { ViewGrid } from './view-grid';
19
+ import { ViewSideBySide } from './view-side-by-side';
20
+
21
+ // To do: convert to view type registry.
22
+ export const viewTypeSupportsMap = {
23
+ list: {},
24
+ grid: {},
25
+ 'side-by-side': {
26
+ preview: true,
27
+ },
28
+ };
29
+
30
+ const viewTypeMap = {
31
+ list: ViewList,
32
+ grid: ViewGrid,
33
+ 'side-by-side': ViewSideBySide,
34
+ };
19
35
 
20
36
  export default function DataViews( {
21
37
  view,
@@ -25,10 +41,12 @@ export default function DataViews( {
25
41
  searchLabel = undefined,
26
42
  actions,
27
43
  data,
44
+ getItemId,
28
45
  isLoading = false,
29
46
  paginationInfo,
47
+ supportedLayouts,
30
48
  } ) {
31
- const ViewComponent = view.type === 'list' ? ViewList : ViewGrid;
49
+ const ViewComponent = viewTypeMap[ view.type ];
32
50
  const _fields = useMemo( () => {
33
51
  return fields.map( ( field ) => ( {
34
52
  ...field,
@@ -38,8 +56,8 @@ export default function DataViews( {
38
56
  return (
39
57
  <div className="dataviews-wrapper">
40
58
  <VStack spacing={ 4 } justify="flex-start">
41
- <HStack>
42
- <HStack justify="start">
59
+ <HStack alignment="flex-start">
60
+ <HStack justify="start" wrap>
43
61
  { search && (
44
62
  <Search
45
63
  label={ searchLabel }
@@ -53,13 +71,12 @@ export default function DataViews( {
53
71
  onChangeView={ onChangeView }
54
72
  />
55
73
  </HStack>
56
- <HStack justify="end">
57
- <ViewActions
58
- fields={ fields }
59
- view={ view }
60
- onChangeView={ onChangeView }
61
- />
62
- </HStack>
74
+ <ViewActions
75
+ fields={ fields }
76
+ view={ view }
77
+ onChangeView={ onChangeView }
78
+ supportedLayouts={ supportedLayouts }
79
+ />
63
80
  </HStack>
64
81
  <ViewComponent
65
82
  fields={ _fields }
@@ -68,6 +85,7 @@ export default function DataViews( {
68
85
  paginationInfo={ paginationInfo }
69
86
  actions={ actions }
70
87
  data={ data }
88
+ getItemId={ getItemId }
71
89
  isLoading={ isLoading }
72
90
  />
73
91
  <Pagination
@@ -0,0 +1,79 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ Button,
6
+ privateApis as componentsPrivateApis,
7
+ Icon,
8
+ } from '@wordpress/components';
9
+ import { chevronDown } from '@wordpress/icons';
10
+ import { __, sprintf } from '@wordpress/i18n';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import { OPERATOR_IN } from './constants';
16
+ import { unlock } from '../../lock-unlock';
17
+
18
+ const {
19
+ DropdownMenuV2: DropdownMenu,
20
+ DropdownMenuCheckboxItemV2: DropdownMenuCheckboxItem,
21
+ } = unlock( componentsPrivateApis );
22
+
23
+ export default function FilterSummary( { filter, view, onChangeView } ) {
24
+ const filterInView = view.filters.find( ( f ) => f.field === filter.field );
25
+ const activeElement = filter.elements.find(
26
+ ( element ) => element.value === filterInView?.value
27
+ );
28
+
29
+ return (
30
+ <DropdownMenu
31
+ key={ filter.field }
32
+ trigger={
33
+ <Button variant="tertiary" size="compact" label={ filter.name }>
34
+ { activeElement !== undefined
35
+ ? sprintf(
36
+ /* translators: 1: Filter name. 2: filter value. e.g.: "Author is Admin". */
37
+ __( '%1$s is %2$s' ),
38
+ filter.name,
39
+ activeElement.label
40
+ )
41
+ : filter.name }
42
+ <Icon icon={ chevronDown } style={ { flexShrink: 0 } } />
43
+ </Button>
44
+ }
45
+ >
46
+ { filter.elements.map( ( element ) => {
47
+ return (
48
+ <DropdownMenuCheckboxItem
49
+ key={ element.value }
50
+ value={ element.value }
51
+ checked={ activeElement?.value === element.value }
52
+ onSelect={ () =>
53
+ onChangeView( ( currentView ) => ( {
54
+ ...currentView,
55
+ page: 1,
56
+ filters: [
57
+ ...view.filters.filter(
58
+ ( f ) => f.field !== filter.field
59
+ ),
60
+ {
61
+ field: filter.field,
62
+ operator: OPERATOR_IN,
63
+ value:
64
+ activeElement?.value ===
65
+ element.value
66
+ ? undefined
67
+ : element.value,
68
+ },
69
+ ],
70
+ } ) )
71
+ }
72
+ >
73
+ { element.label }
74
+ </DropdownMenuCheckboxItem>
75
+ );
76
+ } ) }
77
+ </DropdownMenu>
78
+ );
79
+ }
@@ -1,75 +1,65 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
9
- import InFilter from './in-filter';
4
+ import FilterSummary from './filter-summary';
5
+ import AddFilter from './add-filter';
6
+ import ResetFilters from './reset-filters';
7
+ import { ENUMERATION_TYPE, OPERATOR_IN } from './constants';
10
8
 
11
9
  export default function Filters( { fields, view, onChangeView } ) {
12
- const filterIndex = {};
10
+ const filters = [];
13
11
  fields.forEach( ( field ) => {
14
- if ( ! field.filters ) {
12
+ if ( ! field.type ) {
15
13
  return;
16
14
  }
17
15
 
18
- field.filters.forEach( ( filter ) => {
19
- let id = field.id;
20
- if ( 'string' === typeof filter ) {
21
- filterIndex[ id ] = {
22
- id,
16
+ switch ( field.type ) {
17
+ case ENUMERATION_TYPE:
18
+ filters.push( {
19
+ field: field.id,
23
20
  name: field.header,
24
- type: filter,
25
- };
26
- }
21
+ elements: field.elements || [],
22
+ isVisible: view.filters.some(
23
+ ( f ) =>
24
+ f.field === field.id && f.operator === OPERATOR_IN
25
+ ),
26
+ } );
27
+ }
28
+ } );
27
29
 
28
- if ( 'object' === typeof filter ) {
29
- id = filter.id || field.id;
30
- filterIndex[ id ] = {
31
- id,
32
- name: filter.name || field.header,
33
- type: filter.type,
34
- };
35
- }
30
+ const filterComponents = filters.map( ( filter ) => {
31
+ if ( ! filter.isVisible ) {
32
+ return null;
33
+ }
36
34
 
37
- if ( 'enumeration' === filterIndex[ id ]?.type ) {
38
- const elements = [
39
- {
40
- value: filter.resetValue || '',
41
- label: filter.resetLabel || __( 'All' ),
42
- },
43
- ...( field.elements || [] ),
44
- ];
45
- filterIndex[ id ] = {
46
- ...filterIndex[ id ],
47
- elements,
48
- };
49
- }
50
- } );
35
+ return (
36
+ <FilterSummary
37
+ key={ filter.field + '.' + filter.operator }
38
+ filter={ filter }
39
+ view={ view }
40
+ onChangeView={ onChangeView }
41
+ />
42
+ );
51
43
  } );
52
44
 
53
- return (
54
- view.visibleFilters?.map( ( filterName ) => {
55
- const filter = filterIndex[ filterName ];
56
-
57
- if ( ! filter ) {
58
- return null;
59
- }
45
+ filterComponents.push(
46
+ <AddFilter
47
+ key="add-filter"
48
+ fields={ fields }
49
+ view={ view }
50
+ onChangeView={ onChangeView }
51
+ />
52
+ );
60
53
 
61
- if ( filter.type === 'enumeration' ) {
62
- return (
63
- <InFilter
64
- key={ filterName }
65
- filter={ filter }
66
- view={ view }
67
- onChangeView={ onChangeView }
68
- />
69
- );
70
- }
54
+ if ( filterComponents.length > 1 ) {
55
+ filterComponents.push(
56
+ <ResetFilters
57
+ key="reset-filters"
58
+ view={ view }
59
+ onChangeView={ onChangeView }
60
+ />
61
+ );
62
+ }
71
63
 
72
- return null;
73
- } ) || __( 'No filters available' )
74
- );
64
+ return filterComponents;
75
65
  }
@@ -1 +1 @@
1
- export { default as DataViews } from './dataviews';
1
+ export { default as DataViews, viewTypeSupportsMap } from './dataviews';