@wordpress/edit-site 6.2.0 → 6.4.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 (368) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-pattern/index.js +8 -2
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/{add-new-page → add-new-post}/index.js +21 -17
  5. package/build/components/add-new-post/index.js.map +1 -0
  6. package/build/components/add-new-template/index.js +3 -1
  7. package/build/components/add-new-template/index.js.map +1 -1
  8. package/build/components/block-editor/use-site-editor-settings.js +6 -85
  9. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  10. package/build/components/editor/index.js +21 -3
  11. package/build/components/editor/index.js.map +1 -1
  12. package/build/components/global-styles/background-panel.js +0 -5
  13. package/build/components/global-styles/background-panel.js.map +1 -1
  14. package/build/components/global-styles/block-preview-panel.js +14 -5
  15. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  16. package/build/components/global-styles/font-families.js +42 -23
  17. package/build/components/global-styles/font-families.js.map +1 -1
  18. package/build/components/global-styles/font-library-modal/font-collection.js +13 -30
  19. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  20. package/build/components/global-styles/font-library-modal/index.js +4 -4
  21. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  22. package/build/components/global-styles/font-library-modal/installed-fonts.js +60 -12
  23. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  24. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +39 -0
  25. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  26. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +39 -0
  27. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  28. package/build/components/global-styles/font-sizes/font-size-preview.js +44 -0
  29. package/build/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  30. package/build/components/global-styles/font-sizes/font-size.js +213 -0
  31. package/build/components/global-styles/font-sizes/font-size.js.map +1 -0
  32. package/build/components/global-styles/font-sizes/font-sizes-count.js +50 -0
  33. package/build/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  34. package/build/components/global-styles/font-sizes/font-sizes.js +163 -0
  35. package/build/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  36. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js +67 -0
  37. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  38. package/build/components/global-styles/hooks.js +0 -40
  39. package/build/components/global-styles/hooks.js.map +1 -1
  40. package/build/components/global-styles/preview-typography.js +47 -0
  41. package/build/components/global-styles/preview-typography.js.map +1 -0
  42. package/build/components/global-styles/screen-block.js +17 -1
  43. package/build/components/global-styles/screen-block.js.map +1 -1
  44. package/build/components/global-styles/screen-layout.js +5 -1
  45. package/build/components/global-styles/screen-layout.js.map +1 -1
  46. package/build/components/global-styles/screen-revisions/revisions-buttons.js +1 -1
  47. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  48. package/build/components/global-styles/screen-style-variations.js +2 -2
  49. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  50. package/build/components/global-styles/screen-typography.js +3 -2
  51. package/build/components/global-styles/screen-typography.js.map +1 -1
  52. package/build/components/global-styles/shadows-edit-panel.js +1 -2
  53. package/build/components/global-styles/shadows-edit-panel.js.map +1 -1
  54. package/build/components/global-styles/size-control/index.js +85 -0
  55. package/build/components/global-styles/size-control/index.js.map +1 -0
  56. package/build/components/global-styles/style-variations-container.js +8 -5
  57. package/build/components/global-styles/style-variations-container.js.map +1 -1
  58. package/build/components/global-styles/typography-elements.js +0 -2
  59. package/build/components/global-styles/typography-elements.js.map +1 -1
  60. package/build/components/global-styles/ui.js +8 -0
  61. package/build/components/global-styles/ui.js.map +1 -1
  62. package/build/components/global-styles/variations/variation.js +4 -4
  63. package/build/components/global-styles/variations/variation.js.map +1 -1
  64. package/build/components/global-styles/variations/variations-color.js +4 -3
  65. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  66. package/build/components/global-styles/variations/variations-typography.js +15 -29
  67. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  68. package/build/components/global-styles-sidebar/index.js +2 -2
  69. package/build/components/global-styles-sidebar/index.js.map +1 -1
  70. package/build/components/layout/index.js +22 -8
  71. package/build/components/layout/index.js.map +1 -1
  72. package/build/components/layout/router.js +30 -43
  73. package/build/components/layout/router.js.map +1 -1
  74. package/build/components/page-patterns/header.js +1 -1
  75. package/build/components/page-patterns/header.js.map +1 -1
  76. package/build/components/page-patterns/index.js +65 -49
  77. package/build/components/page-patterns/index.js.map +1 -1
  78. package/build/components/page-patterns/search-items.js +29 -4
  79. package/build/components/page-patterns/search-items.js.map +1 -1
  80. package/build/components/page-patterns/use-patterns.js +22 -55
  81. package/build/components/page-patterns/use-patterns.js.map +1 -1
  82. package/build/components/page-templates/index.js +56 -50
  83. package/build/components/page-templates/index.js.map +1 -1
  84. package/build/components/pagination/index.js +4 -4
  85. package/build/components/pagination/index.js.map +1 -1
  86. package/build/components/post-edit/index.js +105 -0
  87. package/build/components/post-edit/index.js.map +1 -0
  88. package/build/components/post-fields/index.js +314 -0
  89. package/build/components/post-fields/index.js.map +1 -0
  90. package/build/components/post-list/index.js +281 -0
  91. package/build/components/post-list/index.js.map +1 -0
  92. package/build/components/posts-app/index.js +11 -17
  93. package/build/components/posts-app/index.js.map +1 -1
  94. package/build/components/posts-app/router.js +85 -0
  95. package/build/components/posts-app/router.js.map +1 -0
  96. package/build/components/revisions/index.js +10 -7
  97. package/build/components/revisions/index.js.map +1 -1
  98. package/build/components/save-panel/index.js +1 -1
  99. package/build/components/save-panel/index.js.map +1 -1
  100. package/build/components/sidebar-dataviews/add-new-view.js +4 -1
  101. package/build/components/sidebar-dataviews/add-new-view.js.map +1 -1
  102. package/build/components/sidebar-dataviews/custom-dataviews-list.js +6 -2
  103. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  104. package/build/components/sidebar-dataviews/default-views.js +119 -93
  105. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  106. package/build/components/sidebar-dataviews/index.js +44 -2
  107. package/build/components/sidebar-dataviews/index.js.map +1 -1
  108. package/build/components/sidebar-navigation-screen-global-styles/content.js +64 -0
  109. package/build/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  110. package/build/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  111. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  112. package/build/components/sidebar-navigation-screen-navigation-menu/rename-modal.js +3 -2
  113. package/build/components/sidebar-navigation-screen-navigation-menu/rename-modal.js.map +1 -1
  114. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +3 -2
  115. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  116. package/build/components/site-hub/index.js +81 -1
  117. package/build/components/site-hub/index.js.map +1 -1
  118. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -1
  119. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  120. package/build/hooks/push-changes-to-global-styles/index.js +2 -2
  121. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  122. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +65 -42
  123. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  124. package/build/index.js +10 -0
  125. package/build/index.js.map +1 -1
  126. package/build/posts.js +57 -2
  127. package/build/posts.js.map +1 -1
  128. package/build/store/private-actions.js +7 -2
  129. package/build/store/private-actions.js.map +1 -1
  130. package/build/store/selectors.js +34 -6
  131. package/build/store/selectors.js.map +1 -1
  132. package/build/utils/get-filtered-template-parts.js +64 -0
  133. package/build/utils/get-filtered-template-parts.js.map +1 -0
  134. package/build-module/components/add-new-pattern/index.js +8 -2
  135. package/build-module/components/add-new-pattern/index.js.map +1 -1
  136. package/build-module/components/{add-new-page → add-new-post}/index.js +21 -17
  137. package/build-module/components/add-new-post/index.js.map +1 -0
  138. package/build-module/components/add-new-template/index.js +3 -1
  139. package/build-module/components/add-new-template/index.js.map +1 -1
  140. package/build-module/components/block-editor/use-site-editor-settings.js +6 -85
  141. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  142. package/build-module/components/editor/index.js +21 -3
  143. package/build-module/components/editor/index.js.map +1 -1
  144. package/build-module/components/global-styles/background-panel.js +0 -5
  145. package/build-module/components/global-styles/background-panel.js.map +1 -1
  146. package/build-module/components/global-styles/block-preview-panel.js +14 -5
  147. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  148. package/build-module/components/global-styles/font-families.js +44 -25
  149. package/build-module/components/global-styles/font-families.js.map +1 -1
  150. package/build-module/components/global-styles/font-library-modal/font-collection.js +14 -31
  151. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  152. package/build-module/components/global-styles/font-library-modal/index.js +4 -4
  153. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  154. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +63 -15
  155. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  156. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +32 -0
  157. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  158. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +32 -0
  159. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  160. package/build-module/components/global-styles/font-sizes/font-size-preview.js +37 -0
  161. package/build-module/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  162. package/build-module/components/global-styles/font-sizes/font-size.js +207 -0
  163. package/build-module/components/global-styles/font-sizes/font-size.js.map +1 -0
  164. package/build-module/components/global-styles/font-sizes/font-sizes-count.js +43 -0
  165. package/build-module/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  166. package/build-module/components/global-styles/font-sizes/font-sizes.js +157 -0
  167. package/build-module/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  168. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js +61 -0
  169. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  170. package/build-module/components/global-styles/hooks.js +0 -38
  171. package/build-module/components/global-styles/hooks.js.map +1 -1
  172. package/build-module/components/global-styles/preview-typography.js +39 -0
  173. package/build-module/components/global-styles/preview-typography.js.map +1 -0
  174. package/build-module/components/global-styles/screen-block.js +18 -1
  175. package/build-module/components/global-styles/screen-block.js.map +1 -1
  176. package/build-module/components/global-styles/screen-layout.js +5 -1
  177. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  178. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +1 -1
  179. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  180. package/build-module/components/global-styles/screen-style-variations.js +2 -2
  181. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  182. package/build-module/components/global-styles/screen-typography.js +3 -2
  183. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  184. package/build-module/components/global-styles/shadows-edit-panel.js +1 -2
  185. package/build-module/components/global-styles/shadows-edit-panel.js.map +1 -1
  186. package/build-module/components/global-styles/size-control/index.js +79 -0
  187. package/build-module/components/global-styles/size-control/index.js.map +1 -0
  188. package/build-module/components/global-styles/style-variations-container.js +9 -6
  189. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  190. package/build-module/components/global-styles/typography-elements.js +0 -2
  191. package/build-module/components/global-styles/typography-elements.js.map +1 -1
  192. package/build-module/components/global-styles/ui.js +8 -0
  193. package/build-module/components/global-styles/ui.js.map +1 -1
  194. package/build-module/components/global-styles/variations/variation.js +5 -5
  195. package/build-module/components/global-styles/variations/variation.js.map +1 -1
  196. package/build-module/components/global-styles/variations/variations-color.js +5 -4
  197. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  198. package/build-module/components/global-styles/variations/variations-typography.js +16 -30
  199. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  200. package/build-module/components/global-styles-sidebar/index.js +2 -2
  201. package/build-module/components/global-styles-sidebar/index.js.map +1 -1
  202. package/build-module/components/layout/index.js +20 -8
  203. package/build-module/components/layout/index.js.map +1 -1
  204. package/build-module/components/layout/router.js +30 -43
  205. package/build-module/components/layout/router.js.map +1 -1
  206. package/build-module/components/page-patterns/header.js +1 -1
  207. package/build-module/components/page-patterns/header.js.map +1 -1
  208. package/build-module/components/page-patterns/index.js +66 -50
  209. package/build-module/components/page-patterns/index.js.map +1 -1
  210. package/build-module/components/page-patterns/search-items.js +28 -4
  211. package/build-module/components/page-patterns/search-items.js.map +1 -1
  212. package/build-module/components/page-patterns/use-patterns.js +23 -56
  213. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  214. package/build-module/components/page-templates/index.js +58 -53
  215. package/build-module/components/page-templates/index.js.map +1 -1
  216. package/build-module/components/pagination/index.js +4 -4
  217. package/build-module/components/pagination/index.js.map +1 -1
  218. package/build-module/components/post-edit/index.js +98 -0
  219. package/build-module/components/post-edit/index.js.map +1 -0
  220. package/build-module/components/post-fields/index.js +306 -0
  221. package/build-module/components/post-fields/index.js.map +1 -0
  222. package/build-module/components/post-list/index.js +275 -0
  223. package/build-module/components/post-list/index.js.map +1 -0
  224. package/build-module/components/posts-app/index.js +11 -17
  225. package/build-module/components/posts-app/index.js.map +1 -1
  226. package/build-module/components/posts-app/router.js +77 -0
  227. package/build-module/components/posts-app/router.js.map +1 -0
  228. package/build-module/components/revisions/index.js +10 -7
  229. package/build-module/components/revisions/index.js.map +1 -1
  230. package/build-module/components/save-panel/index.js +1 -1
  231. package/build-module/components/save-panel/index.js.map +1 -1
  232. package/build-module/components/sidebar-dataviews/add-new-view.js +4 -1
  233. package/build-module/components/sidebar-dataviews/add-new-view.js.map +1 -1
  234. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +6 -2
  235. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  236. package/build-module/components/sidebar-dataviews/default-views.js +117 -92
  237. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  238. package/build-module/components/sidebar-dataviews/index.js +47 -5
  239. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  240. package/build-module/components/sidebar-navigation-screen-global-styles/content.js +57 -0
  241. package/build-module/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  242. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  243. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  244. package/build-module/components/sidebar-navigation-screen-navigation-menu/rename-modal.js +3 -2
  245. package/build-module/components/sidebar-navigation-screen-navigation-menu/rename-modal.js.map +1 -1
  246. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +3 -2
  247. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  248. package/build-module/components/site-hub/index.js +81 -1
  249. package/build-module/components/site-hub/index.js.map +1 -1
  250. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -1
  251. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  252. package/build-module/hooks/push-changes-to-global-styles/index.js +2 -2
  253. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  254. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +61 -38
  255. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  256. package/build-module/index.js +11 -2
  257. package/build-module/index.js.map +1 -1
  258. package/build-module/posts.js +57 -2
  259. package/build-module/posts.js.map +1 -1
  260. package/build-module/store/private-actions.js +7 -2
  261. package/build-module/store/private-actions.js.map +1 -1
  262. package/build-module/store/selectors.js +35 -7
  263. package/build-module/store/selectors.js.map +1 -1
  264. package/build-module/utils/get-filtered-template-parts.js +57 -0
  265. package/build-module/utils/get-filtered-template-parts.js.map +1 -0
  266. package/build-style/posts-rtl.css +668 -510
  267. package/build-style/posts.css +668 -510
  268. package/build-style/style-rtl.css +772 -702
  269. package/build-style/style.css +772 -702
  270. package/package.json +41 -41
  271. package/src/components/add-new-pattern/index.js +8 -2
  272. package/src/components/{add-new-page → add-new-post}/index.js +28 -22
  273. package/src/components/add-new-template/index.js +4 -1
  274. package/src/components/add-new-template/style.scss +4 -6
  275. package/src/components/block-editor/use-site-editor-settings.js +10 -101
  276. package/src/components/editor/index.js +21 -5
  277. package/src/components/global-styles/background-panel.js +0 -8
  278. package/src/components/global-styles/block-preview-panel.js +22 -9
  279. package/src/components/global-styles/font-families.js +66 -31
  280. package/src/components/global-styles/font-library-modal/font-collection.js +17 -32
  281. package/src/components/global-styles/font-library-modal/index.js +4 -2
  282. package/src/components/global-styles/font-library-modal/installed-fonts.js +94 -13
  283. package/src/components/global-styles/font-library-modal/style.scss +26 -10
  284. package/src/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +43 -0
  285. package/src/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +37 -0
  286. package/src/components/global-styles/font-sizes/font-size-preview.js +43 -0
  287. package/src/components/global-styles/font-sizes/font-size.js +250 -0
  288. package/src/components/global-styles/font-sizes/font-sizes-count.js +40 -0
  289. package/src/components/global-styles/font-sizes/font-sizes.js +263 -0
  290. package/src/components/global-styles/font-sizes/rename-font-size-dialog.js +70 -0
  291. package/src/components/global-styles/hooks.js +0 -41
  292. package/src/components/global-styles/preview-typography.js +39 -0
  293. package/src/components/global-styles/screen-block.js +20 -0
  294. package/src/components/global-styles/screen-layout.js +5 -1
  295. package/src/components/global-styles/screen-revisions/revisions-buttons.js +1 -1
  296. package/src/components/global-styles/screen-style-variations.js +2 -2
  297. package/src/components/global-styles/screen-typography.js +3 -2
  298. package/src/components/global-styles/shadows-edit-panel.js +1 -2
  299. package/src/components/global-styles/size-control/index.js +86 -0
  300. package/src/components/global-styles/style-variations-container.js +14 -7
  301. package/src/components/global-styles/style.scss +13 -3
  302. package/src/components/global-styles/typography-elements.js +0 -4
  303. package/src/components/global-styles/ui.js +10 -0
  304. package/src/components/global-styles/variations/variation.js +5 -5
  305. package/src/components/global-styles/variations/variations-color.js +6 -4
  306. package/src/components/global-styles/variations/variations-typography.js +15 -33
  307. package/src/components/global-styles-sidebar/index.js +2 -2
  308. package/src/components/layout/index.js +24 -4
  309. package/src/components/layout/router.js +29 -37
  310. package/src/components/layout/style.scss +38 -8
  311. package/src/components/page-patterns/header.js +1 -1
  312. package/src/components/page-patterns/index.js +62 -64
  313. package/src/components/page-patterns/search-items.js +37 -3
  314. package/src/components/page-patterns/style.scss +1 -8
  315. package/src/components/page-patterns/use-patterns.js +43 -82
  316. package/src/components/page-templates/index.js +67 -64
  317. package/src/components/page-templates/style.scss +6 -9
  318. package/src/components/pagination/index.js +4 -4
  319. package/src/components/post-edit/index.js +96 -0
  320. package/src/components/post-edit/style.scss +9 -0
  321. package/src/components/post-fields/index.js +345 -0
  322. package/src/components/post-list/index.js +326 -0
  323. package/src/components/{page-pages → post-list}/style.scss +25 -8
  324. package/src/components/posts-app/index.js +9 -11
  325. package/src/components/posts-app/router.js +69 -0
  326. package/src/components/revisions/index.js +9 -1
  327. package/src/components/save-panel/index.js +1 -1
  328. package/src/components/sidebar/style.scss +6 -0
  329. package/src/components/sidebar-dataviews/add-new-view.js +2 -1
  330. package/src/components/sidebar-dataviews/custom-dataviews-list.js +6 -2
  331. package/src/components/sidebar-dataviews/default-views.js +131 -106
  332. package/src/components/sidebar-dataviews/index.js +39 -4
  333. package/src/components/sidebar-navigation-screen-global-styles/content.js +55 -0
  334. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -54
  335. package/src/components/sidebar-navigation-screen-navigation-menu/rename-modal.js +2 -1
  336. package/src/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +10 -2
  337. package/src/components/site-hub/index.js +84 -1
  338. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -2
  339. package/src/hooks/push-changes-to-global-styles/index.js +2 -2
  340. package/src/hooks/use-theme-style-variations/test/use-theme-style-variations-by-property.js +28 -24
  341. package/src/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +72 -47
  342. package/src/index.js +14 -1
  343. package/src/posts.js +63 -2
  344. package/src/posts.scss +9 -0
  345. package/src/store/private-actions.js +7 -3
  346. package/src/store/selectors.js +53 -14
  347. package/src/store/test/selectors.js +1 -26
  348. package/src/style.scss +2 -2
  349. package/src/utils/get-filtered-template-parts.js +61 -0
  350. package/src/utils/test/get-filtered-template-parts.js +127 -0
  351. package/build/components/add-new-page/index.js.map +0 -1
  352. package/build/components/global-styles/screen-background.js +0 -36
  353. package/build/components/global-styles/screen-background.js.map +0 -1
  354. package/build/components/page-pages/index.js +0 -473
  355. package/build/components/page-pages/index.js.map +0 -1
  356. package/build/components/table/index.js +0 -35
  357. package/build/components/table/index.js.map +0 -1
  358. package/build-module/components/add-new-page/index.js.map +0 -1
  359. package/build-module/components/global-styles/screen-background.js +0 -30
  360. package/build-module/components/global-styles/screen-background.js.map +0 -1
  361. package/build-module/components/page-pages/index.js +0 -465
  362. package/build-module/components/page-pages/index.js.map +0 -1
  363. package/build-module/components/table/index.js +0 -30
  364. package/build-module/components/table/index.js.map +0 -1
  365. package/src/components/global-styles/screen-background.js +0 -29
  366. package/src/components/page-pages/index.js +0 -564
  367. package/src/components/table/index.js +0 -33
  368. package/src/components/table/style.scss +0 -38
@@ -5,7 +5,6 @@ import { parse } from '@wordpress/blocks';
5
5
  import { useSelect, createSelector } from '@wordpress/data';
6
6
  import { store as coreStore } from '@wordpress/core-data';
7
7
  import { store as editorStore } from '@wordpress/editor';
8
- import { decodeEntities } from '@wordpress/html-entities';
9
8
 
10
9
  /**
11
10
  * Internal dependencies
@@ -16,7 +15,6 @@ import {
16
15
  PATTERN_TYPES,
17
16
  PATTERN_SYNC_TYPES,
18
17
  TEMPLATE_PART_POST_TYPE,
19
- TEMPLATE_ORIGINS,
20
18
  TEMPLATE_PART_AREA_DEFAULT_CATEGORY,
21
19
  } from '../../utils/constants';
22
20
  import { unlock } from '../../lock-unlock';
@@ -25,38 +23,16 @@ import { store as editSiteStore } from '../../store';
25
23
 
26
24
  const EMPTY_PATTERN_LIST = [];
27
25
 
28
- const createTemplatePartId = ( theme, slug ) =>
29
- theme && slug ? theme + '//' + slug : null;
30
-
31
- const templatePartToPattern = ( templatePart ) => ( {
32
- blocks: parse( templatePart.content.raw, {
33
- __unstableSkipMigrationLogs: true,
34
- } ),
35
- categories: [ templatePart.area ],
36
- description: templatePart.description || '',
37
- isCustom: templatePart.source === TEMPLATE_ORIGINS.custom,
38
- keywords: templatePart.keywords || [],
39
- id: createTemplatePartId( templatePart.theme, templatePart.slug ),
40
- name: createTemplatePartId( templatePart.theme, templatePart.slug ),
41
- title: decodeEntities( templatePart.title.rendered ),
42
- type: templatePart.type,
43
- _links: templatePart._links,
44
- templatePart,
45
- } );
46
-
47
- const selectTemplatePartsAsPatterns = createSelector(
26
+ const selectTemplateParts = createSelector(
48
27
  ( select, categoryId, search = '' ) => {
49
28
  const { getEntityRecords, isResolving: isResolvingSelector } =
50
29
  select( coreStore );
51
30
  const { __experimentalGetDefaultTemplatePartAreas } =
52
31
  select( editorStore );
53
32
  const query = { per_page: -1 };
54
- const rawTemplateParts =
33
+ const templateParts =
55
34
  getEntityRecords( 'postType', TEMPLATE_PART_POST_TYPE, query ) ??
56
35
  EMPTY_PATTERN_LIST;
57
- const templateParts = rawTemplateParts.map( ( templatePart ) =>
58
- templatePartToPattern( templatePart )
59
- );
60
36
 
61
37
  // In the case where a custom template part area has been removed we need
62
38
  // the current list of areas to cross check against so orphaned template
@@ -66,12 +42,12 @@ const selectTemplatePartsAsPatterns = createSelector(
66
42
 
67
43
  const templatePartHasCategory = ( item, category ) => {
68
44
  if ( category !== TEMPLATE_PART_AREA_DEFAULT_CATEGORY ) {
69
- return item.templatePart.area === category;
45
+ return item.area === category;
70
46
  }
71
47
 
72
48
  return (
73
- item.templatePart.area === category ||
74
- ! templatePartAreas.includes( item.templatePart.area )
49
+ item.area === category ||
50
+ ! templatePartAreas.includes( item.area )
75
51
  );
76
52
  };
77
53
 
@@ -152,8 +128,11 @@ const selectPatterns = createSelector(
152
128
  patterns: themePatterns,
153
129
  isResolving: isResolvingThemePatterns,
154
130
  } = selectThemePatterns( select );
155
- const { patterns: userPatterns, isResolving: isResolvingUserPatterns } =
156
- selectUserPatterns( select );
131
+ const {
132
+ patterns: userPatterns,
133
+ isResolving: isResolvingUserPatterns,
134
+ categories: userPatternCategories,
135
+ } = selectUserPatterns( select );
157
136
 
158
137
  let patterns = [
159
138
  ...( themePatterns || [] ),
@@ -165,7 +144,8 @@ const selectPatterns = createSelector(
165
144
  // Non-user patterns are all unsynced for the time being.
166
145
  patterns = patterns.filter( ( pattern ) => {
167
146
  return pattern.type === PATTERN_TYPES.user
168
- ? pattern.syncStatus === syncStatus
147
+ ? ( pattern.wp_pattern_sync_status ||
148
+ PATTERN_SYNC_TYPES.full ) === syncStatus
169
149
  : syncStatus === PATTERN_SYNC_TYPES.unsynced;
170
150
  } );
171
151
  }
@@ -173,12 +153,35 @@ const selectPatterns = createSelector(
173
153
  if ( categoryId ) {
174
154
  patterns = searchItems( patterns, search, {
175
155
  categoryId,
176
- hasCategory: ( item, currentCategory ) =>
177
- item.categories?.includes( currentCategory ),
156
+ hasCategory: ( item, currentCategory ) => {
157
+ if ( item.type === PATTERN_TYPES.user ) {
158
+ return item.wp_pattern_category.some(
159
+ ( catId ) =>
160
+ userPatternCategories.find(
161
+ ( cat ) => cat.id === catId
162
+ )?.slug === currentCategory
163
+ );
164
+ }
165
+ return item.categories?.includes( currentCategory );
166
+ },
178
167
  } );
179
168
  } else {
180
169
  patterns = searchItems( patterns, search, {
181
- hasCategory: ( item ) => ! item.hasOwnProperty( 'categories' ),
170
+ hasCategory: ( item ) => {
171
+ if ( item.type === PATTERN_TYPES.user ) {
172
+ return (
173
+ userPatternCategories?.length &&
174
+ ( ! item.wp_pattern_category?.length ||
175
+ ! item.wp_pattern_category.some( ( catId ) =>
176
+ userPatternCategories.find(
177
+ ( cat ) => cat.id === catId
178
+ )
179
+ ) )
180
+ );
181
+ }
182
+
183
+ return ! item.hasOwnProperty( 'categories' );
184
+ },
182
185
  } );
183
186
  }
184
187
  return {
@@ -192,41 +195,6 @@ const selectPatterns = createSelector(
192
195
  ]
193
196
  );
194
197
 
195
- /**
196
- * Converts a post of type `wp_block` to a 'pattern item' that more closely
197
- * matches the structure of theme provided patterns.
198
- *
199
- * @param {Object} patternPost The `wp_block` record being normalized.
200
- * @param {Map} categories A Map of user created categories.
201
- *
202
- * @return {Object} The normalized item.
203
- */
204
- const convertPatternPostToItem = ( patternPost, categories ) => ( {
205
- blocks: parse( patternPost.content.raw, {
206
- __unstableSkipMigrationLogs: true,
207
- } ),
208
- ...( patternPost.wp_pattern_category.length > 0 && {
209
- categories: patternPost.wp_pattern_category.map(
210
- ( patternCategoryId ) =>
211
- categories && categories.get( patternCategoryId )
212
- ? categories.get( patternCategoryId ).slug
213
- : patternCategoryId
214
- ),
215
- } ),
216
- termLabels: patternPost.wp_pattern_category.map( ( patternCategoryId ) =>
217
- categories?.get( patternCategoryId )
218
- ? categories.get( patternCategoryId ).label
219
- : patternCategoryId
220
- ),
221
- id: patternPost.id,
222
- name: patternPost.slug,
223
- syncStatus: patternPost.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full,
224
- title: patternPost.title.raw,
225
- type: patternPost.type,
226
- description: patternPost.excerpt.raw,
227
- patternPost,
228
- } );
229
-
230
198
  const selectUserPatterns = createSelector(
231
199
  ( select, syncStatus, search = '' ) => {
232
200
  const {
@@ -246,12 +214,7 @@ const selectUserPatterns = createSelector(
246
214
  userPatternCategories.forEach( ( userCategory ) =>
247
215
  categories.set( userCategory.id, userCategory )
248
216
  );
249
- let patterns = patternPosts
250
- ? patternPosts.map( ( record ) =>
251
- convertPatternPostToItem( record, categories )
252
- )
253
- : EMPTY_PATTERN_LIST;
254
-
217
+ let patterns = patternPosts ?? EMPTY_PATTERN_LIST;
255
218
  const isResolving = isResolvingSelector( 'getEntityRecords', [
256
219
  'postType',
257
220
  PATTERN_TYPES.user,
@@ -260,7 +223,9 @@ const selectUserPatterns = createSelector(
260
223
 
261
224
  if ( syncStatus ) {
262
225
  patterns = patterns.filter(
263
- ( pattern ) => pattern.syncStatus === syncStatus
226
+ ( pattern ) =>
227
+ pattern.wp_pattern_sync_status ||
228
+ PATTERN_SYNC_TYPES.full === syncStatus
264
229
  );
265
230
  }
266
231
 
@@ -298,11 +263,7 @@ export const usePatterns = (
298
263
  return useSelect(
299
264
  ( select ) => {
300
265
  if ( postType === TEMPLATE_PART_POST_TYPE ) {
301
- return selectTemplatePartsAsPatterns(
302
- select,
303
- categoryId,
304
- search
305
- );
266
+ return selectTemplateParts( select, categoryId, search );
306
267
  } else if ( postType === PATTERN_TYPES.user && !! categoryId ) {
307
268
  const appliedCategory =
308
269
  categoryId === 'uncategorized' ? '' : categoryId;
@@ -6,12 +6,7 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import {
10
- Icon,
11
- __experimentalText as Text,
12
- __experimentalHStack as HStack,
13
- VisuallyHidden,
14
- } from '@wordpress/components';
9
+ import { Icon, __experimentalHStack as HStack } from '@wordpress/components';
15
10
  import { __ } from '@wordpress/i18n';
16
11
  import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
17
12
  import { useEntityRecords } from '@wordpress/core-data';
@@ -23,7 +18,10 @@ import {
23
18
  } from '@wordpress/block-editor';
24
19
  import { DataViews, filterSortAndPaginate } from '@wordpress/dataviews';
25
20
  import { privateApis as routerPrivateApis } from '@wordpress/router';
26
- import { privateApis as editorPrivateApis } from '@wordpress/editor';
21
+ import {
22
+ privateApis as editorPrivateApis,
23
+ EditorProvider,
24
+ } from '@wordpress/editor';
27
25
 
28
26
  /**
29
27
  * Internal dependencies
@@ -47,25 +45,53 @@ import { useEditPostAction } from '../dataviews-actions';
47
45
 
48
46
  const { usePostActions } = unlock( editorPrivateApis );
49
47
 
50
- const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock(
51
- blockEditorPrivateApis
52
- );
48
+ const { useGlobalStyle } = unlock( blockEditorPrivateApis );
53
49
  const { useHistory, useLocation } = unlock( routerPrivateApis );
54
50
 
55
51
  const EMPTY_ARRAY = [];
56
52
 
57
- const defaultConfigPerViewType = {
53
+ const defaultLayouts = {
58
54
  [ LAYOUT_TABLE ]: {
59
- primaryField: 'title',
55
+ fields: [ 'template', 'author' ],
56
+ layout: {
57
+ primaryField: 'title',
58
+ combinedFields: [
59
+ {
60
+ id: 'template',
61
+ label: __( 'Template' ),
62
+ children: [ 'title', 'description' ],
63
+ direction: 'vertical',
64
+ },
65
+ ],
66
+ styles: {
67
+ template: {
68
+ maxWidth: 400,
69
+ minWidth: 320,
70
+ },
71
+ preview: {
72
+ minWidth: 120,
73
+ maxWidth: 120,
74
+ },
75
+ author: {
76
+ width: '1%',
77
+ },
78
+ },
79
+ },
60
80
  },
61
81
  [ LAYOUT_GRID ]: {
62
- mediaField: 'preview',
63
- primaryField: 'title',
64
- columnFields: [ 'description' ],
82
+ fields: [ 'title', 'description', 'author' ],
83
+ layout: {
84
+ mediaField: 'preview',
85
+ primaryField: 'title',
86
+ columnFields: [ 'description' ],
87
+ },
65
88
  },
66
89
  [ LAYOUT_LIST ]: {
67
- primaryField: 'title',
68
- mediaField: 'preview',
90
+ fields: [ 'title', 'description', 'author' ],
91
+ layout: {
92
+ primaryField: 'title',
93
+ mediaField: 'preview',
94
+ },
69
95
  },
70
96
  };
71
97
 
@@ -78,10 +104,8 @@ const DEFAULT_VIEW = {
78
104
  field: 'title',
79
105
  direction: 'asc',
80
106
  },
81
- // All fields are visible by default, so it's
82
- // better to keep track of the hidden ones.
83
- hiddenFields: [ 'preview' ],
84
- layout: defaultConfigPerViewType[ LAYOUT_GRID ],
107
+ fields: defaultLayouts[ LAYOUT_GRID ].fields,
108
+ layout: defaultLayouts[ LAYOUT_GRID ].layout,
85
109
  filters: [],
86
110
  };
87
111
 
@@ -103,14 +127,13 @@ function Title( { item, viewType } ) {
103
127
  );
104
128
  }
105
129
 
106
- function AuthorField( { item, viewType } ) {
130
+ function AuthorField( { item } ) {
107
131
  const [ isImageLoaded, setIsImageLoaded ] = useState( false );
108
132
  const { text, icon, imageUrl } = useAddedBy( item.type, item.id );
109
- const withIcon = viewType !== LAYOUT_LIST;
110
133
 
111
134
  return (
112
- <HStack alignment="left" spacing={ 1 }>
113
- { withIcon && imageUrl && (
135
+ <HStack alignment="left" spacing={ 0 }>
136
+ { imageUrl && (
114
137
  <div
115
138
  className={ clsx( 'page-templates-author-field__avatar', {
116
139
  'is-loaded': isImageLoaded,
@@ -123,7 +146,7 @@ function AuthorField( { item, viewType } ) {
123
146
  />
124
147
  </div>
125
148
  ) }
126
- { withIcon && ! imageUrl && (
149
+ { ! imageUrl && (
127
150
  <div className="page-templates-author-field__icon">
128
151
  <Icon icon={ icon } />
129
152
  </div>
@@ -154,7 +177,7 @@ function Preview( { item, viewType } ) {
154
177
  // the block editor settings are needed in context where we don't have the block editor.
155
178
  // Explore how we can solve this in a better way.
156
179
  return (
157
- <ExperimentalBlockEditorProvider settings={ settings }>
180
+ <EditorProvider post={ item } settings={ settings }>
158
181
  <div
159
182
  className={ `page-templates-preview-field is-viewtype-${ viewType }` }
160
183
  style={ { backgroundColor } }
@@ -180,7 +203,7 @@ function Preview( { item, viewType } ) {
180
203
  </button>
181
204
  ) }
182
205
  </div>
183
- </ExperimentalBlockEditorProvider>
206
+ </EditorProvider>
184
207
  );
185
208
  }
186
209
 
@@ -194,7 +217,8 @@ export default function PageTemplates() {
194
217
  return {
195
218
  ...DEFAULT_VIEW,
196
219
  type: usedType,
197
- layout: defaultConfigPerViewType[ usedType ],
220
+ layout: defaultLayouts[ usedType ].layout,
221
+ fields: defaultLayouts[ usedType ].fields,
198
222
  filters:
199
223
  activeView !== 'all'
200
224
  ? [
@@ -232,12 +256,13 @@ export default function PageTemplates() {
232
256
  }
233
257
  );
234
258
  const history = useHistory();
235
- const onSelectionChange = useCallback(
259
+ const onChangeSelection = useCallback(
236
260
  ( items ) => {
261
+ setSelection( items );
237
262
  if ( view?.type === LAYOUT_LIST ) {
238
263
  history.push( {
239
264
  ...params,
240
- postId: items.length === 1 ? items[ 0 ].id : undefined,
265
+ postId: items.length === 1 ? items[ 0 ] : undefined,
241
266
  } );
242
267
  }
243
268
  },
@@ -261,61 +286,46 @@ export default function PageTemplates() {
261
286
  const fields = useMemo(
262
287
  () => [
263
288
  {
264
- header: __( 'Preview' ),
289
+ label: __( 'Preview' ),
265
290
  id: 'preview',
266
291
  render: ( { item } ) => {
267
292
  return <Preview item={ item } viewType={ view.type } />;
268
293
  },
269
- minWidth: 120,
270
- maxWidth: 120,
271
294
  enableSorting: false,
272
295
  },
273
296
  {
274
- header: __( 'Template' ),
297
+ label: __( 'Template' ),
275
298
  id: 'title',
276
299
  getValue: ( { item } ) => item.title?.rendered,
277
300
  render: ( { item } ) => (
278
301
  <Title item={ item } viewType={ view.type } />
279
302
  ),
280
- maxWidth: 400,
281
303
  enableHiding: false,
282
304
  enableGlobalSearch: true,
283
305
  },
284
306
  {
285
- header: __( 'Description' ),
307
+ label: __( 'Description' ),
286
308
  id: 'description',
287
309
  render: ( { item } ) => {
288
- return item.description ? (
289
- <span className="page-templates-description">
290
- { decodeEntities( item.description ) }
291
- </span>
292
- ) : (
293
- view.type === LAYOUT_TABLE && (
294
- <>
295
- <Text variant="muted" aria-hidden="true">
296
- &#8212;
297
- </Text>
298
- <VisuallyHidden>
299
- { __( 'No description.' ) }
300
- </VisuallyHidden>
301
- </>
310
+ return (
311
+ item.description && (
312
+ <span className="page-templates-description">
313
+ { decodeEntities( item.description ) }
314
+ </span>
302
315
  )
303
316
  );
304
317
  },
305
- maxWidth: 400,
306
- minWidth: 320,
307
318
  enableSorting: false,
308
319
  enableGlobalSearch: true,
309
320
  },
310
321
  {
311
- header: __( 'Author' ),
322
+ label: __( 'Author' ),
312
323
  id: 'author',
313
324
  getValue: ( { item } ) => item.author_text,
314
325
  render: ( { item } ) => {
315
326
  return <AuthorField viewType={ view.type } item={ item } />;
316
327
  },
317
328
  elements: authors,
318
- width: '1%',
319
329
  },
320
330
  ],
321
331
  [ authors, view.type ]
@@ -338,13 +348,6 @@ export default function PageTemplates() {
338
348
  const onChangeView = useCallback(
339
349
  ( newView ) => {
340
350
  if ( newView.type !== view.type ) {
341
- newView = {
342
- ...newView,
343
- layout: {
344
- ...defaultConfigPerViewType[ newView.type ],
345
- },
346
- };
347
-
348
351
  history.push( {
349
352
  ...params,
350
353
  layout: newView.type,
@@ -370,9 +373,9 @@ export default function PageTemplates() {
370
373
  isLoading={ isLoadingData }
371
374
  view={ view }
372
375
  onChangeView={ onChangeView }
373
- onSelectionChange={ onSelectionChange }
376
+ onChangeSelection={ onChangeSelection }
374
377
  selection={ selection }
375
- setSelection={ setSelection }
378
+ defaultLayouts={ defaultLayouts }
376
379
  />
377
380
  </Page>
378
381
  );
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  height: 100%;
5
- border-radius: 3px 3px 0 0;
5
+ width: 100%;
6
6
 
7
7
  .page-templates-preview-field__button {
8
8
  box-shadow: none;
@@ -13,7 +13,7 @@
13
13
  cursor: pointer;
14
14
  overflow: hidden;
15
15
  height: 100%;
16
- border-radius: 3px;
16
+ border-radius: $grid-unit-05;
17
17
 
18
18
  &:focus-visible {
19
19
  box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
@@ -32,10 +32,6 @@
32
32
  .block-editor-block-preview__container {
33
33
  height: 100%;
34
34
  }
35
-
36
- .page-templates-preview-field__button {
37
- border-radius: 3px 3px 0 0;
38
- }
39
35
  }
40
36
 
41
37
  &.is-viewtype-table {
@@ -72,12 +68,12 @@
72
68
  width: $grid-unit-30;
73
69
  height: $grid-unit-30;
74
70
  align-items: center;
75
- justify-content: center;
71
+ justify-content: left;
76
72
  display: flex;
77
73
 
78
74
  img {
79
- width: 20px;
80
- height: 20px;
75
+ width: $grid-unit-20;
76
+ height: $grid-unit-20;
81
77
  object-fit: cover;
82
78
  opacity: 0;
83
79
  transition: opacity 0.1s linear;
@@ -99,6 +95,7 @@
99
95
  height: $grid-unit-30;
100
96
 
101
97
  svg {
98
+ margin-left: -$grid-unit-05;
102
99
  fill: currentColor;
103
100
  }
104
101
  }
@@ -47,7 +47,7 @@ export default function Pagination( {
47
47
  <Button
48
48
  variant={ buttonVariant }
49
49
  onClick={ () => changePage( 1 ) }
50
- __experimentalIsFocusable
50
+ accessibleWhenDisabled
51
51
  disabled={ disabled || currentPage === 1 }
52
52
  label={ __( 'First page' ) }
53
53
  icon={ previous }
@@ -56,7 +56,7 @@ export default function Pagination( {
56
56
  <Button
57
57
  variant={ buttonVariant }
58
58
  onClick={ () => changePage( currentPage - 1 ) }
59
- __experimentalIsFocusable
59
+ accessibleWhenDisabled
60
60
  disabled={ disabled || currentPage === 1 }
61
61
  label={ __( 'Previous page' ) }
62
62
  icon={ chevronLeft }
@@ -75,7 +75,7 @@ export default function Pagination( {
75
75
  <Button
76
76
  variant={ buttonVariant }
77
77
  onClick={ () => changePage( currentPage + 1 ) }
78
- __experimentalIsFocusable
78
+ accessibleWhenDisabled
79
79
  disabled={ disabled || currentPage === numPages }
80
80
  label={ __( 'Next page' ) }
81
81
  icon={ chevronRight }
@@ -84,7 +84,7 @@ export default function Pagination( {
84
84
  <Button
85
85
  variant={ buttonVariant }
86
86
  onClick={ () => changePage( numPages ) }
87
- __experimentalIsFocusable
87
+ accessibleWhenDisabled
88
88
  disabled={ disabled || currentPage === numPages }
89
89
  label={ __( 'Last page' ) }
90
90
  icon={ next }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+ import { DataForm } from '@wordpress/dataviews';
11
+ import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
12
+ import { store as coreDataStore } from '@wordpress/core-data';
13
+ import { Button } from '@wordpress/components';
14
+ import { useState, useMemo } from '@wordpress/element';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import Page from '../page';
20
+ import usePostFields from '../post-fields';
21
+
22
+ function PostEditForm( { postType, postId } ) {
23
+ const ids = useMemo( () => postId.split( ',' ), [ postId ] );
24
+ const { initialEdits } = useSelect(
25
+ ( select ) => {
26
+ if ( ids.length !== 1 ) {
27
+ }
28
+ return {
29
+ initialEdits:
30
+ ids.length === 1
31
+ ? select( coreDataStore ).getEntityRecord(
32
+ 'postType',
33
+ postType,
34
+ ids[ 0 ]
35
+ )
36
+ : null,
37
+ };
38
+ },
39
+ [ postType, ids ]
40
+ );
41
+ const registry = useRegistry();
42
+ const { saveEntityRecord } = useDispatch( coreDataStore );
43
+ const { fields } = usePostFields();
44
+ const form = {
45
+ visibleFields: [ 'title' ],
46
+ };
47
+ const [ edits, setEdits ] = useState( {} );
48
+ const itemWithEdits = useMemo( () => {
49
+ return {
50
+ ...initialEdits,
51
+ ...edits,
52
+ };
53
+ }, [ initialEdits, edits ] );
54
+ const onSubmit = async ( event ) => {
55
+ event.preventDefault();
56
+ const { getEntityRecord } = registry.resolveSelect( coreDataStore );
57
+ for ( const id of ids ) {
58
+ const item = await getEntityRecord( 'postType', postType, id );
59
+ saveEntityRecord( 'postType', postType, {
60
+ ...item,
61
+ ...edits,
62
+ } );
63
+ }
64
+ setEdits( {} );
65
+ };
66
+
67
+ return (
68
+ <form onSubmit={ onSubmit }>
69
+ <DataForm
70
+ data={ itemWithEdits }
71
+ fields={ fields }
72
+ form={ form }
73
+ onChange={ setEdits }
74
+ />
75
+ <Button variant="primary" type="submit">
76
+ { __( 'Update' ) }
77
+ </Button>
78
+ </form>
79
+ );
80
+ }
81
+
82
+ export function PostEdit( { postType, postId } ) {
83
+ return (
84
+ <Page
85
+ className={ clsx( 'edit-site-post-edit', {
86
+ 'is-empty': ! postId,
87
+ } ) }
88
+ label={ __( 'Post Edit' ) }
89
+ >
90
+ { postId && (
91
+ <PostEditForm postType={ postType } postId={ postId } />
92
+ ) }
93
+ { ! postId && <p>{ __( 'Select a page to edit' ) }</p> }
94
+ </Page>
95
+ );
96
+ }
@@ -0,0 +1,9 @@
1
+ .edit-site-post-edit {
2
+ padding: $grid-unit-30;
3
+
4
+ &.is-empty .edit-site-page-content {
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ }
9
+ }