@wordpress/edit-site 5.23.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 (320) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/actions/index.js +56 -38
  3. package/build/components/actions/index.js.map +1 -1
  4. package/build/components/block-editor/site-editor-canvas.js +7 -2
  5. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  6. package/build/components/dataviews/add-filter.js +21 -20
  7. package/build/components/dataviews/add-filter.js.map +1 -1
  8. package/build/components/dataviews/constants.js +14 -0
  9. package/build/components/dataviews/constants.js.map +1 -0
  10. package/build/components/dataviews/dataviews.js +9 -7
  11. package/build/components/dataviews/dataviews.js.map +1 -1
  12. package/build/components/dataviews/filter-summary.js +62 -0
  13. package/build/components/dataviews/filter-summary.js.map +1 -0
  14. package/build/components/dataviews/filters.js +15 -30
  15. package/build/components/dataviews/filters.js.map +1 -1
  16. package/build/components/dataviews/item-actions.js +84 -30
  17. package/build/components/dataviews/item-actions.js.map +1 -1
  18. package/build/components/dataviews/pagination.js +4 -0
  19. package/build/components/dataviews/pagination.js.map +1 -1
  20. package/build/components/dataviews/view-actions.js +24 -24
  21. package/build/components/dataviews/view-actions.js.map +1 -1
  22. package/build/components/dataviews/view-grid.js +48 -25
  23. package/build/components/dataviews/view-grid.js.map +1 -1
  24. package/build/components/dataviews/view-list.js +28 -33
  25. package/build/components/dataviews/view-list.js.map +1 -1
  26. package/build/components/editor/index.js +23 -27
  27. package/build/components/editor/index.js.map +1 -1
  28. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  29. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  30. package/build/components/global-styles/font-library-modal/utils/index.js +15 -2
  31. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  32. package/build/components/global-styles/header.js +4 -2
  33. package/build/components/global-styles/header.js.map +1 -1
  34. package/build/components/global-styles/screen-block-list.js +22 -16
  35. package/build/components/global-styles/screen-block-list.js.map +1 -1
  36. package/build/components/global-styles/screen-revisions/index.js +26 -5
  37. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  38. package/build/components/global-styles/screen-revisions/revisions-buttons.js +52 -24
  39. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  40. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  41. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  42. package/build/components/global-styles/ui.js +28 -36
  43. package/build/components/global-styles/ui.js.map +1 -1
  44. package/build/components/header-edit-mode/document-actions/index.js +21 -16
  45. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  46. package/build/components/header-edit-mode/index.js +2 -1
  47. package/build/components/header-edit-mode/index.js.map +1 -1
  48. package/build/components/header-edit-mode/more-menu/index.js +1 -1
  49. package/build/components/header-edit-mode/more-menu/index.js.map +1 -1
  50. package/build/components/list/added-by.js +43 -54
  51. package/build/components/list/added-by.js.map +1 -1
  52. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +9 -8
  53. package/build/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  54. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  55. package/build/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  56. package/build/components/page-content-focus-notifications/index.js +22 -0
  57. package/build/components/page-content-focus-notifications/index.js.map +1 -0
  58. package/build/components/page-pages/index.js +9 -15
  59. package/build/components/page-pages/index.js.map +1 -1
  60. package/build/components/page-patterns/use-patterns.js +1 -1
  61. package/build/components/page-patterns/use-patterns.js.map +1 -1
  62. package/build/components/page-templates/dataviews-templates.js +166 -51
  63. package/build/components/page-templates/dataviews-templates.js.map +1 -1
  64. package/build/components/preferences-modal/index.js +1 -1
  65. package/build/components/preferences-modal/index.js.map +1 -1
  66. package/build/components/save-button/index.js +9 -6
  67. package/build/components/save-button/index.js.map +1 -1
  68. package/build/components/save-hub/index.js +14 -0
  69. package/build/components/save-hub/index.js.map +1 -1
  70. package/build/components/sidebar-dataviews/custom-dataviews-list.js +3 -1
  71. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  72. package/build/components/sidebar-dataviews/default-views.js +7 -2
  73. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  74. package/build/components/sidebar-edit-mode/index.js +6 -5
  75. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  76. package/build/components/sidebar-edit-mode/page-panels/edit-template.js +15 -26
  77. package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  78. package/build/components/sidebar-edit-mode/page-panels/hooks.js +22 -8
  79. package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  80. package/build/components/sidebar-edit-mode/page-panels/page-status.js +8 -5
  81. package/build/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  82. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +4 -8
  83. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  84. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +2 -2
  85. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  86. package/build/components/sidebar-edit-mode/settings-header/index.js +10 -6
  87. package/build/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  88. package/build/components/sidebar-navigation-screen-page/index.js +23 -4
  89. package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
  90. package/build/components/style-book/index.js +22 -12
  91. package/build/components/style-book/index.js.map +1 -1
  92. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +41 -9
  93. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  94. package/build/components/welcome-guide/page.js +2 -2
  95. package/build/components/welcome-guide/page.js.map +1 -1
  96. package/build/components/welcome-guide/template.js +6 -3
  97. package/build/components/welcome-guide/template.js.map +1 -1
  98. package/build/hooks/commands/use-edit-mode-commands.js +24 -14
  99. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  100. package/build/store/actions.js +4 -1
  101. package/build/store/actions.js.map +1 -1
  102. package/build/store/private-actions.js +2 -27
  103. package/build/store/private-actions.js.map +1 -1
  104. package/build/store/private-selectors.js +0 -23
  105. package/build/store/private-selectors.js.map +1 -1
  106. package/build/store/reducer.js +1 -40
  107. package/build/store/reducer.js.map +1 -1
  108. package/build/store/selectors.js +8 -4
  109. package/build/store/selectors.js.map +1 -1
  110. package/build/utils/constants.js +1 -12
  111. package/build/utils/constants.js.map +1 -1
  112. package/build-module/components/actions/index.js +55 -36
  113. package/build-module/components/actions/index.js.map +1 -1
  114. package/build-module/components/block-editor/site-editor-canvas.js +7 -2
  115. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  116. package/build-module/components/dataviews/add-filter.js +21 -20
  117. package/build-module/components/dataviews/add-filter.js.map +1 -1
  118. package/build-module/components/dataviews/constants.js +6 -0
  119. package/build-module/components/dataviews/constants.js.map +1 -0
  120. package/build-module/components/dataviews/dataviews.js +9 -7
  121. package/build-module/components/dataviews/dataviews.js.map +1 -1
  122. package/build-module/components/dataviews/filter-summary.js +55 -0
  123. package/build-module/components/dataviews/filter-summary.js.map +1 -0
  124. package/build-module/components/dataviews/filters.js +15 -28
  125. package/build-module/components/dataviews/filters.js.map +1 -1
  126. package/build-module/components/dataviews/item-actions.js +84 -30
  127. package/build-module/components/dataviews/item-actions.js.map +1 -1
  128. package/build-module/components/dataviews/pagination.js +4 -0
  129. package/build-module/components/dataviews/pagination.js.map +1 -1
  130. package/build-module/components/dataviews/view-actions.js +24 -24
  131. package/build-module/components/dataviews/view-actions.js.map +1 -1
  132. package/build-module/components/dataviews/view-grid.js +49 -26
  133. package/build-module/components/dataviews/view-grid.js.map +1 -1
  134. package/build-module/components/dataviews/view-list.js +28 -33
  135. package/build-module/components/dataviews/view-list.js.map +1 -1
  136. package/build-module/components/editor/index.js +26 -30
  137. package/build-module/components/editor/index.js.map +1 -1
  138. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  139. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  140. package/build-module/components/global-styles/font-library-modal/utils/index.js +14 -2
  141. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  142. package/build-module/components/global-styles/header.js +4 -2
  143. package/build-module/components/global-styles/header.js.map +1 -1
  144. package/build-module/components/global-styles/screen-block-list.js +23 -17
  145. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  146. package/build-module/components/global-styles/screen-revisions/index.js +27 -6
  147. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  148. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +51 -24
  149. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  150. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  151. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  152. package/build-module/components/global-styles/ui.js +28 -36
  153. package/build-module/components/global-styles/ui.js.map +1 -1
  154. package/build-module/components/header-edit-mode/document-actions/index.js +21 -16
  155. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  156. package/build-module/components/header-edit-mode/index.js +2 -1
  157. package/build-module/components/header-edit-mode/index.js.map +1 -1
  158. package/build-module/components/header-edit-mode/more-menu/index.js +1 -1
  159. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -1
  160. package/build-module/components/list/added-by.js +44 -55
  161. package/build-module/components/list/added-by.js.map +1 -1
  162. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +9 -8
  163. package/build-module/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  164. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  165. package/build-module/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  166. package/build-module/components/page-content-focus-notifications/index.js +14 -0
  167. package/build-module/components/page-content-focus-notifications/index.js.map +1 -0
  168. package/build-module/components/page-pages/index.js +10 -16
  169. package/build-module/components/page-pages/index.js.map +1 -1
  170. package/build-module/components/page-patterns/use-patterns.js +1 -1
  171. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  172. package/build-module/components/page-templates/dataviews-templates.js +168 -53
  173. package/build-module/components/page-templates/dataviews-templates.js.map +1 -1
  174. package/build-module/components/preferences-modal/index.js +1 -1
  175. package/build-module/components/preferences-modal/index.js.map +1 -1
  176. package/build-module/components/save-button/index.js +11 -8
  177. package/build-module/components/save-button/index.js.map +1 -1
  178. package/build-module/components/save-hub/index.js +14 -0
  179. package/build-module/components/save-hub/index.js.map +1 -1
  180. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +3 -1
  181. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  182. package/build-module/components/sidebar-dataviews/default-views.js +7 -2
  183. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  184. package/build-module/components/sidebar-edit-mode/index.js +6 -5
  185. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  186. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +16 -27
  187. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  188. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +21 -7
  189. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  190. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js +9 -6
  191. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  192. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +5 -9
  193. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  194. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +3 -3
  195. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  196. package/build-module/components/sidebar-edit-mode/settings-header/index.js +10 -6
  197. package/build-module/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  198. package/build-module/components/sidebar-navigation-screen-page/index.js +23 -4
  199. package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
  200. package/build-module/components/style-book/index.js +22 -12
  201. package/build-module/components/style-book/index.js.map +1 -1
  202. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +41 -9
  203. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  204. package/build-module/components/welcome-guide/page.js +2 -2
  205. package/build-module/components/welcome-guide/page.js.map +1 -1
  206. package/build-module/components/welcome-guide/template.js +6 -3
  207. package/build-module/components/welcome-guide/template.js.map +1 -1
  208. package/build-module/hooks/commands/use-edit-mode-commands.js +24 -14
  209. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  210. package/build-module/store/actions.js +4 -1
  211. package/build-module/store/actions.js.map +1 -1
  212. package/build-module/store/private-actions.js +1 -25
  213. package/build-module/store/private-actions.js.map +1 -1
  214. package/build-module/store/private-selectors.js +0 -22
  215. package/build-module/store/private-selectors.js.map +1 -1
  216. package/build-module/store/reducer.js +1 -38
  217. package/build-module/store/reducer.js.map +1 -1
  218. package/build-module/store/selectors.js +8 -4
  219. package/build-module/store/selectors.js.map +1 -1
  220. package/build-module/utils/constants.js +0 -10
  221. package/build-module/utils/constants.js.map +1 -1
  222. package/build-style/style-rtl.css +152 -62
  223. package/build-style/style.css +152 -62
  224. package/package.json +41 -41
  225. package/src/components/actions/index.js +76 -48
  226. package/src/components/block-editor/site-editor-canvas.js +8 -2
  227. package/src/components/dataviews/README.md +14 -11
  228. package/src/components/dataviews/add-filter.js +21 -24
  229. package/src/components/dataviews/constants.js +5 -0
  230. package/src/components/dataviews/dataviews.js +10 -10
  231. package/src/components/dataviews/filter-summary.js +79 -0
  232. package/src/components/dataviews/filters.js +18 -35
  233. package/src/components/dataviews/item-actions.js +106 -42
  234. package/src/components/dataviews/pagination.js +4 -0
  235. package/src/components/dataviews/style.scss +84 -8
  236. package/src/components/dataviews/view-actions.js +39 -41
  237. package/src/components/dataviews/view-grid.js +63 -38
  238. package/src/components/dataviews/view-list.js +50 -57
  239. package/src/components/editor/index.js +18 -34
  240. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  241. package/src/components/global-styles/font-library-modal/utils/index.js +20 -9
  242. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +46 -15
  243. package/src/components/global-styles/font-library-modal/utils/test/wpKebabCase.spec.js +28 -0
  244. package/src/components/global-styles/header.js +2 -1
  245. package/src/components/global-styles/screen-block-list.js +37 -26
  246. package/src/components/global-styles/screen-revisions/index.js +39 -10
  247. package/src/components/global-styles/screen-revisions/revisions-buttons.js +65 -45
  248. package/src/components/global-styles/screen-revisions/style.scss +52 -28
  249. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -6
  250. package/src/components/global-styles/style.scss +0 -11
  251. package/src/components/global-styles/ui.js +59 -74
  252. package/src/components/header-edit-mode/document-actions/index.js +20 -18
  253. package/src/components/header-edit-mode/index.js +1 -0
  254. package/src/components/header-edit-mode/more-menu/index.js +1 -1
  255. package/src/components/list/added-by.js +23 -63
  256. package/src/components/list/style.scss +11 -13
  257. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +12 -13
  258. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  259. package/src/components/page-content-focus-notifications/index.js +14 -0
  260. package/src/components/page-pages/index.js +15 -20
  261. package/src/components/page-patterns/use-patterns.js +1 -1
  262. package/src/components/page-templates/dataviews-templates.js +169 -48
  263. package/src/components/page-templates/style.scss +13 -0
  264. package/src/components/preferences-modal/index.js +1 -1
  265. package/src/components/save-button/index.js +37 -24
  266. package/src/components/save-hub/index.js +15 -0
  267. package/src/components/save-hub/style.scss +7 -0
  268. package/src/components/sidebar-dataviews/custom-dataviews-list.js +2 -0
  269. package/src/components/sidebar-dataviews/default-views.js +7 -2
  270. package/src/components/sidebar-dataviews/style.scss +7 -0
  271. package/src/components/sidebar-edit-mode/index.js +13 -9
  272. package/src/components/sidebar-edit-mode/page-panels/edit-template.js +33 -52
  273. package/src/components/sidebar-edit-mode/page-panels/hooks.js +20 -9
  274. package/src/components/sidebar-edit-mode/page-panels/page-status.js +6 -6
  275. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +8 -9
  276. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +3 -3
  277. package/src/components/sidebar-edit-mode/page-panels/style.scss +9 -19
  278. package/src/components/sidebar-edit-mode/settings-header/index.js +8 -9
  279. package/src/components/sidebar-navigation-screen/style.scss +1 -0
  280. package/src/components/sidebar-navigation-screen-page/index.js +24 -3
  281. package/src/components/sidebar-navigation-screen-template/style.scss +6 -1
  282. package/src/components/style-book/index.js +48 -35
  283. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +69 -17
  284. package/src/components/welcome-guide/page.js +2 -2
  285. package/src/components/welcome-guide/template.js +4 -2
  286. package/src/hooks/commands/use-edit-mode-commands.js +22 -16
  287. package/src/store/actions.js +5 -1
  288. package/src/store/private-actions.js +1 -24
  289. package/src/store/private-selectors.js +0 -22
  290. package/src/store/reducer.js +0 -39
  291. package/src/store/selectors.js +12 -4
  292. package/src/store/test/actions.js +3 -32
  293. package/src/store/test/reducer.js +0 -62
  294. package/src/store/test/selectors.js +0 -35
  295. package/src/style.scss +1 -0
  296. package/src/utils/constants.js +0 -10
  297. package/build/components/dataviews/in-filter.js +0 -51
  298. package/build/components/dataviews/in-filter.js.map +0 -1
  299. package/build/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  300. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -63
  301. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  302. package/build/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  303. package/build/components/page-content-focus-manager/index.js +0 -61
  304. package/build/components/page-content-focus-manager/index.js.map +0 -1
  305. package/build/components/sidebar-edit-mode/page-panels/publish-date.js +0 -87
  306. package/build/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  307. package/build-module/components/dataviews/in-filter.js +0 -42
  308. package/build-module/components/dataviews/in-filter.js.map +0 -1
  309. package/build-module/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  310. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -56
  311. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  312. package/build-module/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  313. package/build-module/components/page-content-focus-manager/index.js +0 -52
  314. package/build-module/components/page-content-focus-manager/index.js.map +0 -1
  315. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js +0 -80
  316. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  317. package/src/components/dataviews/in-filter.js +0 -63
  318. package/src/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -57
  319. package/src/components/page-content-focus-manager/index.js +0 -51
  320. package/src/components/sidebar-edit-mode/page-panels/publish-date.js +0 -94
@@ -21,7 +21,7 @@ import Link from '../routes/link';
21
21
  import { DataViews, viewTypeSupportsMap } from '../dataviews';
22
22
  import { default as DEFAULT_VIEWS } from '../sidebar-dataviews/default-views';
23
23
  import {
24
- useTrashPostAction,
24
+ trashPostAction,
25
25
  usePermanentlyDeletePostAction,
26
26
  useRestorePostAction,
27
27
  postRevisionsAction,
@@ -31,6 +31,7 @@ import {
31
31
  import SideEditor from './side-editor';
32
32
  import Media from '../media';
33
33
  import { unlock } from '../../lock-unlock';
34
+ import { ENUMERATION_TYPE, OPERATOR_IN } from '../dataviews/constants';
34
35
  const { useLocation } = unlock( routerPrivateApis );
35
36
 
36
37
  const EMPTY_ARRAY = [];
@@ -38,6 +39,7 @@ const defaultConfigPerViewType = {
38
39
  list: {},
39
40
  grid: {
40
41
  mediaField: 'featured-image',
42
+ primaryField: 'title',
41
43
  },
42
44
  };
43
45
 
@@ -120,10 +122,16 @@ export default function PagePages() {
120
122
  const queryArgs = useMemo( () => {
121
123
  const filters = {};
122
124
  view.filters.forEach( ( filter ) => {
123
- if ( filter.field === 'status' && filter.operator === 'in' ) {
125
+ if (
126
+ filter.field === 'status' &&
127
+ filter.operator === OPERATOR_IN
128
+ ) {
124
129
  filters.status = filter.value;
125
130
  }
126
- if ( filter.field === 'author' && filter.operator === 'in' ) {
131
+ if (
132
+ filter.field === 'author' &&
133
+ filter.operator === OPERATOR_IN
134
+ ) {
127
135
  filters.author = filter.value;
128
136
  }
129
137
  } );
@@ -219,15 +227,7 @@ export default function PagePages() {
219
227
  header: __( 'Author' ),
220
228
  id: 'author',
221
229
  getValue: ( { item } ) => item._embedded?.author[ 0 ]?.name,
222
- render: ( { item } ) => {
223
- const author = item._embedded?.author[ 0 ];
224
- return (
225
- <a href={ `user-edit.php?user_id=${ author.id }` }>
226
- { author.name }
227
- </a>
228
- );
229
- },
230
- filters: [ 'in' ],
230
+ type: ENUMERATION_TYPE,
231
231
  elements:
232
232
  authors?.map( ( { id, name } ) => ( {
233
233
  value: id,
@@ -240,7 +240,7 @@ export default function PagePages() {
240
240
  getValue: ( { item } ) =>
241
241
  STATUSES.find( ( { value } ) => value === item.status )
242
242
  ?.label ?? item.status,
243
- filters: [ 'in' ],
243
+ type: ENUMERATION_TYPE,
244
244
  elements: STATUSES,
245
245
  enableSorting: false,
246
246
  },
@@ -260,7 +260,6 @@ export default function PagePages() {
260
260
  [ authors ]
261
261
  );
262
262
 
263
- const trashPostAction = useTrashPostAction();
264
263
  const permanentlyDeletePostAction = usePermanentlyDeletePostAction();
265
264
  const restorePostAction = useRestorePostAction();
266
265
  const editPostAction = useEditPostAction();
@@ -273,12 +272,7 @@ export default function PagePages() {
273
272
  editPostAction,
274
273
  postRevisionsAction,
275
274
  ],
276
- [
277
- trashPostAction,
278
- permanentlyDeletePostAction,
279
- restorePostAction,
280
- editPostAction,
281
- ]
275
+ [ permanentlyDeletePostAction, restorePostAction, editPostAction ]
282
276
  );
283
277
  const onChangeView = useCallback(
284
278
  ( viewUpdater ) => {
@@ -309,6 +303,7 @@ export default function PagePages() {
309
303
  fields={ fields }
310
304
  actions={ actions }
311
305
  data={ pages || EMPTY_ARRAY }
306
+ getItemId={ ( item ) => item.id }
312
307
  isLoading={ isLoadingPages || isLoadingAuthors }
313
308
  view={ view }
314
309
  onChangeView={ onChangeView }
@@ -159,7 +159,7 @@ const selectPatterns = createSelector(
159
159
  // User patterns can have their sync statuses checked directly
160
160
  // Non-user patterns are all unsynced for the time being.
161
161
  patterns = patterns.filter( ( pattern ) => {
162
- return pattern.id
162
+ return pattern.type === PATTERN_TYPES.user
163
163
  ? pattern.syncStatus === syncStatus
164
164
  : syncStatus === PATTERN_SYNC_TYPES.unsynced;
165
165
  } );
@@ -12,11 +12,17 @@ import {
12
12
  __experimentalText as Text,
13
13
  __experimentalHStack as HStack,
14
14
  __experimentalVStack as VStack,
15
+ VisuallyHidden,
15
16
  } from '@wordpress/components';
16
17
  import { __, _x } from '@wordpress/i18n';
17
18
  import { useState, useMemo, useCallback } from '@wordpress/element';
18
19
  import { useEntityRecords } from '@wordpress/core-data';
19
20
  import { decodeEntities } from '@wordpress/html-entities';
21
+ import { parse } from '@wordpress/blocks';
22
+ import {
23
+ BlockPreview,
24
+ privateApis as blockEditorPrivateApis,
25
+ } from '@wordpress/block-editor';
20
26
 
21
27
  /**
22
28
  * Internal dependencies
@@ -26,14 +32,29 @@ import Link from '../routes/link';
26
32
  import { useAddedBy, AvatarImage } from '../list/added-by';
27
33
  import { TEMPLATE_POST_TYPE } from '../../utils/constants';
28
34
  import { DataViews } from '../dataviews';
35
+ import { ENUMERATION_TYPE, OPERATOR_IN } from '../dataviews/constants';
29
36
  import {
30
37
  useResetTemplateAction,
31
38
  deleteTemplateAction,
32
39
  renameTemplateAction,
33
40
  } from './template-actions';
41
+ import usePatternSettings from '../page-patterns/use-pattern-settings';
42
+ import { unlock } from '../../lock-unlock';
43
+
44
+ const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock(
45
+ blockEditorPrivateApis
46
+ );
34
47
 
35
48
  const EMPTY_ARRAY = [];
36
49
 
50
+ const defaultConfigPerViewType = {
51
+ list: {},
52
+ grid: {
53
+ mediaField: 'preview',
54
+ primaryField: 'title',
55
+ },
56
+ };
57
+
37
58
  const DEFAULT_VIEW = {
38
59
  type: 'list',
39
60
  search: '',
@@ -41,8 +62,9 @@ const DEFAULT_VIEW = {
41
62
  perPage: 20,
42
63
  // All fields are visible by default, so it's
43
64
  // better to keep track of the hidden ones.
44
- hiddenFields: [],
65
+ hiddenFields: [ 'preview' ],
45
66
  layout: {},
67
+ filters: [],
46
68
  };
47
69
 
48
70
  function normalizeSearchInput( input = '' ) {
@@ -81,7 +103,7 @@ function TemplateTitle( { item } ) {
81
103
  function AuthorField( { item } ) {
82
104
  const { text, icon, imageUrl } = useAddedBy( item.type, item.id );
83
105
  return (
84
- <HStack alignment="left">
106
+ <HStack alignment="left" spacing={ 1 }>
85
107
  { imageUrl ? (
86
108
  <AvatarImage imageUrl={ imageUrl } />
87
109
  ) : (
@@ -94,12 +116,116 @@ function AuthorField( { item } ) {
94
116
  );
95
117
  }
96
118
 
119
+ function TemplatePreview( { content, viewType } ) {
120
+ const settings = usePatternSettings();
121
+ const [ backgroundColor = 'white' ] = useGlobalStyle( 'color.background' );
122
+ const blocks = useMemo( () => {
123
+ return parse( content );
124
+ }, [ content ] );
125
+ if ( ! blocks?.length ) {
126
+ return null;
127
+ }
128
+ // Wrap everything in a block editor provider to ensure 'styles' that are needed
129
+ // for the previews are synced between the site editor store and the block editor store.
130
+ // Additionally we need to have the `__experimentalBlockPatterns` setting in order to
131
+ // render patterns inside the previews.
132
+ // TODO: Same approach is used in the patterns list and it becomes obvious that some of
133
+ // the block editor settings are needed in context where we don't have the block editor.
134
+ // Explore how we can solve this in a better way.
135
+ return (
136
+ <ExperimentalBlockEditorProvider settings={ settings }>
137
+ <div
138
+ className={ `page-templates-preview-field is-viewtype-${ viewType }` }
139
+ style={ { backgroundColor } }
140
+ >
141
+ <BlockPreview blocks={ blocks } />
142
+ </div>
143
+ </ExperimentalBlockEditorProvider>
144
+ );
145
+ }
146
+
97
147
  export default function DataviewsTemplates() {
98
148
  const [ view, setView ] = useState( DEFAULT_VIEW );
99
149
  const { records: allTemplates, isResolving: isLoadingData } =
100
150
  useEntityRecords( 'postType', TEMPLATE_POST_TYPE, {
101
151
  per_page: -1,
102
152
  } );
153
+
154
+ const authors = useMemo( () => {
155
+ if ( ! allTemplates ) {
156
+ return EMPTY_ARRAY;
157
+ }
158
+ const authorsSet = new Set();
159
+ allTemplates.forEach( ( template ) => {
160
+ authorsSet.add( template.author_text );
161
+ } );
162
+ return Array.from( authorsSet ).map( ( author ) => ( {
163
+ value: author,
164
+ label: author,
165
+ } ) );
166
+ }, [ allTemplates ] );
167
+
168
+ const fields = useMemo(
169
+ () => [
170
+ {
171
+ header: __( 'Preview' ),
172
+ id: 'preview',
173
+ render: ( { item, view: { type: viewType } } ) => {
174
+ return (
175
+ <TemplatePreview
176
+ content={ item.content.raw }
177
+ viewType={ viewType }
178
+ />
179
+ );
180
+ },
181
+ minWidth: 120,
182
+ maxWidth: 120,
183
+ enableSorting: false,
184
+ },
185
+ {
186
+ header: __( 'Template' ),
187
+ id: 'title',
188
+ getValue: ( { item } ) => item.title?.rendered || item.slug,
189
+ render: ( { item } ) => <TemplateTitle item={ item } />,
190
+ maxWidth: 400,
191
+ enableHiding: false,
192
+ },
193
+ {
194
+ header: __( 'Description' ),
195
+ id: 'description',
196
+ getValue: ( { item } ) => item.description,
197
+ render: ( { item } ) => {
198
+ return item.description ? (
199
+ decodeEntities( item.description )
200
+ ) : (
201
+ <>
202
+ <Text variant="muted" aria-hidden="true">
203
+ &#8212;
204
+ </Text>
205
+ <VisuallyHidden>
206
+ { __( 'No description.' ) }
207
+ </VisuallyHidden>
208
+ </>
209
+ );
210
+ },
211
+ maxWidth: 200,
212
+ enableSorting: false,
213
+ },
214
+ {
215
+ header: __( 'Author' ),
216
+ id: 'author',
217
+ getValue: ( { item } ) => item.author_text,
218
+ render: ( { item } ) => {
219
+ return <AuthorField item={ item } />;
220
+ },
221
+ enableHiding: false,
222
+ type: ENUMERATION_TYPE,
223
+ elements: authors,
224
+ },
225
+ ],
226
+ [ authors ]
227
+ );
228
+
103
229
  const { shownTemplates, paginationInfo } = useMemo( () => {
104
230
  if ( ! allTemplates ) {
105
231
  return {
@@ -123,19 +249,40 @@ export default function DataviewsTemplates() {
123
249
  );
124
250
  } );
125
251
  }
252
+
253
+ // Handle filters.
254
+ if ( view.filters.length > 0 ) {
255
+ view.filters.forEach( ( filter ) => {
256
+ if (
257
+ filter.field === 'author' &&
258
+ filter.operator === OPERATOR_IN &&
259
+ !! filter.value
260
+ ) {
261
+ filteredTemplates = filteredTemplates.filter( ( item ) => {
262
+ return item.author_text === filter.value;
263
+ } );
264
+ }
265
+ } );
266
+ }
267
+
126
268
  // Handle sorting.
127
- // TODO: Explore how this can be more dynamic..
128
269
  if ( view.sort ) {
129
- if ( view.sort.field === 'title' ) {
270
+ const stringSortingFields = [ 'title', 'author' ];
271
+ const fieldId = view.sort.field;
272
+ if ( stringSortingFields.includes( fieldId ) ) {
273
+ const fieldToSort = fields.find( ( field ) => {
274
+ return field.id === fieldId;
275
+ } );
130
276
  filteredTemplates.sort( ( a, b ) => {
131
- const titleA = a.title?.rendered || a.slug;
132
- const titleB = b.title?.rendered || b.slug;
277
+ const valueA = fieldToSort.getValue( { item: a } ) ?? '';
278
+ const valueB = fieldToSort.getValue( { item: b } ) ?? '';
133
279
  return view.sort.direction === 'asc'
134
- ? titleA.localeCompare( titleB )
135
- : titleB.localeCompare( titleA );
280
+ ? valueA.localeCompare( valueB )
281
+ : valueB.localeCompare( valueA );
136
282
  } );
137
283
  }
138
284
  }
285
+
139
286
  // Handle pagination.
140
287
  const start = ( view.page - 1 ) * view.perPage;
141
288
  const totalItems = filteredTemplates?.length || 0;
@@ -150,44 +297,8 @@ export default function DataviewsTemplates() {
150
297
  totalPages: Math.ceil( totalItems / view.perPage ),
151
298
  },
152
299
  };
153
- }, [ allTemplates, view ] );
154
- const fields = useMemo(
155
- () => [
156
- {
157
- header: __( 'Template' ),
158
- id: 'title',
159
- getValue: ( { item } ) => item.title?.rendered || item.slug,
160
- render: ( { item } ) => <TemplateTitle item={ item } />,
161
- maxWidth: 400,
162
- enableHiding: false,
163
- },
164
- {
165
- header: __( 'Description' ),
166
- id: 'description',
167
- getValue: ( { item } ) => item.description,
168
- render: ( { item } ) => {
169
- return (
170
- item.description && (
171
- <Text variant="muted">
172
- { decodeEntities( item.description ) }
173
- </Text>
174
- )
175
- );
176
- },
177
- maxWidth: 200,
178
- enableSorting: false,
179
- },
180
- {
181
- header: __( 'Author' ),
182
- id: 'author',
183
- getValue: () => {},
184
- render: ( { item } ) => <AuthorField item={ item } />,
185
- enableHiding: false,
186
- enableSorting: false,
187
- },
188
- ],
189
- []
190
- );
300
+ }, [ allTemplates, view, fields ] );
301
+
191
302
  const resetTemplateAction = useResetTemplateAction();
192
303
  const actions = useMemo(
193
304
  () => [
@@ -199,10 +310,19 @@ export default function DataviewsTemplates() {
199
310
  );
200
311
  const onChangeView = useCallback(
201
312
  ( viewUpdater ) => {
202
- const updatedView =
313
+ let updatedView =
203
314
  typeof viewUpdater === 'function'
204
315
  ? viewUpdater( view )
205
316
  : viewUpdater;
317
+ if ( updatedView.type !== view.type ) {
318
+ updatedView = {
319
+ ...updatedView,
320
+ layout: {
321
+ ...defaultConfigPerViewType[ updatedView.type ],
322
+ },
323
+ };
324
+ }
325
+
206
326
  setView( updatedView );
207
327
  },
208
328
  [ view, setView ]
@@ -214,10 +334,11 @@ export default function DataviewsTemplates() {
214
334
  fields={ fields }
215
335
  actions={ actions }
216
336
  data={ shownTemplates }
337
+ getItemId={ ( item ) => item.id }
217
338
  isLoading={ isLoadingData }
218
339
  view={ view }
219
340
  onChangeView={ onChangeView }
220
- supportedLayouts={ [ 'list' ] }
341
+ supportedLayouts={ [ 'list', 'grid' ] }
221
342
  />
222
343
  </Page>
223
344
  );
@@ -0,0 +1,13 @@
1
+ .page-templates-preview-field {
2
+ &.is-viewtype-list {
3
+ .block-editor-block-preview__container {
4
+ height: 120px;
5
+ }
6
+ }
7
+
8
+ &.is-viewtype-grid {
9
+ .block-editor-block-preview__container {
10
+ height: auto;
11
+ }
12
+ }
13
+ }
@@ -34,7 +34,7 @@ export default function EditSitePreferencesModal() {
34
34
  const { set: setPreference } = useDispatch( preferencesStore );
35
35
  const toggleDistractionFree = () => {
36
36
  registry.batch( () => {
37
- setPreference( 'core/edit-site', 'fixedToolbar', false );
37
+ setPreference( 'core/edit-site', 'fixedToolbar', true );
38
38
  setIsInserterOpened( false );
39
39
  setIsListViewOpened( false );
40
40
  closeGeneralSidebar();
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import { Button } from '@wordpress/components';
6
- import { __ } from '@wordpress/i18n';
6
+ import { __, sprintf } from '@wordpress/i18n';
7
7
  import { store as coreStore } from '@wordpress/core-data';
8
8
  import { displayShortcut } from '@wordpress/keycodes';
9
9
 
@@ -11,7 +11,10 @@ import { displayShortcut } from '@wordpress/keycodes';
11
11
  * Internal dependencies
12
12
  */
13
13
  import { store as editSiteStore } from '../../store';
14
- import { isPreviewingTheme } from '../../utils/is-previewing-theme';
14
+ import {
15
+ currentlyPreviewingTheme,
16
+ isPreviewingTheme,
17
+ } from '../../utils/is-previewing-theme';
15
18
 
16
19
  export default function SaveButton( {
17
20
  className = 'edit-site-save-button__button',
@@ -21,24 +24,34 @@ export default function SaveButton( {
21
24
  icon,
22
25
  __next40pxDefaultSize = false,
23
26
  } ) {
24
- const { isDirty, isSaving, isSaveViewOpen } = useSelect( ( select ) => {
25
- const {
26
- __experimentalGetDirtyEntityRecords,
27
- isSavingEntityRecord,
28
- isResolving,
29
- } = select( coreStore );
30
- const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
31
- const { isSaveViewOpened } = select( editSiteStore );
32
- const isActivatingTheme = isResolving( 'activateTheme' );
33
- return {
34
- isDirty: dirtyEntityRecords.length > 0,
35
- isSaving:
36
- dirtyEntityRecords.some( ( record ) =>
37
- isSavingEntityRecord( record.kind, record.name, record.key )
38
- ) || isActivatingTheme,
39
- isSaveViewOpen: isSaveViewOpened(),
40
- };
41
- }, [] );
27
+ const { isDirty, isSaving, isSaveViewOpen, previewingThemeName } =
28
+ useSelect( ( select ) => {
29
+ const {
30
+ __experimentalGetDirtyEntityRecords,
31
+ isSavingEntityRecord,
32
+ isResolving,
33
+ } = select( coreStore );
34
+ const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
35
+ const { isSaveViewOpened } = select( editSiteStore );
36
+ const isActivatingTheme = isResolving( 'activateTheme' );
37
+ const previewingTheme = select( coreStore ).getTheme(
38
+ currentlyPreviewingTheme()
39
+ );
40
+
41
+ return {
42
+ isDirty: dirtyEntityRecords.length > 0,
43
+ isSaving:
44
+ dirtyEntityRecords.some( ( record ) =>
45
+ isSavingEntityRecord(
46
+ record.kind,
47
+ record.name,
48
+ record.key
49
+ )
50
+ ) || isActivatingTheme,
51
+ isSaveViewOpen: isSaveViewOpened(),
52
+ previewingThemeName: previewingTheme?.name?.rendered,
53
+ };
54
+ }, [] );
42
55
  const { setIsSaveViewOpened } = useDispatch( editSiteStore );
43
56
 
44
57
  const activateSaveEnabled = isPreviewingTheme() || isDirty;
@@ -47,13 +60,13 @@ export default function SaveButton( {
47
60
  const getLabel = () => {
48
61
  if ( isPreviewingTheme() ) {
49
62
  if ( isSaving ) {
50
- return __( 'Activating' );
63
+ return sprintf( 'Activating %s', previewingThemeName );
51
64
  } else if ( disabled ) {
52
65
  return __( 'Saved' );
53
66
  } else if ( isDirty ) {
54
- return __( 'Activate & Save' );
67
+ return sprintf( 'Activate %s & Save', previewingThemeName );
55
68
  }
56
- return __( 'Activate' );
69
+ return sprintf( 'Activate %s', previewingThemeName );
57
70
  }
58
71
 
59
72
  if ( isSaving ) {
@@ -85,7 +98,7 @@ export default function SaveButton( {
85
98
  * Displaying the keyboard shortcut conditionally makes the tooltip
86
99
  * itself show conditionally. This would trigger a full-rerendering
87
100
  * of the button that we want to avoid. By setting `showTooltip`,
88
- & the tooltip is always rendered even when there's no keyboard shortcut.
101
+ * the tooltip is always rendered even when there's no keyboard shortcut.
89
102
  */
90
103
  showTooltip={ showTooltip }
91
104
  icon={ icon }
@@ -106,6 +106,15 @@ export default function SaveHub() {
106
106
  label = __( 'Saving' );
107
107
  }
108
108
 
109
+ const { homeUrl } = useSelect( ( select ) => {
110
+ const {
111
+ getUnstableBase, // Site index.
112
+ } = select( coreStore );
113
+ return {
114
+ homeUrl: getUnstableBase()?.home,
115
+ };
116
+ }, [] );
117
+
109
118
  const saveCurrentEntity = async () => {
110
119
  if ( ! dirtyCurrentEntity ) return;
111
120
 
@@ -135,6 +144,12 @@ export default function SaveHub() {
135
144
 
136
145
  createSuccessNotice( __( 'Site updated.' ), {
137
146
  type: 'snackbar',
147
+ actions: [
148
+ {
149
+ label: __( 'View site' ),
150
+ url: homeUrl,
151
+ },
152
+ ],
138
153
  id: saveNoticeId,
139
154
  } );
140
155
  } catch ( error ) {
@@ -18,4 +18,11 @@
18
18
  &[aria-disabled="true"]:hover {
19
19
  color: inherit;
20
20
  }
21
+
22
+ &:not(.is-primary) {
23
+ &.is-busy,
24
+ &.is-busy[aria-disabled="true"]:hover {
25
+ color: $gray-900;
26
+ }
27
+ }
21
28
  }
@@ -116,10 +116,12 @@ function CustomDataViewItem( { dataviewId, isActive } ) {
116
116
  <DropdownMenu
117
117
  icon={ moreVertical }
118
118
  label={ __( 'Actions' ) }
119
+ className="edit-site-sidebar-dataviews-dataview-item__dropdown-menu"
119
120
  toggleProps={ {
120
121
  style: {
121
122
  color: 'inherit',
122
123
  },
124
+ size: 'small',
123
125
  } }
124
126
  >
125
127
  { ( { onClose } ) => (
@@ -4,6 +4,11 @@
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { trash } from '@wordpress/icons';
6
6
 
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { OPERATOR_IN } from '../dataviews/constants';
11
+
7
12
  const DEFAULT_PAGE_BASE = {
8
13
  type: 'list',
9
14
  search: '',
@@ -33,7 +38,7 @@ const DEFAULT_VIEWS = {
33
38
  view: {
34
39
  ...DEFAULT_PAGE_BASE,
35
40
  filters: [
36
- { field: 'status', operator: 'in', value: 'draft' },
41
+ { field: 'status', operator: OPERATOR_IN, value: 'draft' },
37
42
  ],
38
43
  },
39
44
  },
@@ -44,7 +49,7 @@ const DEFAULT_VIEWS = {
44
49
  view: {
45
50
  ...DEFAULT_PAGE_BASE,
46
51
  filters: [
47
- { field: 'status', operator: 'in', value: 'trash' },
52
+ { field: 'status', operator: OPERATOR_IN, value: 'trash' },
48
53
  ],
49
54
  },
50
55
  },
@@ -8,6 +8,13 @@
8
8
  }
9
9
 
10
10
  .edit-site-sidebar-dataviews-dataview-item {
11
+ border-radius: $radius-block-ui;
12
+ padding-right: $grid-unit-10;
13
+
14
+ .edit-site-sidebar-dataviews-dataview-item__dropdown-menu {
15
+ min-width: initial;
16
+ }
17
+
11
18
  &:hover,
12
19
  &:focus,
13
20
  &[aria-current] {