@wordpress/edit-site 6.3.0 → 6.5.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 (334) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-pattern/index.js +14 -3
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-post/index.js +2 -1
  5. package/build/components/add-new-post/index.js.map +1 -1
  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/add-new-template/utils.js +2 -2
  9. package/build/components/add-new-template/utils.js.map +1 -1
  10. package/build/components/block-editor/use-site-editor-settings.js +1 -82
  11. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  12. package/build/components/editor/index.js +71 -20
  13. package/build/components/editor/index.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 +40 -22
  17. package/build/components/global-styles/font-families.js.map +1 -1
  18. package/build/components/global-styles/font-library-modal/context.js +0 -5
  19. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  20. package/build/components/global-styles/font-library-modal/font-collection.js +25 -5
  21. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  22. package/build/components/global-styles/font-library-modal/index.js +5 -12
  23. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  24. package/build/components/global-styles/font-library-modal/installed-fonts.js +78 -15
  25. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  26. package/build/components/global-styles/font-library-modal/upload-fonts.js +2 -3
  27. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  28. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +39 -0
  29. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  30. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +39 -0
  31. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  32. package/build/components/global-styles/font-sizes/font-size-preview.js +44 -0
  33. package/build/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  34. package/build/components/global-styles/font-sizes/font-size.js +213 -0
  35. package/build/components/global-styles/font-sizes/font-size.js.map +1 -0
  36. package/build/components/global-styles/font-sizes/font-sizes-count.js +50 -0
  37. package/build/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  38. package/build/components/global-styles/font-sizes/font-sizes.js +163 -0
  39. package/build/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  40. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js +67 -0
  41. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  42. package/build/components/global-styles/screen-block.js +10 -8
  43. package/build/components/global-styles/screen-block.js.map +1 -1
  44. package/build/components/global-styles/screen-style-variations.js +2 -2
  45. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  46. package/build/components/global-styles/screen-typeset.js +40 -0
  47. package/build/components/global-styles/screen-typeset.js.map +1 -0
  48. package/build/components/global-styles/screen-typography-element.js +14 -0
  49. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  50. package/build/components/global-styles/screen-typography.js +5 -6
  51. package/build/components/global-styles/screen-typography.js.map +1 -1
  52. package/build/components/global-styles/shadows-edit-panel.js +50 -59
  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 +3 -0
  57. package/build/components/global-styles/style-variations-container.js.map +1 -1
  58. package/build/components/global-styles/typeset-button.js +97 -0
  59. package/build/components/global-styles/typeset-button.js.map +1 -0
  60. package/build/components/global-styles/typeset.js +80 -0
  61. package/build/components/global-styles/typeset.js.map +1 -0
  62. package/build/components/global-styles/ui.js +12 -0
  63. package/build/components/global-styles/ui.js.map +1 -1
  64. package/build/components/global-styles/utils.js +10 -1
  65. package/build/components/global-styles/utils.js.map +1 -1
  66. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  67. package/build/components/global-styles/variations/variations-typography.js +1 -1
  68. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  69. package/build/components/layout/index.js +6 -0
  70. package/build/components/layout/index.js.map +1 -1
  71. package/build/components/layout/router.js +14 -6
  72. package/build/components/layout/router.js.map +1 -1
  73. package/build/components/page-patterns/fields.js +230 -0
  74. package/build/components/page-patterns/fields.js.map +1 -0
  75. package/build/components/page-patterns/header.js +1 -1
  76. package/build/components/page-patterns/header.js.map +1 -1
  77. package/build/components/page-patterns/index.js +21 -227
  78. package/build/components/page-patterns/index.js.map +1 -1
  79. package/build/components/page-patterns/use-patterns.js +26 -1
  80. package/build/components/page-patterns/use-patterns.js.map +1 -1
  81. package/build/components/page-templates/fields.js +169 -0
  82. package/build/components/page-templates/fields.js.map +1 -0
  83. package/build/components/page-templates/index.js +38 -198
  84. package/build/components/page-templates/index.js.map +1 -1
  85. package/build/components/post-edit/index.js +117 -0
  86. package/build/components/post-edit/index.js.map +1 -0
  87. package/build/components/post-fields/index.js +318 -0
  88. package/build/components/post-fields/index.js.map +1 -0
  89. package/build/components/post-list/index.js +339 -0
  90. package/build/components/post-list/index.js.map +1 -0
  91. package/build/components/posts-app/router.js +3 -3
  92. package/build/components/posts-app/router.js.map +1 -1
  93. package/build/components/sidebar-dataviews/add-new-view.js +2 -2
  94. package/build/components/sidebar-dataviews/add-new-view.js.map +1 -1
  95. package/build/components/sidebar-dataviews/dataview-item.js +2 -3
  96. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -1
  97. package/build/components/sidebar-dataviews/default-views.js +103 -91
  98. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  99. package/build/components/sidebar-dataviews/index.js +2 -2
  100. package/build/components/sidebar-dataviews/index.js.map +1 -1
  101. package/build/components/sidebar-navigation-screen-global-styles/content.js +64 -0
  102. package/build/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  103. package/build/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  104. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  105. package/build/components/site-hub/index.js +6 -3
  106. package/build/components/site-hub/index.js.map +1 -1
  107. package/build/components/style-book/index.js +22 -25
  108. package/build/components/style-book/index.js.map +1 -1
  109. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  110. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  111. package/build/hooks/push-changes-to-global-styles/index.js +3 -4
  112. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  113. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -4
  114. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  115. package/build/index.js +4 -2
  116. package/build/index.js.map +1 -1
  117. package/build/store/selectors.js +34 -6
  118. package/build/store/selectors.js.map +1 -1
  119. package/build/utils/get-filtered-template-parts.js +64 -0
  120. package/build/utils/get-filtered-template-parts.js.map +1 -0
  121. package/build-module/components/add-new-pattern/index.js +14 -3
  122. package/build-module/components/add-new-pattern/index.js.map +1 -1
  123. package/build-module/components/add-new-post/index.js +2 -1
  124. package/build-module/components/add-new-post/index.js.map +1 -1
  125. package/build-module/components/add-new-template/index.js +3 -1
  126. package/build-module/components/add-new-template/index.js.map +1 -1
  127. package/build-module/components/add-new-template/utils.js +2 -2
  128. package/build-module/components/add-new-template/utils.js.map +1 -1
  129. package/build-module/components/block-editor/use-site-editor-settings.js +1 -82
  130. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  131. package/build-module/components/editor/index.js +73 -22
  132. package/build-module/components/editor/index.js.map +1 -1
  133. package/build-module/components/global-styles/block-preview-panel.js +14 -5
  134. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  135. package/build-module/components/global-styles/font-families.js +42 -24
  136. package/build-module/components/global-styles/font-families.js.map +1 -1
  137. package/build-module/components/global-styles/font-library-modal/context.js +0 -5
  138. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  139. package/build-module/components/global-styles/font-library-modal/font-collection.js +26 -6
  140. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  141. package/build-module/components/global-styles/font-library-modal/index.js +5 -12
  142. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  143. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +81 -18
  144. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  145. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +2 -3
  146. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  147. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +32 -0
  148. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  149. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +32 -0
  150. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  151. package/build-module/components/global-styles/font-sizes/font-size-preview.js +37 -0
  152. package/build-module/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  153. package/build-module/components/global-styles/font-sizes/font-size.js +207 -0
  154. package/build-module/components/global-styles/font-sizes/font-size.js.map +1 -0
  155. package/build-module/components/global-styles/font-sizes/font-sizes-count.js +43 -0
  156. package/build-module/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  157. package/build-module/components/global-styles/font-sizes/font-sizes.js +157 -0
  158. package/build-module/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  159. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js +61 -0
  160. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  161. package/build-module/components/global-styles/screen-block.js +10 -8
  162. package/build-module/components/global-styles/screen-block.js.map +1 -1
  163. package/build-module/components/global-styles/screen-style-variations.js +2 -2
  164. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  165. package/build-module/components/global-styles/screen-typeset.js +34 -0
  166. package/build-module/components/global-styles/screen-typeset.js.map +1 -0
  167. package/build-module/components/global-styles/screen-typography-element.js +14 -0
  168. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  169. package/build-module/components/global-styles/screen-typography.js +5 -6
  170. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  171. package/build-module/components/global-styles/shadows-edit-panel.js +51 -60
  172. package/build-module/components/global-styles/shadows-edit-panel.js.map +1 -1
  173. package/build-module/components/global-styles/size-control/index.js +79 -0
  174. package/build-module/components/global-styles/size-control/index.js.map +1 -0
  175. package/build-module/components/global-styles/style-variations-container.js +3 -0
  176. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  177. package/build-module/components/global-styles/typeset-button.js +89 -0
  178. package/build-module/components/global-styles/typeset-button.js.map +1 -0
  179. package/build-module/components/global-styles/typeset.js +71 -0
  180. package/build-module/components/global-styles/typeset.js.map +1 -0
  181. package/build-module/components/global-styles/ui.js +12 -0
  182. package/build-module/components/global-styles/ui.js.map +1 -1
  183. package/build-module/components/global-styles/utils.js +10 -1
  184. package/build-module/components/global-styles/utils.js.map +1 -1
  185. package/build-module/components/global-styles/variations/variations-color.js +1 -1
  186. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  187. package/build-module/components/global-styles/variations/variations-typography.js +1 -2
  188. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  189. package/build-module/components/layout/index.js +6 -0
  190. package/build-module/components/layout/index.js.map +1 -1
  191. package/build-module/components/layout/router.js +14 -6
  192. package/build-module/components/layout/router.js.map +1 -1
  193. package/build-module/components/page-patterns/fields.js +223 -0
  194. package/build-module/components/page-patterns/fields.js.map +1 -0
  195. package/build-module/components/page-patterns/header.js +1 -1
  196. package/build-module/components/page-patterns/header.js.map +1 -1
  197. package/build-module/components/page-patterns/index.js +24 -230
  198. package/build-module/components/page-patterns/index.js.map +1 -1
  199. package/build-module/components/page-patterns/use-patterns.js +26 -1
  200. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  201. package/build-module/components/page-templates/fields.js +160 -0
  202. package/build-module/components/page-templates/fields.js.map +1 -0
  203. package/build-module/components/page-templates/index.js +39 -199
  204. package/build-module/components/page-templates/index.js.map +1 -1
  205. package/build-module/components/post-edit/index.js +110 -0
  206. package/build-module/components/post-edit/index.js.map +1 -0
  207. package/build-module/components/post-fields/index.js +310 -0
  208. package/build-module/components/post-fields/index.js.map +1 -0
  209. package/build-module/components/post-list/index.js +333 -0
  210. package/build-module/components/post-list/index.js.map +1 -0
  211. package/build-module/components/posts-app/router.js +3 -3
  212. package/build-module/components/posts-app/router.js.map +1 -1
  213. package/build-module/components/sidebar-dataviews/add-new-view.js +2 -2
  214. package/build-module/components/sidebar-dataviews/add-new-view.js.map +1 -1
  215. package/build-module/components/sidebar-dataviews/dataview-item.js +2 -3
  216. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -1
  217. package/build-module/components/sidebar-dataviews/default-views.js +102 -90
  218. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  219. package/build-module/components/sidebar-dataviews/index.js +5 -5
  220. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  221. package/build-module/components/sidebar-navigation-screen-global-styles/content.js +57 -0
  222. package/build-module/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  223. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  224. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  225. package/build-module/components/site-hub/index.js +7 -4
  226. package/build-module/components/site-hub/index.js.map +1 -1
  227. package/build-module/components/style-book/index.js +23 -26
  228. package/build-module/components/style-book/index.js.map +1 -1
  229. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  230. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  231. package/build-module/hooks/push-changes-to-global-styles/index.js +3 -4
  232. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  233. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -3
  234. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  235. package/build-module/index.js +4 -2
  236. package/build-module/index.js.map +1 -1
  237. package/build-module/store/selectors.js +35 -7
  238. package/build-module/store/selectors.js.map +1 -1
  239. package/build-module/utils/get-filtered-template-parts.js +57 -0
  240. package/build-module/utils/get-filtered-template-parts.js.map +1 -0
  241. package/build-style/posts-rtl.css +749 -492
  242. package/build-style/posts.css +749 -492
  243. package/build-style/style-rtl.css +956 -613
  244. package/build-style/style.css +956 -613
  245. package/package.json +41 -41
  246. package/src/components/add-new-pattern/index.js +16 -5
  247. package/src/components/add-new-post/index.js +2 -1
  248. package/src/components/add-new-template/index.js +4 -1
  249. package/src/components/add-new-template/style.scss +4 -6
  250. package/src/components/add-new-template/utils.js +10 -6
  251. package/src/components/block-editor/use-site-editor-settings.js +15 -111
  252. package/src/components/editor/index.js +80 -22
  253. package/src/components/editor/style.scss +59 -1
  254. package/src/components/global-styles/block-preview-panel.js +22 -9
  255. package/src/components/global-styles/font-families.js +65 -32
  256. package/src/components/global-styles/font-library-modal/context.js +0 -5
  257. package/src/components/global-styles/font-library-modal/font-collection.js +34 -10
  258. package/src/components/global-styles/font-library-modal/index.js +6 -9
  259. package/src/components/global-styles/font-library-modal/installed-fonts.js +115 -16
  260. package/src/components/global-styles/font-library-modal/style.scss +9 -0
  261. package/src/components/global-styles/font-library-modal/upload-fonts.js +2 -2
  262. package/src/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +43 -0
  263. package/src/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +37 -0
  264. package/src/components/global-styles/font-sizes/font-size-preview.js +43 -0
  265. package/src/components/global-styles/font-sizes/font-size.js +250 -0
  266. package/src/components/global-styles/font-sizes/font-sizes-count.js +40 -0
  267. package/src/components/global-styles/font-sizes/font-sizes.js +263 -0
  268. package/src/components/global-styles/font-sizes/rename-font-size-dialog.js +70 -0
  269. package/src/components/global-styles/screen-block.js +12 -14
  270. package/src/components/global-styles/screen-style-variations.js +2 -2
  271. package/src/components/global-styles/screen-typeset.js +42 -0
  272. package/src/components/global-styles/screen-typography-element.js +14 -0
  273. package/src/components/global-styles/screen-typography.js +7 -6
  274. package/src/components/global-styles/shadows-edit-panel.js +66 -73
  275. package/src/components/global-styles/size-control/index.js +86 -0
  276. package/src/components/global-styles/style-variations-container.js +4 -0
  277. package/src/components/global-styles/style.scss +17 -10
  278. package/src/components/global-styles/typeset-button.js +93 -0
  279. package/src/components/global-styles/typeset.js +73 -0
  280. package/src/components/global-styles/ui.js +15 -0
  281. package/src/components/global-styles/utils.js +13 -1
  282. package/src/components/global-styles/variations/variations-color.js +1 -1
  283. package/src/components/global-styles/variations/variations-typography.js +1 -2
  284. package/src/components/layout/index.js +11 -0
  285. package/src/components/layout/router.js +13 -5
  286. package/src/components/layout/style.scss +34 -8
  287. package/src/components/page-patterns/fields.js +251 -0
  288. package/src/components/page-patterns/header.js +1 -1
  289. package/src/components/page-patterns/index.js +24 -246
  290. package/src/components/page-patterns/style.scss +82 -85
  291. package/src/components/page-patterns/use-patterns.js +31 -1
  292. package/src/components/page-templates/fields.js +157 -0
  293. package/src/components/page-templates/index.js +46 -192
  294. package/src/components/page-templates/style.scss +19 -8
  295. package/src/components/post-edit/index.js +115 -0
  296. package/src/components/post-edit/style.scss +9 -0
  297. package/src/components/post-fields/index.js +357 -0
  298. package/src/components/post-list/index.js +386 -0
  299. package/src/components/{posts-app → post-list}/style.scss +12 -9
  300. package/src/components/posts-app/router.js +3 -3
  301. package/src/components/sidebar-dataviews/add-new-view.js +2 -4
  302. package/src/components/sidebar-dataviews/dataview-item.js +2 -2
  303. package/src/components/sidebar-dataviews/default-views.js +116 -104
  304. package/src/components/sidebar-dataviews/index.js +4 -3
  305. package/src/components/sidebar-navigation-screen-global-styles/content.js +55 -0
  306. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -55
  307. package/src/components/site-hub/index.js +11 -2
  308. package/src/components/site-icon/style.scss +4 -1
  309. package/src/components/style-book/index.js +27 -32
  310. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  311. package/src/hooks/push-changes-to-global-styles/index.js +3 -4
  312. package/src/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -3
  313. package/src/index.js +6 -2
  314. package/src/posts.scss +1 -1
  315. package/src/store/selectors.js +53 -14
  316. package/src/store/test/selectors.js +1 -26
  317. package/src/style.scss +2 -1
  318. package/src/utils/get-filtered-template-parts.js +61 -0
  319. package/src/utils/test/get-filtered-template-parts.js +127 -0
  320. package/build/components/global-styles/screen-background.js +0 -36
  321. package/build/components/global-styles/screen-background.js.map +0 -1
  322. package/build/components/posts-app/posts-list.js +0 -568
  323. package/build/components/posts-app/posts-list.js.map +0 -1
  324. package/build/utils/clone-deep.js +0 -15
  325. package/build/utils/clone-deep.js.map +0 -1
  326. package/build-module/components/global-styles/screen-background.js +0 -30
  327. package/build-module/components/global-styles/screen-background.js.map +0 -1
  328. package/build-module/components/posts-app/posts-list.js +0 -560
  329. package/build-module/components/posts-app/posts-list.js.map +0 -1
  330. package/build-module/utils/clone-deep.js +0 -9
  331. package/build-module/utils/clone-deep.js.map +0 -1
  332. package/src/components/global-styles/screen-background.js +0 -29
  333. package/src/components/posts-app/posts-list.js +0 -651
  334. package/src/utils/clone-deep.js +0 -8
@@ -0,0 +1,386 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { Button } from '@wordpress/components';
5
+ import {
6
+ store as coreStore,
7
+ privateApis as coreDataPrivateApis,
8
+ } from '@wordpress/core-data';
9
+ import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
10
+ import { privateApis as routerPrivateApis } from '@wordpress/router';
11
+ import { useSelect, useDispatch } from '@wordpress/data';
12
+ import { DataViews, filterSortAndPaginate } from '@wordpress/dataviews';
13
+ import { privateApis as editorPrivateApis } from '@wordpress/editor';
14
+ import { __ } from '@wordpress/i18n';
15
+ import { drawerRight } from '@wordpress/icons';
16
+
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import Page from '../page';
21
+ import {
22
+ useDefaultViews,
23
+ defaultLayouts,
24
+ } from '../sidebar-dataviews/default-views';
25
+ import {
26
+ OPERATOR_IS_ANY,
27
+ OPERATOR_IS_NONE,
28
+ LAYOUT_LIST,
29
+ } from '../../utils/constants';
30
+
31
+ import AddNewPostModal from '../add-new-post';
32
+ import { unlock } from '../../lock-unlock';
33
+ import { useEditPostAction } from '../dataviews-actions';
34
+ import { usePrevious } from '@wordpress/compose';
35
+ import usePostFields from '../post-fields';
36
+
37
+ const { usePostActions } = unlock( editorPrivateApis );
38
+ const { useLocation, useHistory } = unlock( routerPrivateApis );
39
+ const { useEntityRecordsWithPermissions } = unlock( coreDataPrivateApis );
40
+ const EMPTY_ARRAY = [];
41
+
42
+ const getDefaultView = ( defaultViews, activeView ) => {
43
+ return defaultViews.find( ( { slug } ) => slug === activeView )?.view;
44
+ };
45
+
46
+ const getCustomView = ( editedEntityRecord ) => {
47
+ if ( ! editedEntityRecord?.content ) {
48
+ return undefined;
49
+ }
50
+
51
+ const content = JSON.parse( editedEntityRecord.content );
52
+ if ( ! content ) {
53
+ return undefined;
54
+ }
55
+
56
+ return {
57
+ ...content,
58
+ layout: defaultLayouts[ content.type ]?.layout,
59
+ };
60
+ };
61
+
62
+ /**
63
+ * This function abstracts working with default & custom views by
64
+ * providing a [ state, setState ] tuple based on the URL parameters.
65
+ *
66
+ * Consumers use the provided tuple to work with state
67
+ * and don't have to deal with the specifics of default & custom views.
68
+ *
69
+ * @param {string} postType Post type to retrieve default views for.
70
+ * @return {Array} The [ state, setState ] tuple.
71
+ */
72
+ function useView( postType ) {
73
+ const {
74
+ params: { activeView = 'all', isCustom = 'false', layout },
75
+ } = useLocation();
76
+ const history = useHistory();
77
+
78
+ const defaultViews = useDefaultViews( { postType } );
79
+ const { editEntityRecord } = useDispatch( coreStore );
80
+ const editedEntityRecord = useSelect(
81
+ ( select ) => {
82
+ if ( isCustom !== 'true' ) {
83
+ return undefined;
84
+ }
85
+
86
+ const { getEditedEntityRecord } = select( coreStore );
87
+ return getEditedEntityRecord(
88
+ 'postType',
89
+ 'wp_dataviews',
90
+ Number( activeView )
91
+ );
92
+ },
93
+ [ activeView, isCustom ]
94
+ );
95
+ const [ view, setView ] = useState( () => {
96
+ let initialView;
97
+ if ( isCustom === 'true' ) {
98
+ initialView = getCustomView( editedEntityRecord ) ?? {
99
+ type: layout ?? LAYOUT_LIST,
100
+ };
101
+ } else {
102
+ initialView = getDefaultView( defaultViews, activeView ) ?? {
103
+ type: layout ?? LAYOUT_LIST,
104
+ };
105
+ }
106
+
107
+ const type = layout ?? initialView.type;
108
+ return {
109
+ ...initialView,
110
+ type,
111
+ };
112
+ } );
113
+
114
+ const setViewWithUrlUpdate = useCallback(
115
+ ( newView ) => {
116
+ const { params } = history.getLocationWithParams();
117
+
118
+ if ( newView.type === LAYOUT_LIST && ! params?.layout ) {
119
+ // Skip updating the layout URL param if
120
+ // it is not present and the newView.type is LAYOUT_LIST.
121
+ } else if ( newView.type !== params?.layout ) {
122
+ history.push( {
123
+ ...params,
124
+ layout: newView.type,
125
+ } );
126
+ }
127
+
128
+ setView( newView );
129
+
130
+ if ( isCustom === 'true' && editedEntityRecord?.id ) {
131
+ editEntityRecord(
132
+ 'postType',
133
+ 'wp_dataviews',
134
+ editedEntityRecord?.id,
135
+ {
136
+ content: JSON.stringify( newView ),
137
+ }
138
+ );
139
+ }
140
+ },
141
+ [ history, isCustom, editEntityRecord, editedEntityRecord?.id ]
142
+ );
143
+
144
+ // When layout URL param changes, update the view type
145
+ // without affecting any other config.
146
+ useEffect( () => {
147
+ setView( ( prevView ) => ( {
148
+ ...prevView,
149
+ type: layout ?? LAYOUT_LIST,
150
+ } ) );
151
+ }, [ layout ] );
152
+
153
+ // When activeView or isCustom URL parameters change, reset the view.
154
+ useEffect( () => {
155
+ let newView;
156
+ if ( isCustom === 'true' ) {
157
+ newView = getCustomView( editedEntityRecord );
158
+ } else {
159
+ newView = getDefaultView( defaultViews, activeView );
160
+ }
161
+
162
+ if ( newView ) {
163
+ const type = layout ?? newView.type;
164
+ setView( {
165
+ ...newView,
166
+ type,
167
+ } );
168
+ }
169
+ }, [ activeView, isCustom, layout, defaultViews, editedEntityRecord ] );
170
+
171
+ return [ view, setViewWithUrlUpdate, setViewWithUrlUpdate ];
172
+ }
173
+
174
+ const DEFAULT_STATUSES = 'draft,future,pending,private,publish'; // All but 'trash'.
175
+
176
+ function getItemId( item ) {
177
+ return item.id.toString();
178
+ }
179
+
180
+ export default function PostList( { postType } ) {
181
+ const [ view, setView ] = useView( postType );
182
+ const history = useHistory();
183
+ const location = useLocation();
184
+ const {
185
+ postId,
186
+ quickEdit = false,
187
+ isCustom,
188
+ activeView = 'all',
189
+ } = location.params;
190
+ const [ selection, setSelection ] = useState( postId?.split( ',' ) ?? [] );
191
+ const onChangeSelection = useCallback(
192
+ ( items ) => {
193
+ setSelection( items );
194
+ const { params } = history.getLocationWithParams();
195
+ if ( ( params.isCustom ?? 'false' ) === 'false' ) {
196
+ history.push( {
197
+ ...params,
198
+ postId: items.join( ',' ),
199
+ } );
200
+ }
201
+ },
202
+ [ history ]
203
+ );
204
+
205
+ const { isLoading: isLoadingFields, fields } = usePostFields( view.type );
206
+
207
+ const queryArgs = useMemo( () => {
208
+ const filters = {};
209
+ view.filters?.forEach( ( filter ) => {
210
+ if (
211
+ filter.field === 'status' &&
212
+ filter.operator === OPERATOR_IS_ANY
213
+ ) {
214
+ filters.status = filter.value;
215
+ }
216
+ if (
217
+ filter.field === 'author' &&
218
+ filter.operator === OPERATOR_IS_ANY
219
+ ) {
220
+ filters.author = filter.value;
221
+ } else if (
222
+ filter.field === 'author' &&
223
+ filter.operator === OPERATOR_IS_NONE
224
+ ) {
225
+ filters.author_exclude = filter.value;
226
+ }
227
+ } );
228
+ // We want to provide a different default item for the status filter
229
+ // than the REST API provides.
230
+ if ( ! filters.status || filters.status === '' ) {
231
+ filters.status = DEFAULT_STATUSES;
232
+ }
233
+
234
+ return {
235
+ per_page: view.perPage,
236
+ page: view.page,
237
+ _embed: 'author',
238
+ order: view.sort?.direction,
239
+ orderby: view.sort?.field,
240
+ search: view.search,
241
+ ...filters,
242
+ };
243
+ }, [ view ] );
244
+ const {
245
+ records,
246
+ isResolving: isLoadingData,
247
+ totalItems,
248
+ totalPages,
249
+ } = useEntityRecordsWithPermissions( 'postType', postType, queryArgs );
250
+
251
+ // The REST API sort the authors by ID, but we want to sort them by name.
252
+ const data = useMemo( () => {
253
+ if ( ! isLoadingFields && view?.sort?.field === 'author' ) {
254
+ return filterSortAndPaginate(
255
+ records,
256
+ { sort: { ...view.sort } },
257
+ fields
258
+ ).data;
259
+ }
260
+
261
+ return records;
262
+ }, [ records, fields, isLoadingFields, view?.sort ] );
263
+
264
+ const ids = data?.map( ( record ) => getItemId( record ) ) ?? [];
265
+ const prevIds = usePrevious( ids ) ?? [];
266
+ const deletedIds = prevIds.filter( ( id ) => ! ids.includes( id ) );
267
+ const postIdWasDeleted = deletedIds.includes( postId );
268
+
269
+ useEffect( () => {
270
+ if ( postIdWasDeleted ) {
271
+ history.push( {
272
+ ...history.getLocationWithParams().params,
273
+ postId: undefined,
274
+ } );
275
+ }
276
+ }, [ postIdWasDeleted, history ] );
277
+
278
+ const paginationInfo = useMemo(
279
+ () => ( {
280
+ totalItems,
281
+ totalPages,
282
+ } ),
283
+ [ totalItems, totalPages ]
284
+ );
285
+
286
+ const { labels, canCreateRecord } = useSelect(
287
+ ( select ) => {
288
+ const { getPostType, canUser } = select( coreStore );
289
+ return {
290
+ labels: getPostType( postType )?.labels,
291
+ canCreateRecord: canUser( 'create', {
292
+ kind: 'postType',
293
+ name: postType,
294
+ } ),
295
+ };
296
+ },
297
+ [ postType ]
298
+ );
299
+
300
+ const postTypeActions = usePostActions( {
301
+ postType,
302
+ context: 'list',
303
+ } );
304
+ const editAction = useEditPostAction();
305
+ const actions = useMemo(
306
+ () => [ editAction, ...postTypeActions ],
307
+ [ postTypeActions, editAction ]
308
+ );
309
+
310
+ const [ showAddPostModal, setShowAddPostModal ] = useState( false );
311
+
312
+ const openModal = () => setShowAddPostModal( true );
313
+ const closeModal = () => setShowAddPostModal( false );
314
+ const handleNewPage = ( { type, id } ) => {
315
+ history.push( {
316
+ postId: id,
317
+ postType: type,
318
+ canvas: 'edit',
319
+ } );
320
+ closeModal();
321
+ };
322
+
323
+ return (
324
+ <Page
325
+ title={ labels?.name }
326
+ actions={
327
+ labels?.add_new_item &&
328
+ canCreateRecord && (
329
+ <>
330
+ <Button
331
+ variant="primary"
332
+ onClick={ openModal }
333
+ __next40pxDefaultSize
334
+ >
335
+ { labels.add_new_item }
336
+ </Button>
337
+ { showAddPostModal && (
338
+ <AddNewPostModal
339
+ postType={ postType }
340
+ onSave={ handleNewPage }
341
+ onClose={ closeModal }
342
+ />
343
+ ) }
344
+ </>
345
+ )
346
+ }
347
+ >
348
+ <DataViews
349
+ key={ activeView + isCustom }
350
+ paginationInfo={ paginationInfo }
351
+ fields={ fields }
352
+ actions={ actions }
353
+ data={ data || EMPTY_ARRAY }
354
+ isLoading={ isLoadingData || isLoadingFields }
355
+ view={ view }
356
+ onChangeView={ setView }
357
+ selection={ selection }
358
+ onChangeSelection={ onChangeSelection }
359
+ getItemId={ getItemId }
360
+ defaultLayouts={ defaultLayouts }
361
+ header={
362
+ window.__experimentalQuickEditDataViews &&
363
+ view.type !== LAYOUT_LIST &&
364
+ postType === 'page' && (
365
+ <Button
366
+ size="compact"
367
+ isPressed={ quickEdit }
368
+ icon={ drawerRight }
369
+ label={
370
+ ! quickEdit
371
+ ? __( 'Show quick edit sidebar' )
372
+ : __( 'Close quick edit sidebar' )
373
+ }
374
+ onClick={ () => {
375
+ history.push( {
376
+ ...location.params,
377
+ quickEdit: quickEdit ? undefined : true,
378
+ } );
379
+ } }
380
+ />
381
+ )
382
+ }
383
+ />
384
+ </Page>
385
+ );
386
+ }
@@ -1,16 +1,16 @@
1
- .posts-list-page__featured-image {
1
+ .edit-site-post-list__featured-image {
2
2
  height: 100%;
3
3
  object-fit: cover;
4
4
  width: 100%;
5
5
  }
6
6
 
7
- .posts-list-page__featured-image-wrapper {
7
+ .edit-site-post-list__featured-image-wrapper {
8
8
  height: 100%;
9
9
  width: 100%;
10
10
  border-radius: $grid-unit-05;
11
11
 
12
- &.is-layout-table:not(:has(.posts-list-page-preview-field__button)),
13
- &.is-layout-table .posts-list-page-preview-field__button {
12
+ &.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)),
13
+ &.is-layout-table .edit-site-post-list__featured-image-button {
14
14
  width: $grid-unit-40;
15
15
  height: $grid-unit-40;
16
16
  display: block;
@@ -33,7 +33,7 @@
33
33
  }
34
34
  }
35
35
 
36
- .posts-list-page-preview-field__button {
36
+ .edit-site-post-list__featured-image-button {
37
37
  box-shadow: none;
38
38
  border: none;
39
39
  padding: 0;
@@ -53,18 +53,18 @@
53
53
  }
54
54
 
55
55
  .dataviews-view-grid__card.is-selected {
56
- .posts-list-page-preview-field__button::after {
56
+ .edit-site-post-list__featured-image-button::after {
57
57
  box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
58
58
  background: rgba(var(--wp-admin-theme-color--rgb), 0.04);
59
59
  }
60
60
  }
61
61
 
62
- .posts-list-page-title span {
62
+ .edit-site-post-list__title span {
63
63
  text-overflow: ellipsis;
64
64
  overflow: hidden;
65
65
  }
66
66
 
67
- .posts-list-page-title-badge {
67
+ .edit-site-post-list__title-badge {
68
68
  background: $gray-100;
69
69
  color: $gray-700;
70
70
  padding: 0 $grid-unit-05;
@@ -72,11 +72,14 @@
72
72
  font-size: 12px;
73
73
  font-weight: 400;
74
74
  flex-shrink: 0;
75
+ line-height: $grid-unit-05 * 5;
75
76
  }
76
77
 
77
- .posts-list-page-post-author-field__icon-container {
78
+ .edit-site-post-list__status-icon {
78
79
  height: $grid-unit-30;
80
+ width: $grid-unit-30;
79
81
  svg {
80
82
  fill: currentColor;
83
+ margin-left: -$grid-unit-05;
81
84
  }
82
85
  }
@@ -13,7 +13,7 @@ import Editor from '../editor';
13
13
  import SidebarNavigationScreen from '../sidebar-navigation-screen';
14
14
  import SidebarNavigationScreenMain from '../sidebar-navigation-screen-main';
15
15
  import DataViewsSidebarContent from '../sidebar-dataviews';
16
- import PostsList from '../posts-app/posts-list';
16
+ import PostList from '../post-list';
17
17
 
18
18
  const { useLocation } = unlock( routerPrivateApis );
19
19
 
@@ -40,7 +40,7 @@ export default function useLayoutAreas() {
40
40
  content={ <DataViewsSidebarContent /> }
41
41
  />
42
42
  ),
43
- content: <PostsList postType={ postType } />,
43
+ content: <PostList postType={ postType } />,
44
44
  preview: ( isListLayout || canvas === 'edit' ) && (
45
45
  <Editor isPostsList />
46
46
  ),
@@ -48,7 +48,7 @@ export default function useLayoutAreas() {
48
48
  canvas === 'edit' ? (
49
49
  <Editor isPostsList />
50
50
  ) : (
51
- <PostsList postType={ postType } />
51
+ <PostList postType={ postType } />
52
52
  ),
53
53
  },
54
54
  widths: {
@@ -29,7 +29,7 @@ function AddNewItemModalContent( { type, setIsAdding } ) {
29
29
  const { saveEntityRecord } = useDispatch( coreStore );
30
30
  const [ title, setTitle ] = useState( '' );
31
31
  const [ isSaving, setIsSaving ] = useState( false );
32
- const DEFAULT_VIEWS = useDefaultViews( { postType: type } );
32
+ const defaultViews = useDefaultViews( { postType: type } );
33
33
  return (
34
34
  <form
35
35
  onSubmit={ async ( event ) => {
@@ -61,9 +61,7 @@ function AddNewItemModalContent( { type, setIsAdding } ) {
61
61
  title,
62
62
  status: 'publish',
63
63
  wp_dataviews_type: dataViewTaxonomyId,
64
- content: JSON.stringify(
65
- DEFAULT_VIEWS[ type ][ 0 ].view
66
- ),
64
+ content: JSON.stringify( defaultViews[ 0 ].view ),
67
65
  }
68
66
  );
69
67
  const {
@@ -29,7 +29,7 @@ export default function DataViewItem( {
29
29
  suffix,
30
30
  } ) {
31
31
  const {
32
- params: { postType, layout },
32
+ params: { postType },
33
33
  } = useLocation();
34
34
 
35
35
  const iconToUse =
@@ -41,7 +41,7 @@ export default function DataViewItem( {
41
41
  }
42
42
  const linkInfo = useLink( {
43
43
  postType,
44
- layout,
44
+ layout: type,
45
45
  activeView,
46
46
  isCustom: isCustom ? 'true' : undefined,
47
47
  } );