@wordpress/edit-site 4.7.0 → 4.10.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 (248) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/add-new-template/add-custom-generic-template-modal.js +84 -0
  3. package/build/components/add-new-template/add-custom-generic-template-modal.js.map +1 -0
  4. package/build/components/add-new-template/add-custom-template-modal.js +224 -0
  5. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -0
  6. package/build/components/add-new-template/new-template.js +94 -33
  7. package/build/components/add-new-template/new-template.js.map +1 -1
  8. package/build/components/add-new-template/utils.js +405 -0
  9. package/build/components/add-new-template/utils.js.map +1 -0
  10. package/build/components/block-editor/block-inspector-button.js.map +1 -1
  11. package/build/components/block-editor/index.js.map +1 -1
  12. package/build/components/code-editor/index.js +17 -4
  13. package/build/components/code-editor/index.js.map +1 -1
  14. package/build/components/edit-template-part-menu-button/index.js.map +1 -1
  15. package/build/components/editor/index.js +16 -0
  16. package/build/components/editor/index.js.map +1 -1
  17. package/build/components/error-boundary/index.js +6 -0
  18. package/build/components/error-boundary/index.js.map +1 -1
  19. package/build/components/global-styles/context-menu.js +6 -3
  20. package/build/components/global-styles/context-menu.js.map +1 -1
  21. package/build/components/global-styles/dimensions-panel.js +2 -6
  22. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  23. package/build/components/global-styles/global-styles-provider.js +4 -2
  24. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  25. package/build/components/global-styles/gradients-palette-panel.js +3 -7
  26. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  27. package/build/components/global-styles/hooks.js +11 -2
  28. package/build/components/global-styles/hooks.js.map +1 -1
  29. package/build/components/global-styles/palette.js +2 -1
  30. package/build/components/global-styles/palette.js.map +1 -1
  31. package/build/components/global-styles/screen-block-list.js +4 -1
  32. package/build/components/global-styles/screen-block-list.js.map +1 -1
  33. package/build/components/global-styles/screen-button-color.js +80 -0
  34. package/build/components/global-styles/screen-button-color.js.map +1 -0
  35. package/build/components/global-styles/screen-color-palette.js +13 -17
  36. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  37. package/build/components/global-styles/screen-colors.js +56 -8
  38. package/build/components/global-styles/screen-colors.js.map +1 -1
  39. package/build/components/global-styles/screen-link-color.js +48 -14
  40. package/build/components/global-styles/screen-link-color.js.map +1 -1
  41. package/build/components/global-styles/screen-root.js +4 -2
  42. package/build/components/global-styles/screen-root.js.map +1 -1
  43. package/build/components/global-styles/screen-style-variations.js +9 -1
  44. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  45. package/build/components/global-styles/screen-typography-element.js +4 -0
  46. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  47. package/build/components/global-styles/screen-typography.js +9 -1
  48. package/build/components/global-styles/screen-typography.js.map +1 -1
  49. package/build/components/global-styles/ui.js +11 -0
  50. package/build/components/global-styles/ui.js.map +1 -1
  51. package/build/components/global-styles/use-global-styles-output.js +199 -30
  52. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  53. package/build/components/global-styles/utils.js +4 -2
  54. package/build/components/global-styles/utils.js.map +1 -1
  55. package/build/components/header/index.js +28 -10
  56. package/build/components/header/index.js.map +1 -1
  57. package/build/components/header/mode-switcher/index.js.map +1 -1
  58. package/build/components/header/more-menu/copy-content-menu-item.js +1 -1
  59. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  60. package/build/components/header/more-menu/site-export.js +4 -1
  61. package/build/components/header/more-menu/site-export.js.map +1 -1
  62. package/build/components/header/undo-redo/redo.js +13 -4
  63. package/build/components/header/undo-redo/redo.js.map +1 -1
  64. package/build/components/header/undo-redo/undo.js +13 -4
  65. package/build/components/header/undo-redo/undo.js.map +1 -1
  66. package/build/components/keyboard-shortcut-help-modal/config.js +17 -0
  67. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  68. package/build/components/keyboard-shortcut-help-modal/index.js +1 -3
  69. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  70. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  71. package/build/components/list/actions/index.js.map +1 -1
  72. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  73. package/build/components/list/added-by.js.map +1 -1
  74. package/build/components/navigation-sidebar/index.js.map +1 -1
  75. package/build/components/save-button/index.js.map +1 -1
  76. package/build/components/sidebar/index.js.map +1 -1
  77. package/build/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  78. package/build/components/sidebar/template-card/index.js +19 -7
  79. package/build/components/sidebar/template-card/index.js.map +1 -1
  80. package/build/components/sidebar/template-card/template-actions.js +64 -0
  81. package/build/components/sidebar/template-card/template-actions.js.map +1 -0
  82. package/build/components/sidebar/template-card/template-areas.js.map +1 -1
  83. package/build/components/template-details/edit-template-title.js +11 -3
  84. package/build/components/template-details/edit-template-title.js.map +1 -1
  85. package/build/components/template-details/index.js +1 -20
  86. package/build/components/template-details/index.js.map +1 -1
  87. package/build/components/template-details/template-areas.js.map +1 -1
  88. package/build/components/template-part-converter/index.js.map +1 -1
  89. package/build/components/url-query-controller/index.js.map +1 -1
  90. package/build/store/actions.js.map +1 -1
  91. package/build/store/selectors.js +4 -1
  92. package/build/store/selectors.js.map +1 -1
  93. package/build-module/components/add-new-template/add-custom-generic-template-modal.js +77 -0
  94. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -0
  95. package/build-module/components/add-new-template/add-custom-template-modal.js +209 -0
  96. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -0
  97. package/build-module/components/add-new-template/new-template.js +93 -34
  98. package/build-module/components/add-new-template/new-template.js.map +1 -1
  99. package/build-module/components/add-new-template/utils.js +365 -0
  100. package/build-module/components/add-new-template/utils.js.map +1 -0
  101. package/build-module/components/block-editor/block-inspector-button.js.map +1 -1
  102. package/build-module/components/block-editor/index.js.map +1 -1
  103. package/build-module/components/code-editor/index.js +18 -5
  104. package/build-module/components/code-editor/index.js.map +1 -1
  105. package/build-module/components/edit-template-part-menu-button/index.js.map +1 -1
  106. package/build-module/components/editor/index.js +16 -0
  107. package/build-module/components/editor/index.js.map +1 -1
  108. package/build-module/components/error-boundary/index.js +5 -0
  109. package/build-module/components/error-boundary/index.js.map +1 -1
  110. package/build-module/components/global-styles/context-menu.js +6 -3
  111. package/build-module/components/global-styles/context-menu.js.map +1 -1
  112. package/build-module/components/global-styles/dimensions-panel.js +2 -6
  113. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  114. package/build-module/components/global-styles/global-styles-provider.js +4 -2
  115. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  116. package/build-module/components/global-styles/gradients-palette-panel.js +3 -5
  117. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  118. package/build-module/components/global-styles/hooks.js +11 -2
  119. package/build-module/components/global-styles/hooks.js.map +1 -1
  120. package/build-module/components/global-styles/palette.js +2 -1
  121. package/build-module/components/global-styles/palette.js.map +1 -1
  122. package/build-module/components/global-styles/screen-block-list.js +4 -1
  123. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  124. package/build-module/components/global-styles/screen-button-color.js +67 -0
  125. package/build-module/components/global-styles/screen-button-color.js.map +1 -0
  126. package/build-module/components/global-styles/screen-color-palette.js +14 -19
  127. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  128. package/build-module/components/global-styles/screen-colors.js +57 -9
  129. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  130. package/build-module/components/global-styles/screen-link-color.js +47 -14
  131. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  132. package/build-module/components/global-styles/screen-root.js +4 -2
  133. package/build-module/components/global-styles/screen-root.js.map +1 -1
  134. package/build-module/components/global-styles/screen-style-variations.js +9 -1
  135. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  136. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  137. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  138. package/build-module/components/global-styles/screen-typography.js +10 -2
  139. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  140. package/build-module/components/global-styles/ui.js +10 -0
  141. package/build-module/components/global-styles/ui.js.map +1 -1
  142. package/build-module/components/global-styles/use-global-styles-output.js +198 -32
  143. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  144. package/build-module/components/global-styles/utils.js +5 -3
  145. package/build-module/components/global-styles/utils.js.map +1 -1
  146. package/build-module/components/header/index.js +29 -11
  147. package/build-module/components/header/index.js.map +1 -1
  148. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  149. package/build-module/components/header/more-menu/copy-content-menu-item.js +1 -1
  150. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  151. package/build-module/components/header/more-menu/site-export.js +4 -1
  152. package/build-module/components/header/more-menu/site-export.js.map +1 -1
  153. package/build-module/components/header/undo-redo/redo.js +9 -3
  154. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  155. package/build-module/components/header/undo-redo/undo.js +9 -3
  156. package/build-module/components/header/undo-redo/undo.js.map +1 -1
  157. package/build-module/components/keyboard-shortcut-help-modal/config.js +17 -0
  158. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  159. package/build-module/components/keyboard-shortcut-help-modal/index.js +1 -2
  160. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  161. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  162. package/build-module/components/list/actions/index.js.map +1 -1
  163. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  164. package/build-module/components/list/added-by.js.map +1 -1
  165. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  166. package/build-module/components/save-button/index.js.map +1 -1
  167. package/build-module/components/sidebar/index.js.map +1 -1
  168. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  169. package/build-module/components/sidebar/template-card/index.js +18 -7
  170. package/build-module/components/sidebar/template-card/index.js.map +1 -1
  171. package/build-module/components/sidebar/template-card/template-actions.js +49 -0
  172. package/build-module/components/sidebar/template-card/template-actions.js.map +1 -0
  173. package/build-module/components/sidebar/template-card/template-areas.js.map +1 -1
  174. package/build-module/components/template-details/edit-template-title.js +12 -3
  175. package/build-module/components/template-details/edit-template-title.js.map +1 -1
  176. package/build-module/components/template-details/index.js +2 -21
  177. package/build-module/components/template-details/index.js.map +1 -1
  178. package/build-module/components/template-details/template-areas.js.map +1 -1
  179. package/build-module/components/template-part-converter/index.js.map +1 -1
  180. package/build-module/components/url-query-controller/index.js.map +1 -1
  181. package/build-module/store/actions.js.map +1 -1
  182. package/build-module/store/selectors.js +5 -2
  183. package/build-module/store/selectors.js.map +1 -1
  184. package/build-style/style-rtl.css +188 -42
  185. package/build-style/style.css +188 -42
  186. package/package.json +29 -29
  187. package/src/components/add-new-template/add-custom-generic-template-modal.js +97 -0
  188. package/src/components/add-new-template/add-custom-template-modal.js +265 -0
  189. package/src/components/add-new-template/new-template.js +194 -70
  190. package/src/components/add-new-template/style.scss +137 -0
  191. package/src/components/add-new-template/utils.js +369 -0
  192. package/src/components/block-editor/block-inspector-button.js +2 -3
  193. package/src/components/block-editor/index.js +4 -9
  194. package/src/components/code-editor/index.js +15 -5
  195. package/src/components/edit-template-part-menu-button/index.js +2 -3
  196. package/src/components/editor/index.js +15 -5
  197. package/src/components/error-boundary/index.js +5 -0
  198. package/src/components/global-styles/context-menu.js +3 -0
  199. package/src/components/global-styles/dimensions-panel.js +2 -7
  200. package/src/components/global-styles/global-styles-provider.js +12 -17
  201. package/src/components/global-styles/gradients-palette-panel.js +2 -5
  202. package/src/components/global-styles/hooks.js +20 -3
  203. package/src/components/global-styles/palette.js +4 -1
  204. package/src/components/global-styles/screen-block-list.js +14 -5
  205. package/src/components/global-styles/screen-button-color.js +102 -0
  206. package/src/components/global-styles/screen-color-palette.js +25 -27
  207. package/src/components/global-styles/screen-colors.js +58 -7
  208. package/src/components/global-styles/screen-link-color.js +65 -23
  209. package/src/components/global-styles/screen-root.js +12 -5
  210. package/src/components/global-styles/screen-style-variations.js +10 -4
  211. package/src/components/global-styles/screen-typography-element.js +4 -0
  212. package/src/components/global-styles/screen-typography.js +17 -2
  213. package/src/components/global-styles/style.scss +14 -8
  214. package/src/components/global-styles/test/use-global-styles-output.js +250 -16
  215. package/src/components/global-styles/ui.js +13 -0
  216. package/src/components/global-styles/use-global-styles-output.js +246 -32
  217. package/src/components/global-styles/utils.js +5 -2
  218. package/src/components/header/index.js +38 -13
  219. package/src/components/header/mode-switcher/index.js +4 -4
  220. package/src/components/header/more-menu/copy-content-menu-item.js +3 -4
  221. package/src/components/header/more-menu/site-export.js +5 -3
  222. package/src/components/header/style.scss +53 -5
  223. package/src/components/header/undo-redo/redo.js +6 -1
  224. package/src/components/header/undo-redo/undo.js +6 -1
  225. package/src/components/keyboard-shortcut-help-modal/config.js +12 -0
  226. package/src/components/keyboard-shortcut-help-modal/index.js +1 -2
  227. package/src/components/keyboard-shortcut-help-modal/style.scss +0 -5
  228. package/src/components/keyboard-shortcuts/index.js +6 -10
  229. package/src/components/list/actions/index.js +2 -3
  230. package/src/components/list/actions/rename-menu-item.js +4 -6
  231. package/src/components/list/added-by.js +4 -3
  232. package/src/components/list/style.scss +0 -8
  233. package/src/components/navigation-sidebar/index.js +2 -4
  234. package/src/components/save-button/index.js +2 -4
  235. package/src/components/sidebar/index.js +6 -6
  236. package/src/components/sidebar/navigation-menu-sidebar/navigation-inspector.js +6 -9
  237. package/src/components/sidebar/template-card/index.js +17 -9
  238. package/src/components/sidebar/template-card/style.scss +49 -35
  239. package/src/components/sidebar/template-card/template-actions.js +43 -0
  240. package/src/components/sidebar/template-card/template-areas.js +6 -6
  241. package/src/components/template-details/edit-template-title.js +10 -2
  242. package/src/components/template-details/index.js +4 -21
  243. package/src/components/template-details/template-areas.js +6 -6
  244. package/src/components/template-part-converter/index.js +2 -3
  245. package/src/components/test/error-boundary.js +38 -0
  246. package/src/components/url-query-controller/index.js +2 -3
  247. package/src/store/actions.js +257 -233
  248. package/src/store/selectors.js +19 -14
@@ -59,23 +59,22 @@ export function __experimentalSetPreviewDeviceType( deviceType ) {
59
59
  * @param {string} templateSlug The template slug.
60
60
  * @return {Object} Action object.
61
61
  */
62
- export const setTemplate = ( templateId, templateSlug ) => async ( {
63
- dispatch,
64
- registry,
65
- } ) => {
66
- if ( ! templateSlug ) {
67
- const template = await registry
68
- .resolveSelect( coreStore )
69
- .getEntityRecord( 'postType', 'wp_template', templateId );
70
- templateSlug = template?.slug;
71
- }
62
+ export const setTemplate =
63
+ ( templateId, templateSlug ) =>
64
+ async ( { dispatch, registry } ) => {
65
+ if ( ! templateSlug ) {
66
+ const template = await registry
67
+ .resolveSelect( coreStore )
68
+ .getEntityRecord( 'postType', 'wp_template', templateId );
69
+ templateSlug = template?.slug;
70
+ }
72
71
 
73
- dispatch( {
74
- type: 'SET_TEMPLATE',
75
- templateId,
76
- page: { context: { templateSlug } },
77
- } );
78
- };
72
+ dispatch( {
73
+ type: 'SET_TEMPLATE',
74
+ templateId,
75
+ page: { context: { templateSlug } },
76
+ } );
77
+ };
79
78
 
80
79
  /**
81
80
  * Action that adds a new template and sets it as the current template.
@@ -84,70 +83,78 @@ export const setTemplate = ( templateId, templateSlug ) => async ( {
84
83
  *
85
84
  * @return {Object} Action object used to set the current template.
86
85
  */
87
- export const addTemplate = ( template ) => async ( { dispatch, registry } ) => {
88
- const newTemplate = await registry
89
- .dispatch( coreStore )
90
- .saveEntityRecord( 'postType', 'wp_template', template );
91
-
92
- if ( template.content ) {
93
- registry
86
+ export const addTemplate =
87
+ ( template ) =>
88
+ async ( { dispatch, registry } ) => {
89
+ const newTemplate = await registry
94
90
  .dispatch( coreStore )
95
- .editEntityRecord(
96
- 'postType',
97
- 'wp_template',
98
- newTemplate.id,
99
- { blocks: parse( template.content ) },
100
- { undoIgnore: true }
101
- );
102
- }
91
+ .saveEntityRecord( 'postType', 'wp_template', template );
92
+
93
+ if ( template.content ) {
94
+ registry
95
+ .dispatch( coreStore )
96
+ .editEntityRecord(
97
+ 'postType',
98
+ 'wp_template',
99
+ newTemplate.id,
100
+ { blocks: parse( template.content ) },
101
+ { undoIgnore: true }
102
+ );
103
+ }
103
104
 
104
- dispatch( {
105
- type: 'SET_TEMPLATE',
106
- templateId: newTemplate.id,
107
- page: { context: { templateSlug: newTemplate.slug } },
108
- } );
109
- };
105
+ dispatch( {
106
+ type: 'SET_TEMPLATE',
107
+ templateId: newTemplate.id,
108
+ page: { context: { templateSlug: newTemplate.slug } },
109
+ } );
110
+ };
110
111
 
111
112
  /**
112
113
  * Action that removes a template.
113
114
  *
114
115
  * @param {Object} template The template object.
115
116
  */
116
- export const removeTemplate = ( template ) => async ( { registry } ) => {
117
- try {
118
- await registry
119
- .dispatch( coreStore )
120
- .deleteEntityRecord( 'postType', template.type, template.id, {
121
- force: true,
122
- } );
117
+ export const removeTemplate =
118
+ ( template ) =>
119
+ async ( { registry } ) => {
120
+ try {
121
+ await registry
122
+ .dispatch( coreStore )
123
+ .deleteEntityRecord( 'postType', template.type, template.id, {
124
+ force: true,
125
+ } );
123
126
 
124
- const lastError = registry
125
- .select( coreStore )
126
- .getLastEntityDeleteError( 'postType', template.type, template.id );
127
+ const lastError = registry
128
+ .select( coreStore )
129
+ .getLastEntityDeleteError(
130
+ 'postType',
131
+ template.type,
132
+ template.id
133
+ );
127
134
 
128
- if ( lastError ) {
129
- throw lastError;
130
- }
135
+ if ( lastError ) {
136
+ throw lastError;
137
+ }
131
138
 
132
- registry.dispatch( noticesStore ).createSuccessNotice(
133
- sprintf(
134
- /* translators: The template/part's name. */
135
- __( '"%s" deleted.' ),
136
- template.title.rendered
137
- ),
138
- { type: 'snackbar' }
139
- );
140
- } catch ( error ) {
141
- const errorMessage =
142
- error.message && error.code !== 'unknown_error'
143
- ? error.message
144
- : __( 'An error occurred while deleting the template.' );
139
+ registry.dispatch( noticesStore ).createSuccessNotice(
140
+ sprintf(
141
+ /* translators: The template/part's name. */
142
+ __( '"%s" deleted.' ),
143
+ template.title.rendered
144
+ ),
145
+ { type: 'snackbar' }
146
+ );
147
+ } catch ( error ) {
148
+ const errorMessage =
149
+ error.message && error.code !== 'unknown_error'
150
+ ? error.message
151
+ : __( 'An error occurred while deleting the template.' );
145
152
 
146
- registry
147
- .dispatch( noticesStore )
148
- .createErrorNotice( errorMessage, { type: 'snackbar' } );
149
- }
150
- };
153
+ registry
154
+ .dispatch( noticesStore )
155
+ .createErrorNotice( errorMessage, { type: 'snackbar' } );
156
+ }
157
+ };
151
158
 
152
159
  /**
153
160
  * Action that sets a template part.
@@ -188,43 +195,45 @@ export function setHomeTemplateId( homeTemplateId ) {
188
195
  *
189
196
  * @return {number} The resolved template ID for the page route.
190
197
  */
191
- export const setPage = ( page ) => async ( { dispatch, registry } ) => {
192
- if ( ! page.path && page.context?.postId ) {
193
- const entity = await registry
198
+ export const setPage =
199
+ ( page ) =>
200
+ async ( { dispatch, registry } ) => {
201
+ if ( ! page.path && page.context?.postId ) {
202
+ const entity = await registry
203
+ .resolveSelect( coreStore )
204
+ .getEntityRecord(
205
+ 'postType',
206
+ page.context.postType || 'post',
207
+ page.context.postId
208
+ );
209
+ // If the entity is undefined for some reason, path will resolve to "/"
210
+ page.path = getPathAndQueryString( entity?.link );
211
+ }
212
+
213
+ const template = await registry
194
214
  .resolveSelect( coreStore )
195
- .getEntityRecord(
196
- 'postType',
197
- page.context.postType || 'post',
198
- page.context.postId
199
- );
200
- // If the entity is undefined for some reason, path will resolve to "/"
201
- page.path = getPathAndQueryString( entity?.link );
202
- }
203
-
204
- const template = await registry
205
- .resolveSelect( coreStore )
206
- .__experimentalGetTemplateForLink( page.path );
207
-
208
- if ( ! template ) {
209
- return;
210
- }
211
-
212
- dispatch( {
213
- type: 'SET_PAGE',
214
- page: template.slug
215
- ? {
216
- ...page,
217
- context: {
218
- ...page.context,
219
- templateSlug: template.slug,
220
- },
221
- }
222
- : page,
223
- templateId: template.id,
224
- } );
225
-
226
- return template.id;
227
- };
215
+ .__experimentalGetTemplateForLink( page.path );
216
+
217
+ if ( ! template ) {
218
+ return;
219
+ }
220
+
221
+ dispatch( {
222
+ type: 'SET_PAGE',
223
+ page: template.slug
224
+ ? {
225
+ ...page,
226
+ context: {
227
+ ...page.context,
228
+ templateSlug: template.slug,
229
+ },
230
+ }
231
+ : page,
232
+ templateId: template.id,
233
+ } );
234
+
235
+ return template.id;
236
+ };
228
237
 
229
238
  /**
230
239
  * Action that sets the active navigation panel menu.
@@ -319,156 +328,171 @@ export function setIsListViewOpened( isOpen ) {
319
328
  * @param {boolean} [options.allowUndo] Whether to allow the user to undo
320
329
  * reverting the template. Default true.
321
330
  */
322
- export const revertTemplate = (
323
- template,
324
- { allowUndo = true } = {}
325
- ) => async ( { registry } ) => {
326
- if ( ! isTemplateRevertable( template ) ) {
327
- registry
328
- .dispatch( noticesStore )
329
- .createErrorNotice( __( 'This template is not revertable.' ), {
330
- type: 'snackbar',
331
- } );
332
- return;
333
- }
334
-
335
- try {
336
- const templateEntityConfig = registry
337
- .select( coreStore )
338
- .getEntityConfig( 'postType', template.type );
339
-
340
- if ( ! templateEntityConfig ) {
331
+ export const revertTemplate =
332
+ ( template, { allowUndo = true } = {} ) =>
333
+ async ( { registry } ) => {
334
+ if ( ! isTemplateRevertable( template ) ) {
341
335
  registry
342
336
  .dispatch( noticesStore )
343
- .createErrorNotice(
344
- __(
345
- 'The editor has encountered an unexpected error. Please reload.'
346
- ),
347
- { type: 'snackbar' }
348
- );
337
+ .createErrorNotice( __( 'This template is not revertable.' ), {
338
+ type: 'snackbar',
339
+ } );
349
340
  return;
350
341
  }
351
342
 
352
- const fileTemplatePath = addQueryArgs(
353
- `${ templateEntityConfig.baseURL }/${ template.id }`,
354
- { context: 'edit', source: 'theme' }
355
- );
343
+ try {
344
+ const templateEntityConfig = registry
345
+ .select( coreStore )
346
+ .getEntityConfig( 'postType', template.type );
356
347
 
357
- const fileTemplate = await apiFetch( { path: fileTemplatePath } );
358
- if ( ! fileTemplate ) {
359
- registry
360
- .dispatch( noticesStore )
361
- .createErrorNotice(
362
- __(
363
- 'The editor has encountered an unexpected error. Please reload.'
364
- ),
365
- { type: 'snackbar' }
366
- );
367
- return;
368
- }
369
-
370
- const serializeBlocks = ( { blocks: blocksForSerialization = [] } ) =>
371
- __unstableSerializeAndClean( blocksForSerialization );
372
-
373
- const edited = registry
374
- .select( coreStore )
375
- .getEditedEntityRecord( 'postType', template.type, template.id );
376
-
377
- // We are fixing up the undo level here to make sure we can undo
378
- // the revert in the header toolbar correctly.
379
- registry.dispatch( coreStore ).editEntityRecord(
380
- 'postType',
381
- template.type,
382
- template.id,
383
- {
384
- content: serializeBlocks, // Required to make the `undo` behave correctly.
385
- blocks: edited.blocks, // Required to revert the blocks in the editor.
386
- source: 'custom', // required to avoid turning the editor into a dirty state
387
- },
388
- {
389
- undoIgnore: true, // Required to merge this edit with the last undo level.
348
+ if ( ! templateEntityConfig ) {
349
+ registry
350
+ .dispatch( noticesStore )
351
+ .createErrorNotice(
352
+ __(
353
+ 'The editor has encountered an unexpected error. Please reload.'
354
+ ),
355
+ { type: 'snackbar' }
356
+ );
357
+ return;
390
358
  }
391
- );
392
359
 
393
- const blocks = parse( fileTemplate?.content?.raw );
394
- registry
395
- .dispatch( coreStore )
396
- .editEntityRecord( 'postType', template.type, fileTemplate.id, {
397
- content: serializeBlocks,
398
- blocks,
399
- source: 'theme',
400
- } );
401
-
402
- if ( allowUndo ) {
403
- const undoRevert = () => {
360
+ const fileTemplatePath = addQueryArgs(
361
+ `${ templateEntityConfig.baseURL }/${ template.id }`,
362
+ { context: 'edit', source: 'theme' }
363
+ );
364
+
365
+ const fileTemplate = await apiFetch( { path: fileTemplatePath } );
366
+ if ( ! fileTemplate ) {
404
367
  registry
405
- .dispatch( coreStore )
406
- .editEntityRecord( 'postType', template.type, edited.id, {
407
- content: serializeBlocks,
408
- blocks: edited.blocks,
409
- source: 'custom',
410
- } );
411
- };
368
+ .dispatch( noticesStore )
369
+ .createErrorNotice(
370
+ __(
371
+ 'The editor has encountered an unexpected error. Please reload.'
372
+ ),
373
+ { type: 'snackbar' }
374
+ );
375
+ return;
376
+ }
377
+
378
+ const serializeBlocks = ( {
379
+ blocks: blocksForSerialization = [],
380
+ } ) => __unstableSerializeAndClean( blocksForSerialization );
381
+
382
+ const edited = registry
383
+ .select( coreStore )
384
+ .getEditedEntityRecord(
385
+ 'postType',
386
+ template.type,
387
+ template.id
388
+ );
412
389
 
390
+ // We are fixing up the undo level here to make sure we can undo
391
+ // the revert in the header toolbar correctly.
392
+ registry.dispatch( coreStore ).editEntityRecord(
393
+ 'postType',
394
+ template.type,
395
+ template.id,
396
+ {
397
+ content: serializeBlocks, // Required to make the `undo` behave correctly.
398
+ blocks: edited.blocks, // Required to revert the blocks in the editor.
399
+ source: 'custom', // required to avoid turning the editor into a dirty state
400
+ },
401
+ {
402
+ undoIgnore: true, // Required to merge this edit with the last undo level.
403
+ }
404
+ );
405
+
406
+ const blocks = parse( fileTemplate?.content?.raw );
413
407
  registry
414
- .dispatch( noticesStore )
415
- .createSuccessNotice( __( 'Template reverted.' ), {
416
- type: 'snackbar',
417
- actions: [
418
- {
419
- label: __( 'Undo' ),
420
- onClick: undoRevert,
421
- },
422
- ],
408
+ .dispatch( coreStore )
409
+ .editEntityRecord( 'postType', template.type, fileTemplate.id, {
410
+ content: serializeBlocks,
411
+ blocks,
412
+ source: 'theme',
423
413
  } );
424
- } else {
414
+
415
+ if ( allowUndo ) {
416
+ const undoRevert = () => {
417
+ registry
418
+ .dispatch( coreStore )
419
+ .editEntityRecord(
420
+ 'postType',
421
+ template.type,
422
+ edited.id,
423
+ {
424
+ content: serializeBlocks,
425
+ blocks: edited.blocks,
426
+ source: 'custom',
427
+ }
428
+ );
429
+ };
430
+
431
+ registry
432
+ .dispatch( noticesStore )
433
+ .createSuccessNotice( __( 'Template reverted.' ), {
434
+ type: 'snackbar',
435
+ actions: [
436
+ {
437
+ label: __( 'Undo' ),
438
+ onClick: undoRevert,
439
+ },
440
+ ],
441
+ } );
442
+ } else {
443
+ registry
444
+ .dispatch( noticesStore )
445
+ .createSuccessNotice( __( 'Template reverted.' ) );
446
+ }
447
+ } catch ( error ) {
448
+ const errorMessage =
449
+ error.message && error.code !== 'unknown_error'
450
+ ? error.message
451
+ : __( 'Template revert failed. Please reload.' );
425
452
  registry
426
453
  .dispatch( noticesStore )
427
- .createSuccessNotice( __( 'Template reverted.' ) );
454
+ .createErrorNotice( errorMessage, { type: 'snackbar' } );
428
455
  }
429
- } catch ( error ) {
430
- const errorMessage =
431
- error.message && error.code !== 'unknown_error'
432
- ? error.message
433
- : __( 'Template revert failed. Please reload.' );
434
- registry
435
- .dispatch( noticesStore )
436
- .createErrorNotice( errorMessage, { type: 'snackbar' } );
437
- }
438
- };
456
+ };
439
457
  /**
440
458
  * Action that opens an editor sidebar.
441
459
  *
442
460
  * @param {?string} name Sidebar name to be opened.
443
461
  */
444
- export const openGeneralSidebar = ( name ) => ( { registry } ) => {
445
- registry
446
- .dispatch( interfaceStore )
447
- .enableComplementaryArea( editSiteStoreName, name );
448
- };
462
+ export const openGeneralSidebar =
463
+ ( name ) =>
464
+ ( { registry } ) => {
465
+ registry
466
+ .dispatch( interfaceStore )
467
+ .enableComplementaryArea( editSiteStoreName, name );
468
+ };
449
469
 
450
470
  /**
451
471
  * Action that closes the sidebar.
452
472
  */
453
- export const closeGeneralSidebar = () => ( { registry } ) => {
454
- registry
455
- .dispatch( interfaceStore )
456
- .disableComplementaryArea( editSiteStoreName );
457
- };
458
-
459
- export const switchEditorMode = ( mode ) => ( { registry } ) => {
460
- registry
461
- .dispatch( 'core/preferences' )
462
- .set( 'core/edit-site', 'editorMode', mode );
463
-
464
- // Unselect blocks when we switch to a non visual mode.
465
- if ( mode !== 'visual' ) {
466
- registry.dispatch( blockEditorStore ).clearSelectedBlock();
467
- }
468
-
469
- if ( mode === 'visual' ) {
470
- speak( __( 'Visual editor selected' ), 'assertive' );
471
- } else if ( mode === 'mosaic' ) {
472
- speak( __( 'Mosaic view selected' ), 'assertive' );
473
- }
474
- };
473
+ export const closeGeneralSidebar =
474
+ () =>
475
+ ( { registry } ) => {
476
+ registry
477
+ .dispatch( interfaceStore )
478
+ .disableComplementaryArea( editSiteStoreName );
479
+ };
480
+
481
+ export const switchEditorMode =
482
+ ( mode ) =>
483
+ ( { registry } ) => {
484
+ registry
485
+ .dispatch( 'core/preferences' )
486
+ .set( 'core/edit-site', 'editorMode', mode );
487
+
488
+ // Unselect blocks when we switch to a non visual mode.
489
+ if ( mode !== 'visual' ) {
490
+ registry.dispatch( blockEditorStore ).clearSelectedBlock();
491
+ }
492
+
493
+ if ( mode === 'visual' ) {
494
+ speak( __( 'Visual editor selected' ), 'assertive' );
495
+ } else if ( mode === 'mosaic' ) {
496
+ speak( __( 'Mosaic view selected' ), 'assertive' );
497
+ }
498
+ };
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { map, keyBy } from 'lodash';
4
+ import { map } from 'lodash';
5
5
  import createSelector from 'rememo';
6
6
 
7
7
  /**
@@ -82,8 +82,8 @@ export function __experimentalGetPreviewDeviceType( state ) {
82
82
  *
83
83
  * @return {Object} Whether the current user can create media or not.
84
84
  */
85
- export const getCanUserCreateMedia = createRegistrySelector( ( select ) => () =>
86
- select( coreDataStore ).canUser( 'create', 'media' )
85
+ export const getCanUserCreateMedia = createRegistrySelector(
86
+ ( select ) => () => select( coreDataStore ).canUser( 'create', 'media' )
87
87
  );
88
88
 
89
89
  /**
@@ -304,11 +304,8 @@ export function isInserterOpened( state ) {
304
304
  * @return {Object} The root client ID, index to insert at and starting filter value.
305
305
  */
306
306
  export function __experimentalGetInsertionPoint( state ) {
307
- const {
308
- rootClientId,
309
- insertionIndex,
310
- filterValue,
311
- } = state.blockInserterPanel;
307
+ const { rootClientId, insertionIndex, filterValue } =
308
+ state.blockInserterPanel;
312
309
  return { rootClientId, insertionIndex, filterValue };
313
310
  }
314
311
 
@@ -339,13 +336,21 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
339
336
  templateId
340
337
  );
341
338
 
342
- const templateParts = select(
343
- coreDataStore
344
- ).getEntityRecords( 'postType', 'wp_template_part', { per_page: -1 } );
345
- const templatePartsById = keyBy(
346
- templateParts,
347
- ( templatePart ) => templatePart.id
339
+ const templateParts = select( coreDataStore ).getEntityRecords(
340
+ 'postType',
341
+ 'wp_template_part',
342
+ { per_page: -1 }
348
343
  );
344
+ const templatePartsById = templateParts
345
+ ? // Key template parts by their ID.
346
+ templateParts.reduce(
347
+ ( newTemplateParts, part ) => ( {
348
+ ...newTemplateParts,
349
+ [ part.id ]: part,
350
+ } ),
351
+ {}
352
+ )
353
+ : {};
349
354
 
350
355
  return ( template.blocks ?? [] )
351
356
  .filter( ( block ) => isTemplatePart( block ) )