@wordpress/edit-site 5.31.0 → 5.32.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 (280) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/block-editor/editor-canvas.js +8 -1
  3. package/build/components/block-editor/editor-canvas.js.map +1 -1
  4. package/build/components/block-editor/site-editor-canvas.js +15 -4
  5. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  6. package/build/components/editor/index.js +12 -3
  7. package/build/components/editor/index.js.map +1 -1
  8. package/build/components/editor-canvas-container/index.js +1 -2
  9. package/build/components/editor-canvas-container/index.js.map +1 -1
  10. package/build/components/global-styles/background-panel.js +38 -0
  11. package/build/components/global-styles/background-panel.js.map +1 -0
  12. package/build/components/global-styles/font-families.js +1 -1
  13. package/build/components/global-styles/font-families.js.map +1 -1
  14. package/build/components/global-styles/font-library-modal/context.js +38 -9
  15. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  16. package/build/components/global-styles/font-library-modal/utils/index.js +20 -2
  17. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  18. package/build/components/global-styles/palette.js +3 -1
  19. package/build/components/global-styles/palette.js.map +1 -1
  20. package/build/components/global-styles/preview-colors.js +2 -2
  21. package/build/components/global-styles/preview-colors.js.map +1 -1
  22. package/build/components/global-styles/root-menu.js +8 -2
  23. package/build/components/global-styles/root-menu.js.map +1 -1
  24. package/build/components/global-styles/screen-background.js +34 -0
  25. package/build/components/global-styles/screen-background.js.map +1 -0
  26. package/build/components/global-styles/screen-color-palette.js +2 -2
  27. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  28. package/build/components/global-styles/screen-colors.js +6 -4
  29. package/build/components/global-styles/screen-colors.js.map +1 -1
  30. package/build/components/global-styles/screen-style-variations.js +3 -37
  31. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  32. package/build/components/global-styles/screen-typography.js +6 -6
  33. package/build/components/global-styles/screen-typography.js.map +1 -1
  34. package/build/components/global-styles/style-variations-container.js +5 -2
  35. package/build/components/global-styles/style-variations-container.js.map +1 -1
  36. package/build/components/global-styles/ui.js +4 -1
  37. package/build/components/global-styles/ui.js.map +1 -1
  38. package/build/components/global-styles/variations/variations-color.js +10 -3
  39. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  40. package/build/components/global-styles/variations/variations-typography.js +9 -2
  41. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  42. package/build/components/keyboard-shortcut-help-modal/index.js +3 -0
  43. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  44. package/build/components/layout/animation.js +129 -0
  45. package/build/components/layout/animation.js.map +1 -0
  46. package/build/components/layout/index.js +9 -17
  47. package/build/components/layout/index.js.map +1 -1
  48. package/build/components/layout/router.js +21 -18
  49. package/build/components/layout/router.js.map +1 -1
  50. package/build/components/page-pages/index.js +19 -17
  51. package/build/components/page-pages/index.js.map +1 -1
  52. package/build/components/page-patterns/index.js +18 -28
  53. package/build/components/page-patterns/index.js.map +1 -1
  54. package/build/components/page-patterns/search-items.js +16 -58
  55. package/build/components/page-patterns/search-items.js.map +1 -1
  56. package/build/components/page-templates-template-parts/actions.js +54 -41
  57. package/build/components/page-templates-template-parts/actions.js.map +1 -1
  58. package/build/components/page-templates-template-parts/index.js +26 -59
  59. package/build/components/page-templates-template-parts/index.js.map +1 -1
  60. package/build/components/plugin-template-setting-panel/index.js +12 -1
  61. package/build/components/plugin-template-setting-panel/index.js.map +1 -1
  62. package/build/components/save-button/index.js +45 -16
  63. package/build/components/save-button/index.js.map +1 -1
  64. package/build/components/save-hub/index.js +8 -112
  65. package/build/components/save-hub/index.js.map +1 -1
  66. package/build/components/sidebar/index.js +1 -5
  67. package/build/components/sidebar/index.js.map +1 -1
  68. package/build/components/sidebar-dataviews/default-views.js +1 -1
  69. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  70. package/build/components/sidebar-dataviews/index.js +1 -1
  71. package/build/components/sidebar-dataviews/index.js.map +1 -1
  72. package/build/components/sidebar-edit-mode/index.js +1 -2
  73. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  74. package/build/components/sidebar-edit-mode/page-panels/index.js +5 -15
  75. package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  76. package/build/components/sidebar-edit-mode/page-panels/page-content.js +7 -5
  77. package/build/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  78. package/build/components/sidebar-edit-mode/template-panel/index.js +10 -16
  79. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  80. package/build/components/sidebar-navigation-screen-details-footer/index.js +5 -1
  81. package/build/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  82. package/build/components/sidebar-navigation-screen-global-styles/index.js +10 -5
  83. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  84. package/build/components/sidebar-navigation-screen-patterns/index.js +1 -5
  85. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  86. package/build/components/style-book/index.js +1 -1
  87. package/build/components/style-book/index.js.map +1 -1
  88. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +2 -2
  89. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  90. package/build/components/sync-state-with-url/use-sync-path-with-url.js +1 -1
  91. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  92. package/build/hooks/index.js +0 -1
  93. package/build/hooks/index.js.map +1 -1
  94. package/build/store/selectors.js +1 -9
  95. package/build/store/selectors.js.map +1 -1
  96. package/build-module/components/block-editor/editor-canvas.js +8 -1
  97. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  98. package/build-module/components/block-editor/site-editor-canvas.js +15 -4
  99. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  100. package/build-module/components/editor/index.js +13 -4
  101. package/build-module/components/editor/index.js.map +1 -1
  102. package/build-module/components/editor-canvas-container/index.js +1 -2
  103. package/build-module/components/editor-canvas-container/index.js.map +1 -1
  104. package/build-module/components/global-styles/background-panel.js +31 -0
  105. package/build-module/components/global-styles/background-panel.js.map +1 -0
  106. package/build-module/components/global-styles/font-families.js +1 -1
  107. package/build-module/components/global-styles/font-families.js.map +1 -1
  108. package/build-module/components/global-styles/font-library-modal/context.js +38 -9
  109. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  110. package/build-module/components/global-styles/font-library-modal/utils/index.js +20 -2
  111. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  112. package/build-module/components/global-styles/palette.js +3 -1
  113. package/build-module/components/global-styles/palette.js.map +1 -1
  114. package/build-module/components/global-styles/preview-colors.js +2 -2
  115. package/build-module/components/global-styles/preview-colors.js.map +1 -1
  116. package/build-module/components/global-styles/root-menu.js +9 -3
  117. package/build-module/components/global-styles/root-menu.js.map +1 -1
  118. package/build-module/components/global-styles/screen-background.js +26 -0
  119. package/build-module/components/global-styles/screen-background.js.map +1 -0
  120. package/build-module/components/global-styles/screen-color-palette.js +2 -2
  121. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  122. package/build-module/components/global-styles/screen-colors.js +6 -4
  123. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  124. package/build-module/components/global-styles/screen-style-variations.js +4 -38
  125. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  126. package/build-module/components/global-styles/screen-typography.js +6 -6
  127. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  128. package/build-module/components/global-styles/style-variations-container.js +5 -2
  129. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  130. package/build-module/components/global-styles/ui.js +4 -1
  131. package/build-module/components/global-styles/ui.js.map +1 -1
  132. package/build-module/components/global-styles/variations/variations-color.js +10 -3
  133. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  134. package/build-module/components/global-styles/variations/variations-typography.js +9 -2
  135. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  136. package/build-module/components/keyboard-shortcut-help-modal/index.js +3 -0
  137. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  138. package/build-module/components/layout/animation.js +122 -0
  139. package/build-module/components/layout/animation.js.map +1 -0
  140. package/build-module/components/layout/index.js +9 -17
  141. package/build-module/components/layout/index.js.map +1 -1
  142. package/build-module/components/layout/router.js +21 -18
  143. package/build-module/components/layout/router.js.map +1 -1
  144. package/build-module/components/page-pages/index.js +19 -17
  145. package/build-module/components/page-pages/index.js.map +1 -1
  146. package/build-module/components/page-patterns/index.js +20 -30
  147. package/build-module/components/page-patterns/index.js.map +1 -1
  148. package/build-module/components/page-patterns/search-items.js +14 -55
  149. package/build-module/components/page-patterns/search-items.js.map +1 -1
  150. package/build-module/components/page-templates-template-parts/actions.js +54 -40
  151. package/build-module/components/page-templates-template-parts/actions.js.map +1 -1
  152. package/build-module/components/page-templates-template-parts/index.js +29 -62
  153. package/build-module/components/page-templates-template-parts/index.js.map +1 -1
  154. package/build-module/components/plugin-template-setting-panel/index.js +12 -1
  155. package/build-module/components/plugin-template-setting-panel/index.js.map +1 -1
  156. package/build-module/components/save-button/index.js +46 -17
  157. package/build-module/components/save-button/index.js.map +1 -1
  158. package/build-module/components/save-hub/index.js +10 -114
  159. package/build-module/components/save-hub/index.js.map +1 -1
  160. package/build-module/components/sidebar/index.js +1 -5
  161. package/build-module/components/sidebar/index.js.map +1 -1
  162. package/build-module/components/sidebar-dataviews/default-views.js +1 -1
  163. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  164. package/build-module/components/sidebar-dataviews/index.js +1 -1
  165. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  166. package/build-module/components/sidebar-edit-mode/index.js +1 -2
  167. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  168. package/build-module/components/sidebar-edit-mode/page-panels/index.js +8 -18
  169. package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  170. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js +7 -5
  171. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  172. package/build-module/components/sidebar-edit-mode/template-panel/index.js +11 -17
  173. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  174. package/build-module/components/sidebar-navigation-screen-details-footer/index.js +5 -1
  175. package/build-module/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  176. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +10 -5
  177. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  178. package/build-module/components/sidebar-navigation-screen-patterns/index.js +1 -5
  179. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  180. package/build-module/components/style-book/index.js +1 -1
  181. package/build-module/components/style-book/index.js.map +1 -1
  182. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +2 -2
  183. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  184. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js +1 -1
  185. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  186. package/build-module/hooks/index.js +0 -1
  187. package/build-module/hooks/index.js.map +1 -1
  188. package/build-module/store/selectors.js +1 -9
  189. package/build-module/store/selectors.js.map +1 -1
  190. package/build-style/style-rtl.css +116 -104
  191. package/build-style/style.css +116 -104
  192. package/package.json +44 -44
  193. package/src/components/block-editor/editor-canvas.js +14 -2
  194. package/src/components/block-editor/site-editor-canvas.js +10 -7
  195. package/src/components/editor/index.js +11 -4
  196. package/src/components/editor-canvas-container/index.js +0 -1
  197. package/src/components/global-styles/background-panel.js +34 -0
  198. package/src/components/global-styles/font-families.js +1 -1
  199. package/src/components/global-styles/font-library-modal/context.js +43 -14
  200. package/src/components/global-styles/font-library-modal/style.scss +1 -1
  201. package/src/components/global-styles/font-library-modal/utils/index.js +17 -4
  202. package/src/components/global-styles/palette.js +3 -1
  203. package/src/components/global-styles/preview-colors.js +2 -2
  204. package/src/components/global-styles/root-menu.js +12 -1
  205. package/src/components/global-styles/screen-background.js +29 -0
  206. package/src/components/global-styles/screen-color-palette.js +2 -2
  207. package/src/components/global-styles/screen-colors.js +4 -4
  208. package/src/components/global-styles/screen-style-variations.js +4 -36
  209. package/src/components/global-styles/screen-typography.js +6 -9
  210. package/src/components/global-styles/style-variations-container.js +2 -1
  211. package/src/components/global-styles/style.scss +14 -12
  212. package/src/components/global-styles/ui.js +5 -0
  213. package/src/components/global-styles/variations/style.scss +32 -17
  214. package/src/components/global-styles/variations/variations-color.js +4 -2
  215. package/src/components/global-styles/variations/variations-typography.js +4 -1
  216. package/src/components/header-edit-mode/style.scss +28 -17
  217. package/src/components/keyboard-shortcut-help-modal/index.js +4 -0
  218. package/src/components/layout/animation.js +122 -0
  219. package/src/components/layout/index.js +12 -27
  220. package/src/components/layout/router.js +25 -19
  221. package/src/components/layout/style.scss +2 -0
  222. package/src/components/page-pages/index.js +27 -43
  223. package/src/components/page-patterns/index.js +20 -28
  224. package/src/components/page-patterns/search-items.js +13 -58
  225. package/src/components/page-templates-template-parts/actions.js +106 -91
  226. package/src/components/page-templates-template-parts/index.js +34 -78
  227. package/src/components/page-templates-template-parts/style.scss +5 -0
  228. package/src/components/plugin-template-setting-panel/index.js +14 -1
  229. package/src/components/save-button/index.js +55 -26
  230. package/src/components/save-hub/index.js +20 -164
  231. package/src/components/sidebar/index.js +0 -5
  232. package/src/components/sidebar-dataviews/default-views.js +1 -1
  233. package/src/components/sidebar-dataviews/index.js +1 -1
  234. package/src/components/sidebar-edit-mode/index.js +0 -2
  235. package/src/components/sidebar-edit-mode/page-panels/index.js +29 -60
  236. package/src/components/sidebar-edit-mode/page-panels/page-content.js +10 -10
  237. package/src/components/sidebar-edit-mode/template-panel/index.js +23 -33
  238. package/src/components/sidebar-edit-mode/template-panel/style.scss +1 -29
  239. package/src/components/sidebar-navigation-screen/style.scss +12 -9
  240. package/src/components/sidebar-navigation-screen-details-footer/index.js +6 -2
  241. package/src/components/sidebar-navigation-screen-global-styles/index.js +7 -13
  242. package/src/components/sidebar-navigation-screen-patterns/index.js +0 -7
  243. package/src/components/style-book/index.js +1 -3
  244. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +2 -2
  245. package/src/components/sync-state-with-url/use-sync-path-with-url.js +1 -1
  246. package/src/hooks/index.js +0 -1
  247. package/src/store/selectors.js +3 -15
  248. package/src/style.scss +0 -1
  249. package/build/components/actions/index.js +0 -319
  250. package/build/components/actions/index.js.map +0 -1
  251. package/build/components/sidebar-edit-mode/sidebar-card/index.js +0 -48
  252. package/build/components/sidebar-edit-mode/sidebar-card/index.js.map +0 -1
  253. package/build/components/sidebar-edit-mode/template-panel/template-areas.js +0 -70
  254. package/build/components/sidebar-edit-mode/template-panel/template-areas.js.map +0 -1
  255. package/build/components/sidebar-navigation-screen-pages/index.js +0 -175
  256. package/build/components/sidebar-navigation-screen-pages/index.js.map +0 -1
  257. package/build/hooks/template-part-edit.js +0 -82
  258. package/build/hooks/template-part-edit.js.map +0 -1
  259. package/build/store/utils.js +0 -71
  260. package/build/store/utils.js.map +0 -1
  261. package/build-module/components/actions/index.js +0 -308
  262. package/build-module/components/actions/index.js.map +0 -1
  263. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js +0 -40
  264. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js.map +0 -1
  265. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js +0 -63
  266. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js.map +0 -1
  267. package/build-module/components/sidebar-navigation-screen-pages/index.js +0 -167
  268. package/build-module/components/sidebar-navigation-screen-pages/index.js.map +0 -1
  269. package/build-module/hooks/template-part-edit.js +0 -75
  270. package/build-module/hooks/template-part-edit.js.map +0 -1
  271. package/build-module/store/utils.js +0 -64
  272. package/build-module/store/utils.js.map +0 -1
  273. package/src/components/actions/index.js +0 -409
  274. package/src/components/sidebar-edit-mode/sidebar-card/index.js +0 -53
  275. package/src/components/sidebar-edit-mode/sidebar-card/style.scss +0 -36
  276. package/src/components/sidebar-edit-mode/template-panel/template-areas.js +0 -86
  277. package/src/components/sidebar-navigation-screen-pages/index.js +0 -238
  278. package/src/hooks/template-part-edit.js +0 -89
  279. package/src/store/test/utils.js +0 -191
  280. package/src/store/utils.js +0 -69
@@ -1,36 +0,0 @@
1
- .edit-site-sidebar-card {
2
- &__content {
3
- flex-grow: 1;
4
- }
5
-
6
- &__title {
7
- width: 100%;
8
-
9
- &.edit-site-sidebar-card__title {
10
- font-size: 16px;
11
- line-height: $icon-size;
12
- margin: 0;
13
- }
14
- }
15
-
16
- &__description {
17
- font-size: $default-font-size;
18
- color: $gray-700;
19
- }
20
-
21
- &__icon {
22
- flex: 0 0 $icon-size;
23
- width: $icon-size;
24
- height: $icon-size;
25
- }
26
-
27
- &__header {
28
- display: flex;
29
- justify-content: space-between;
30
- margin: 0 0 $grid-unit-15;
31
- }
32
-
33
- .edit-site-template-card__actions {
34
- flex-shrink: 0;
35
- }
36
- }
@@ -1,86 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useSelect, useDispatch } from '@wordpress/data';
5
- import {
6
- Button,
7
- __experimentalHeading as Heading,
8
- } from '@wordpress/components';
9
- import { store as editorStore } from '@wordpress/editor';
10
- import { store as blockEditorStore } from '@wordpress/block-editor';
11
- import { __ } from '@wordpress/i18n';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { store as editSiteStore } from '../../../store';
17
-
18
- function TemplateAreaItem( { area, clientId } ) {
19
- const { selectBlock, toggleBlockHighlight } =
20
- useDispatch( blockEditorStore );
21
- const templatePartArea = useSelect(
22
- ( select ) => {
23
- const defaultAreas =
24
- select(
25
- editorStore
26
- ).__experimentalGetDefaultTemplatePartAreas();
27
-
28
- return defaultAreas.find(
29
- ( defaultArea ) => defaultArea.area === area
30
- );
31
- },
32
- [ area ]
33
- );
34
-
35
- const highlightBlock = () => toggleBlockHighlight( clientId, true );
36
- const cancelHighlightBlock = () => toggleBlockHighlight( clientId, false );
37
-
38
- return (
39
- <Button
40
- className="edit-site-template-card__template-areas-item"
41
- icon={ templatePartArea?.icon }
42
- onMouseOver={ highlightBlock }
43
- onMouseLeave={ cancelHighlightBlock }
44
- onFocus={ highlightBlock }
45
- onBlur={ cancelHighlightBlock }
46
- onClick={ () => {
47
- selectBlock( clientId );
48
- } }
49
- >
50
- { templatePartArea?.label }
51
- </Button>
52
- );
53
- }
54
-
55
- export default function TemplateAreas() {
56
- const templateParts = useSelect(
57
- ( select ) => select( editSiteStore ).getCurrentTemplateTemplateParts(),
58
- []
59
- );
60
-
61
- if ( ! templateParts.length ) {
62
- return null;
63
- }
64
-
65
- return (
66
- <section className="edit-site-template-card__template-areas">
67
- <Heading
68
- level={ 3 }
69
- className="edit-site-template-card__template-areas-title"
70
- >
71
- { __( 'Areas' ) }
72
- </Heading>
73
-
74
- <ul className="edit-site-template-card__template-areas-list">
75
- { templateParts.map( ( { templatePart, block } ) => (
76
- <li key={ block.clientId }>
77
- <TemplateAreaItem
78
- area={ templatePart.area }
79
- clientId={ block.clientId }
80
- />
81
- </li>
82
- ) ) }
83
- </ul>
84
- </section>
85
- );
86
- }
@@ -1,238 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import {
5
- __experimentalItemGroup as ItemGroup,
6
- __experimentalItem as Item,
7
- __experimentalTruncate as Truncate,
8
- __experimentalVStack as VStack,
9
- } from '@wordpress/components';
10
- import { useState } from '@wordpress/element';
11
- import { __ } from '@wordpress/i18n';
12
- import { useEntityRecords, store as coreStore } from '@wordpress/core-data';
13
- import { decodeEntities } from '@wordpress/html-entities';
14
- import { privateApis as routerPrivateApis } from '@wordpress/router';
15
- import { layout, page, home, verse, plus } from '@wordpress/icons';
16
- import { useSelect } from '@wordpress/data';
17
- import { useViewportMatch } from '@wordpress/compose';
18
-
19
- /**
20
- * Internal dependencies
21
- */
22
- import SidebarNavigationScreen from '../sidebar-navigation-screen';
23
- import { useLink } from '../routes/link';
24
- import SidebarNavigationItem from '../sidebar-navigation-item';
25
- import SidebarButton from '../sidebar-button';
26
- import AddNewPageModal from '../add-new-page';
27
- import { unlock } from '../../lock-unlock';
28
- import { TEMPLATE_POST_TYPE } from '../../utils/constants';
29
-
30
- const { useHistory } = unlock( routerPrivateApis );
31
-
32
- const PageItem = ( { postType = 'page', postId, ...props } ) => {
33
- const linkInfo = useLink(
34
- {
35
- postType,
36
- postId,
37
- },
38
- {
39
- backPath: '/page',
40
- }
41
- );
42
- return <SidebarNavigationItem { ...linkInfo } { ...props } />;
43
- };
44
-
45
- export default function SidebarNavigationScreenPages() {
46
- const isMobileViewport = useViewportMatch( 'medium', '<' );
47
- const { records: pages, isResolving: isLoadingPages } = useEntityRecords(
48
- 'postType',
49
- 'page',
50
- {
51
- status: 'any',
52
- per_page: -1,
53
- }
54
- );
55
- const { records: templates, isResolving: isLoadingTemplates } =
56
- useEntityRecords( 'postType', TEMPLATE_POST_TYPE, {
57
- per_page: -1,
58
- } );
59
-
60
- const dynamicPageTemplates = templates?.filter( ( { slug } ) =>
61
- [ '404', 'search' ].includes( slug )
62
- );
63
-
64
- const homeTemplate =
65
- templates?.find( ( template ) => template.slug === 'front-page' ) ||
66
- templates?.find( ( template ) => template.slug === 'home' ) ||
67
- templates?.find( ( template ) => template.slug === 'index' );
68
-
69
- const getPostsPageTemplate = () =>
70
- templates?.find( ( template ) => template.slug === 'home' ) ||
71
- templates?.find( ( template ) => template.slug === 'index' );
72
-
73
- const pagesAndTemplates = pages?.concat( dynamicPageTemplates, [
74
- homeTemplate,
75
- ] );
76
-
77
- const { frontPage, postsPage } = useSelect( ( select ) => {
78
- const { getEntityRecord } = select( coreStore );
79
- const siteSettings = getEntityRecord( 'root', 'site' );
80
- return {
81
- frontPage: siteSettings?.page_on_front,
82
- postsPage: siteSettings?.page_for_posts,
83
- };
84
- }, [] );
85
-
86
- const isHomePageBlog = frontPage === postsPage;
87
-
88
- const reorderedPages = pages && [ ...pages ];
89
-
90
- if ( ! isHomePageBlog && reorderedPages?.length ) {
91
- const homePageIndex = reorderedPages.findIndex(
92
- ( item ) => item.id === frontPage
93
- );
94
- const homePage = reorderedPages.splice( homePageIndex, 1 );
95
- reorderedPages?.splice( 0, 0, ...homePage );
96
-
97
- const postsPageIndex = reorderedPages.findIndex(
98
- ( item ) => item.id === postsPage
99
- );
100
-
101
- const blogPage = reorderedPages.splice( postsPageIndex, 1 );
102
-
103
- reorderedPages.splice( 1, 0, ...blogPage );
104
- }
105
-
106
- const [ showAddPage, setShowAddPage ] = useState( false );
107
-
108
- const history = useHistory();
109
-
110
- const handleNewPage = ( { type, id } ) => {
111
- // Navigate to the created template editor.
112
- history.push( {
113
- postId: id,
114
- postType: type,
115
- canvas: 'edit',
116
- } );
117
- setShowAddPage( false );
118
- };
119
-
120
- const getPageProps = ( id ) => {
121
- let itemIcon = page;
122
- const postsPageTemplateId =
123
- postsPage && postsPage === id ? getPostsPageTemplate()?.id : null;
124
-
125
- switch ( id ) {
126
- case frontPage:
127
- itemIcon = home;
128
- break;
129
- case postsPage:
130
- itemIcon = verse;
131
- break;
132
- }
133
-
134
- return {
135
- icon: itemIcon,
136
- postType: postsPageTemplateId ? TEMPLATE_POST_TYPE : 'page',
137
- postId: postsPageTemplateId || id,
138
- };
139
- };
140
-
141
- const pagesLink = useLink( { path: '/pages' } );
142
-
143
- return (
144
- <>
145
- { showAddPage && (
146
- <AddNewPageModal
147
- onSave={ handleNewPage }
148
- onClose={ () => setShowAddPage( false ) }
149
- />
150
- ) }
151
- <SidebarNavigationScreen
152
- title={ __( 'Pages' ) }
153
- description={ __( 'Browse and manage pages.' ) }
154
- actions={
155
- <SidebarButton
156
- icon={ plus }
157
- label={ __( 'Draft a new page' ) }
158
- onClick={ () => setShowAddPage( true ) }
159
- />
160
- }
161
- content={
162
- <>
163
- { ( isLoadingPages || isLoadingTemplates ) && (
164
- <ItemGroup>
165
- <Item>{ __( 'Loading pages…' ) }</Item>
166
- </ItemGroup>
167
- ) }
168
- { ! ( isLoadingPages || isLoadingTemplates ) && (
169
- <ItemGroup>
170
- { ! pagesAndTemplates?.length && (
171
- <Item>{ __( 'No page found' ) }</Item>
172
- ) }
173
- { isHomePageBlog && homeTemplate && (
174
- <PageItem
175
- postType={ TEMPLATE_POST_TYPE }
176
- postId={ homeTemplate.id }
177
- key={ homeTemplate.id }
178
- icon={ home }
179
- withChevron
180
- >
181
- <Truncate numberOfLines={ 1 }>
182
- { decodeEntities(
183
- homeTemplate.title?.rendered ||
184
- __( '(no title)' )
185
- ) }
186
- </Truncate>
187
- </PageItem>
188
- ) }
189
- { reorderedPages?.map( ( { id, title } ) => (
190
- <PageItem
191
- { ...getPageProps( id ) }
192
- key={ id }
193
- withChevron
194
- >
195
- <Truncate numberOfLines={ 1 }>
196
- { decodeEntities(
197
- title?.rendered ||
198
- __( '(no title)' )
199
- ) }
200
- </Truncate>
201
- </PageItem>
202
- ) ) }
203
- </ItemGroup>
204
- ) }
205
- </>
206
- }
207
- footer={
208
- <VStack spacing={ 0 }>
209
- { dynamicPageTemplates?.map( ( item ) => (
210
- <PageItem
211
- postType={ TEMPLATE_POST_TYPE }
212
- postId={ item.id }
213
- key={ item.id }
214
- icon={ layout }
215
- withChevron
216
- >
217
- <Truncate numberOfLines={ 1 }>
218
- { decodeEntities(
219
- item.title?.rendered ||
220
- __( '(no title)' )
221
- ) }
222
- </Truncate>
223
- </PageItem>
224
- ) ) }
225
- { ! isMobileViewport && (
226
- <SidebarNavigationItem
227
- className="edit-site-sidebar-navigation-screen-pages__see-all"
228
- { ...pagesLink }
229
- >
230
- { __( 'Manage all pages' ) }
231
- </SidebarNavigationItem>
232
- ) }
233
- </VStack>
234
- }
235
- />
236
- </>
237
- );
238
- }
@@ -1,89 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useSelect } from '@wordpress/data';
6
- import { BlockControls } from '@wordpress/block-editor';
7
- import { store as coreStore } from '@wordpress/core-data';
8
- import { ToolbarButton } from '@wordpress/components';
9
- import { addFilter } from '@wordpress/hooks';
10
- import { createHigherOrderComponent } from '@wordpress/compose';
11
- import { privateApis as routerPrivateApis } from '@wordpress/router';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { useLink } from '../components/routes/link';
17
- import { unlock } from '../lock-unlock';
18
- import { TEMPLATE_PART_POST_TYPE } from '../utils/constants';
19
-
20
- const { useLocation } = unlock( routerPrivateApis );
21
-
22
- function EditTemplatePartMenuItem( { attributes } ) {
23
- const { theme, slug } = attributes;
24
- const { params } = useLocation();
25
- const templatePart = useSelect(
26
- ( select ) => {
27
- const { getCurrentTheme, getEntityRecord } = select( coreStore );
28
-
29
- return getEntityRecord(
30
- 'postType',
31
- TEMPLATE_PART_POST_TYPE,
32
- // Ideally this should be an official public API.
33
- `${ theme || getCurrentTheme()?.stylesheet }//${ slug }`
34
- );
35
- },
36
- [ theme, slug ]
37
- );
38
-
39
- const linkProps = useLink(
40
- {
41
- postId: templatePart?.id,
42
- postType: templatePart?.type,
43
- canvas: 'edit',
44
- },
45
- {
46
- fromTemplateId: params.postId || templatePart?.id,
47
- }
48
- );
49
-
50
- if ( ! templatePart ) {
51
- return null;
52
- }
53
-
54
- return (
55
- <ToolbarButton
56
- { ...linkProps }
57
- onClick={ ( event ) => {
58
- linkProps.onClick( event );
59
- } }
60
- >
61
- { __( 'Edit' ) }
62
- </ToolbarButton>
63
- );
64
- }
65
-
66
- export const withEditBlockControls = createHigherOrderComponent(
67
- ( BlockEdit ) => ( props ) => {
68
- const { attributes, name } = props;
69
- const isDisplayed = name === 'core/template-part' && attributes.slug;
70
-
71
- return (
72
- <>
73
- <BlockEdit key="edit" { ...props } />
74
- { isDisplayed && (
75
- <BlockControls group="other">
76
- <EditTemplatePartMenuItem attributes={ attributes } />
77
- </BlockControls>
78
- ) }
79
- </>
80
- );
81
- },
82
- 'withEditBlockControls'
83
- );
84
-
85
- addFilter(
86
- 'editor.BlockEdit',
87
- 'core/edit-site/template-part-edit-button',
88
- withEditBlockControls
89
- );
@@ -1,191 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import { getFilteredTemplatePartBlocks } from '../utils';
5
-
6
- const NESTED_BLOCKS = [
7
- {
8
- clientId: '1',
9
- name: 'core/group',
10
- innerBlocks: [
11
- {
12
- clientId: '2',
13
- name: 'core/template-part',
14
- attributes: {
15
- slug: 'header',
16
- theme: 'my-theme',
17
- },
18
- innerBlocks: [
19
- {
20
- clientId: '3',
21
- name: 'core/group',
22
- innerBlocks: [],
23
- },
24
- ],
25
- },
26
- {
27
- clientId: '4',
28
- name: 'core/template-part',
29
- attributes: {
30
- slug: 'aside',
31
- theme: 'my-theme',
32
- },
33
- innerBlocks: [],
34
- },
35
- ],
36
- },
37
- {
38
- clientId: '5',
39
- name: 'core/paragraph',
40
- innerBlocks: [],
41
- },
42
- {
43
- clientId: '6',
44
- name: 'core/template-part',
45
- attributes: {
46
- slug: 'footer',
47
- theme: 'my-theme',
48
- },
49
- innerBlocks: [],
50
- },
51
- ];
52
-
53
- const FLATTENED_BLOCKS = [
54
- {
55
- block: {
56
- clientId: '2',
57
- name: 'core/template-part',
58
- attributes: {
59
- slug: 'header',
60
- theme: 'my-theme',
61
- },
62
- },
63
- templatePart: {
64
- id: 'my-theme//header',
65
- slug: 'header',
66
- theme: 'my-theme',
67
- },
68
- },
69
- {
70
- block: {
71
- clientId: '4',
72
- name: 'core/template-part',
73
- attributes: {
74
- slug: 'aside',
75
- theme: 'my-theme',
76
- },
77
- },
78
- templatePart: {
79
- id: 'my-theme//aside',
80
- slug: 'aside',
81
- theme: 'my-theme',
82
- },
83
- },
84
- {
85
- block: {
86
- clientId: '6',
87
- name: 'core/template-part',
88
- attributes: {
89
- slug: 'footer',
90
- theme: 'my-theme',
91
- },
92
- },
93
- templatePart: {
94
- id: 'my-theme//footer',
95
- slug: 'footer',
96
- theme: 'my-theme',
97
- },
98
- },
99
- ];
100
-
101
- const SINGLE_TEMPLATE_PART_BLOCK = {
102
- clientId: '1',
103
- name: 'core/template-part',
104
- innerBlocks: [],
105
- attributes: {
106
- slug: 'aside',
107
- theme: 'my-theme',
108
- },
109
- };
110
-
111
- const TEMPLATE_PARTS = [
112
- {
113
- id: 'my-theme//header',
114
- slug: 'header',
115
- theme: 'my-theme',
116
- },
117
- {
118
- id: 'my-theme//aside',
119
- slug: 'aside',
120
- theme: 'my-theme',
121
- },
122
- {
123
- id: 'my-theme//footer',
124
- slug: 'footer',
125
- theme: 'my-theme',
126
- },
127
- ];
128
-
129
- describe( 'utils', () => {
130
- describe( 'getFilteredTemplatePartBlocks', () => {
131
- it( 'returns a flattened list of filtered template parts preserving a depth-first order', () => {
132
- const flattenedFilteredTemplateParts =
133
- getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
134
- expect( flattenedFilteredTemplateParts ).toEqual(
135
- FLATTENED_BLOCKS
136
- );
137
- } );
138
-
139
- it( 'returns a cached result when passed the same params', () => {
140
- // Clear the cache and call the function twice.
141
- getFilteredTemplatePartBlocks.clear();
142
- getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
143
- expect(
144
- getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS )
145
- ).toEqual( FLATTENED_BLOCKS );
146
-
147
- // The function has been called twice with the same params, so the cache size should be 1.
148
- /**
149
- * TODO what should be done about this?
150
- * Can it be tested another way?
151
- * Is it necessary?
152
- */
153
- // const [ , , originalSize ] =
154
- // getFilteredTemplatePartBlocks.getCache();
155
- // expect( originalSize ).toBe( 1 );
156
-
157
- // Call the function again, with different params.
158
- expect(
159
- getFilteredTemplatePartBlocks(
160
- [ SINGLE_TEMPLATE_PART_BLOCK ],
161
- TEMPLATE_PARTS
162
- )
163
- ).toEqual( [
164
- {
165
- block: {
166
- clientId: '1',
167
- name: 'core/template-part',
168
- attributes: {
169
- slug: 'aside',
170
- theme: 'my-theme',
171
- },
172
- },
173
- templatePart: {
174
- id: 'my-theme//aside',
175
- slug: 'aside',
176
- theme: 'my-theme',
177
- },
178
- },
179
- ] );
180
-
181
- // The function has been called with different params, so the cache size should now be 2.
182
- /**
183
- * TODO what should be done about this?
184
- * Can it be tested another way?
185
- * Is it necessary?
186
- */
187
- // const [ , , finalSize ] = getFilteredTemplatePartBlocks.getCache();
188
- // expect( finalSize ).toBe( 2 );
189
- } );
190
- } );
191
- } );
@@ -1,69 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import memoize from 'memize';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { isTemplatePart } from '@wordpress/blocks';
10
-
11
- const EMPTY_ARRAY = [];
12
-
13
- /**
14
- * Get a flattened and filtered list of template parts and the matching block for that template part.
15
- *
16
- * Takes a list of blocks defined within a template, and a list of template parts, and returns a
17
- * flattened list of template parts and the matching block for that template part.
18
- *
19
- * @param {Array} blocks Blocks to flatten.
20
- * @param {?Array} templateParts Available template parts.
21
- * @return {Array} An array of template parts and their blocks.
22
- */
23
- function getFilteredTemplatePartBlocks( blocks = EMPTY_ARRAY, templateParts ) {
24
- const templatePartsById = templateParts
25
- ? // Key template parts by their ID.
26
- templateParts.reduce(
27
- ( newTemplateParts, part ) => ( {
28
- ...newTemplateParts,
29
- [ part.id ]: part,
30
- } ),
31
- {}
32
- )
33
- : {};
34
-
35
- const result = [];
36
-
37
- // Iterate over all blocks, recursing into inner blocks.
38
- // Output will be based on a depth-first traversal.
39
- const stack = [ ...blocks ];
40
- while ( stack.length ) {
41
- const { innerBlocks, ...block } = stack.shift();
42
- // Place inner blocks at the beginning of the stack to preserve order.
43
- stack.unshift( ...innerBlocks );
44
-
45
- if ( isTemplatePart( block ) ) {
46
- const {
47
- attributes: { theme, slug },
48
- } = block;
49
- const templatePartId = `${ theme }//${ slug }`;
50
- const templatePart = templatePartsById[ templatePartId ];
51
-
52
- // Only add to output if the found template part block is in the list of available template parts.
53
- if ( templatePart ) {
54
- result.push( {
55
- templatePart,
56
- block,
57
- } );
58
- }
59
- }
60
- }
61
-
62
- return result;
63
- }
64
-
65
- const memoizedGetFilteredTemplatePartBlocks = memoize(
66
- getFilteredTemplatePartBlocks
67
- );
68
-
69
- export { memoizedGetFilteredTemplatePartBlocks as getFilteredTemplatePartBlocks };