@wordpress/edit-site 4.6.0 → 4.9.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 (205) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/add-new-template/add-custom-template-modal.js +185 -0
  3. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -0
  4. package/build/components/add-new-template/new-template.js +92 -32
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/add-new-template/utils.js +139 -0
  7. package/build/components/add-new-template/utils.js.map +1 -0
  8. package/build/components/block-editor/block-inspector-button.js.map +1 -1
  9. package/build/components/block-editor/index.js.map +1 -1
  10. package/build/components/code-editor/code-editor-text-area.js +11 -9
  11. package/build/components/code-editor/code-editor-text-area.js.map +1 -1
  12. package/build/components/edit-template-part-menu-button/index.js.map +1 -1
  13. package/build/components/editor/index.js.map +1 -1
  14. package/build/components/global-styles/context-menu.js +6 -3
  15. package/build/components/global-styles/context-menu.js.map +1 -1
  16. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  17. package/build/components/global-styles/gradients-palette-panel.js +3 -7
  18. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  19. package/build/components/global-styles/hooks.js +1 -1
  20. package/build/components/global-styles/hooks.js.map +1 -1
  21. package/build/components/global-styles/palette.js +2 -1
  22. package/build/components/global-styles/palette.js.map +1 -1
  23. package/build/components/global-styles/preview.js +13 -2
  24. package/build/components/global-styles/preview.js.map +1 -1
  25. package/build/components/global-styles/screen-block-list.js +4 -1
  26. package/build/components/global-styles/screen-block-list.js.map +1 -1
  27. package/build/components/global-styles/screen-button-color.js +80 -0
  28. package/build/components/global-styles/screen-button-color.js.map +1 -0
  29. package/build/components/global-styles/screen-colors.js +47 -7
  30. package/build/components/global-styles/screen-colors.js.map +1 -1
  31. package/build/components/global-styles/screen-root.js +4 -2
  32. package/build/components/global-styles/screen-root.js.map +1 -1
  33. package/build/components/global-styles/screen-style-variations.js +9 -1
  34. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  35. package/build/components/global-styles/screen-typography-element.js +4 -0
  36. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  37. package/build/components/global-styles/screen-typography.js +9 -1
  38. package/build/components/global-styles/screen-typography.js.map +1 -1
  39. package/build/components/global-styles/ui.js +11 -0
  40. package/build/components/global-styles/ui.js.map +1 -1
  41. package/build/components/global-styles/use-global-styles-output.js +40 -9
  42. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  43. package/build/components/global-styles/utils.js +3 -1
  44. package/build/components/global-styles/utils.js.map +1 -1
  45. package/build/components/header/index.js +28 -10
  46. package/build/components/header/index.js.map +1 -1
  47. package/build/components/header/mode-switcher/index.js.map +1 -1
  48. package/build/components/header/more-menu/copy-content-menu-item.js +1 -1
  49. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  50. package/build/components/header/more-menu/site-export.js +4 -1
  51. package/build/components/header/more-menu/site-export.js.map +1 -1
  52. package/build/components/header/undo-redo/redo.js +13 -4
  53. package/build/components/header/undo-redo/redo.js.map +1 -1
  54. package/build/components/header/undo-redo/undo.js +13 -4
  55. package/build/components/header/undo-redo/undo.js.map +1 -1
  56. package/build/components/keyboard-shortcut-help-modal/config.js +17 -0
  57. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  58. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  59. package/build/components/list/actions/index.js.map +1 -1
  60. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  61. package/build/components/list/added-by.js.map +1 -1
  62. package/build/components/navigation-sidebar/index.js.map +1 -1
  63. package/build/components/save-button/index.js.map +1 -1
  64. package/build/components/sidebar/index.js.map +1 -1
  65. package/build/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  66. package/build/components/sidebar/template-card/index.js +19 -7
  67. package/build/components/sidebar/template-card/index.js.map +1 -1
  68. package/build/components/sidebar/template-card/template-actions.js +64 -0
  69. package/build/components/sidebar/template-card/template-actions.js.map +1 -0
  70. package/build/components/sidebar/template-card/template-areas.js.map +1 -1
  71. package/build/components/template-details/template-areas.js.map +1 -1
  72. package/build/components/template-part-converter/index.js.map +1 -1
  73. package/build/components/url-query-controller/index.js.map +1 -1
  74. package/build/store/actions.js.map +1 -1
  75. package/build/store/selectors.js.map +1 -1
  76. package/build-module/components/add-new-template/add-custom-template-modal.js +170 -0
  77. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -0
  78. package/build-module/components/add-new-template/new-template.js +92 -35
  79. package/build-module/components/add-new-template/new-template.js.map +1 -1
  80. package/build-module/components/add-new-template/utils.js +119 -0
  81. package/build-module/components/add-new-template/utils.js.map +1 -0
  82. package/build-module/components/block-editor/block-inspector-button.js.map +1 -1
  83. package/build-module/components/block-editor/index.js.map +1 -1
  84. package/build-module/components/code-editor/code-editor-text-area.js +12 -10
  85. package/build-module/components/code-editor/code-editor-text-area.js.map +1 -1
  86. package/build-module/components/edit-template-part-menu-button/index.js.map +1 -1
  87. package/build-module/components/editor/index.js.map +1 -1
  88. package/build-module/components/global-styles/context-menu.js +6 -3
  89. package/build-module/components/global-styles/context-menu.js.map +1 -1
  90. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  91. package/build-module/components/global-styles/gradients-palette-panel.js +3 -5
  92. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  93. package/build-module/components/global-styles/hooks.js +1 -1
  94. package/build-module/components/global-styles/hooks.js.map +1 -1
  95. package/build-module/components/global-styles/palette.js +2 -1
  96. package/build-module/components/global-styles/palette.js.map +1 -1
  97. package/build-module/components/global-styles/preview.js +14 -3
  98. package/build-module/components/global-styles/preview.js.map +1 -1
  99. package/build-module/components/global-styles/screen-block-list.js +4 -1
  100. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  101. package/build-module/components/global-styles/screen-button-color.js +67 -0
  102. package/build-module/components/global-styles/screen-button-color.js.map +1 -0
  103. package/build-module/components/global-styles/screen-colors.js +48 -8
  104. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  105. package/build-module/components/global-styles/screen-root.js +4 -2
  106. package/build-module/components/global-styles/screen-root.js.map +1 -1
  107. package/build-module/components/global-styles/screen-style-variations.js +9 -1
  108. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  109. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  110. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  111. package/build-module/components/global-styles/screen-typography.js +10 -2
  112. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  113. package/build-module/components/global-styles/ui.js +10 -0
  114. package/build-module/components/global-styles/ui.js.map +1 -1
  115. package/build-module/components/global-styles/use-global-styles-output.js +39 -9
  116. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  117. package/build-module/components/global-styles/utils.js +3 -1
  118. package/build-module/components/global-styles/utils.js.map +1 -1
  119. package/build-module/components/header/index.js +29 -11
  120. package/build-module/components/header/index.js.map +1 -1
  121. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  122. package/build-module/components/header/more-menu/copy-content-menu-item.js +1 -1
  123. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  124. package/build-module/components/header/more-menu/site-export.js +4 -1
  125. package/build-module/components/header/more-menu/site-export.js.map +1 -1
  126. package/build-module/components/header/undo-redo/redo.js +9 -3
  127. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  128. package/build-module/components/header/undo-redo/undo.js +9 -3
  129. package/build-module/components/header/undo-redo/undo.js.map +1 -1
  130. package/build-module/components/keyboard-shortcut-help-modal/config.js +17 -0
  131. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  132. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  133. package/build-module/components/list/actions/index.js.map +1 -1
  134. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  135. package/build-module/components/list/added-by.js.map +1 -1
  136. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  137. package/build-module/components/save-button/index.js.map +1 -1
  138. package/build-module/components/sidebar/index.js.map +1 -1
  139. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  140. package/build-module/components/sidebar/template-card/index.js +18 -7
  141. package/build-module/components/sidebar/template-card/index.js.map +1 -1
  142. package/build-module/components/sidebar/template-card/template-actions.js +49 -0
  143. package/build-module/components/sidebar/template-card/template-actions.js.map +1 -0
  144. package/build-module/components/sidebar/template-card/template-areas.js.map +1 -1
  145. package/build-module/components/template-details/template-areas.js.map +1 -1
  146. package/build-module/components/template-part-converter/index.js.map +1 -1
  147. package/build-module/components/url-query-controller/index.js.map +1 -1
  148. package/build-module/store/actions.js.map +1 -1
  149. package/build-module/store/selectors.js.map +1 -1
  150. package/build-style/style-rtl.css +170 -23
  151. package/build-style/style.css +170 -23
  152. package/package.json +30 -30
  153. package/src/components/add-new-template/add-custom-template-modal.js +231 -0
  154. package/src/components/add-new-template/new-template.js +135 -59
  155. package/src/components/add-new-template/style.scss +116 -0
  156. package/src/components/add-new-template/utils.js +125 -0
  157. package/src/components/block-editor/block-inspector-button.js +2 -3
  158. package/src/components/block-editor/index.js +4 -9
  159. package/src/components/code-editor/code-editor-text-area.js +12 -7
  160. package/src/components/edit-template-part-menu-button/index.js +2 -3
  161. package/src/components/editor/index.js +4 -5
  162. package/src/components/global-styles/context-menu.js +3 -0
  163. package/src/components/global-styles/global-styles-provider.js +4 -8
  164. package/src/components/global-styles/gradients-palette-panel.js +2 -5
  165. package/src/components/global-styles/hooks.js +5 -3
  166. package/src/components/global-styles/palette.js +4 -1
  167. package/src/components/global-styles/preview.js +17 -2
  168. package/src/components/global-styles/screen-block-list.js +14 -5
  169. package/src/components/global-styles/screen-button-color.js +102 -0
  170. package/src/components/global-styles/screen-colors.js +49 -4
  171. package/src/components/global-styles/screen-root.js +12 -5
  172. package/src/components/global-styles/screen-style-variations.js +10 -4
  173. package/src/components/global-styles/screen-typography-element.js +4 -0
  174. package/src/components/global-styles/screen-typography.js +17 -2
  175. package/src/components/global-styles/style.scss +10 -0
  176. package/src/components/global-styles/test/use-global-styles-output.js +82 -16
  177. package/src/components/global-styles/ui.js +13 -0
  178. package/src/components/global-styles/use-global-styles-output.js +43 -4
  179. package/src/components/global-styles/utils.js +3 -0
  180. package/src/components/header/index.js +38 -13
  181. package/src/components/header/mode-switcher/index.js +4 -4
  182. package/src/components/header/more-menu/copy-content-menu-item.js +3 -4
  183. package/src/components/header/more-menu/site-export.js +5 -3
  184. package/src/components/header/style.scss +53 -5
  185. package/src/components/header/undo-redo/redo.js +6 -1
  186. package/src/components/header/undo-redo/undo.js +6 -1
  187. package/src/components/keyboard-shortcut-help-modal/config.js +12 -0
  188. package/src/components/keyboard-shortcuts/index.js +6 -10
  189. package/src/components/list/actions/index.js +2 -3
  190. package/src/components/list/actions/rename-menu-item.js +4 -6
  191. package/src/components/list/added-by.js +4 -3
  192. package/src/components/navigation-sidebar/index.js +2 -4
  193. package/src/components/save-button/index.js +2 -4
  194. package/src/components/sidebar/index.js +6 -6
  195. package/src/components/sidebar/navigation-menu-sidebar/navigation-inspector.js +6 -9
  196. package/src/components/sidebar/navigation-menu-sidebar/style.scss +0 -1
  197. package/src/components/sidebar/template-card/index.js +17 -9
  198. package/src/components/sidebar/template-card/style.scss +49 -35
  199. package/src/components/sidebar/template-card/template-actions.js +43 -0
  200. package/src/components/sidebar/template-card/template-areas.js +6 -6
  201. package/src/components/template-details/template-areas.js +6 -6
  202. package/src/components/template-part-converter/index.js +2 -3
  203. package/src/components/url-query-controller/index.js +2 -3
  204. package/src/store/actions.js +257 -233
  205. package/src/store/selectors.js +9 -10
@@ -1,24 +1,27 @@
1
- import { createElement } from "@wordpress/element";
1
+ import { createElement, Fragment } from "@wordpress/element";
2
2
 
3
3
  /**
4
4
  * External dependencies
5
5
  */
6
- import { filter, find, includes, map } from 'lodash';
6
+ import { filter, includes } from 'lodash';
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
10
 
11
11
  import { DropdownMenu, MenuGroup, MenuItem, NavigableMenu } from '@wordpress/components';
12
+ import { useState } from '@wordpress/element';
12
13
  import { useSelect, useDispatch } from '@wordpress/data';
13
14
  import { store as coreStore } from '@wordpress/core-data';
14
15
  import { store as editorStore } from '@wordpress/editor';
15
16
  import { archive, blockMeta, category, home, list, media, notFound, page, post, postAuthor, postDate, search, tag } from '@wordpress/icons';
16
- import { __ } from '@wordpress/i18n';
17
+ import { __, sprintf } from '@wordpress/i18n';
17
18
  import { store as noticesStore } from '@wordpress/notices';
18
19
  /**
19
20
  * Internal dependencies
20
21
  */
21
22
 
23
+ import AddCustomTemplateModal from './add-custom-template-modal';
24
+ import { usePostTypes, usePostTypesEntitiesInfo } from './utils';
22
25
  import { useHistory } from '../routes';
23
26
  import { store as editSiteStore } from '../../store';
24
27
  const DEFAULT_TEMPLATE_SLUGS = ['front-page', 'single', 'page', 'index', 'archive', 'author', 'category', 'date', 'tag', 'taxonomy', 'search', '404'];
@@ -42,15 +45,19 @@ export default function NewTemplate(_ref) {
42
45
  postType
43
46
  } = _ref;
44
47
  const history = useHistory();
48
+ const postTypes = usePostTypes();
49
+ const [showCustomTemplateModal, setShowCustomTemplateModal] = useState(false);
50
+ const [entityForSuggestions, setEntityForSuggestions] = useState({});
45
51
  const {
46
- templates,
52
+ existingTemplates,
47
53
  defaultTemplateTypes
48
54
  } = useSelect(select => ({
49
- templates: select(coreStore).getEntityRecords('postType', 'wp_template', {
55
+ existingTemplates: select(coreStore).getEntityRecords('postType', 'wp_template', {
50
56
  per_page: -1
51
57
  }),
52
58
  defaultTemplateTypes: select(editorStore).__experimentalGetDefaultTemplateTypes()
53
59
  }), []);
60
+ const postTypesEntitiesInfo = usePostTypesEntitiesInfo(existingTemplates);
54
61
  const {
55
62
  saveEntityRecord
56
63
  } = useDispatch(coreStore);
@@ -61,33 +68,30 @@ export default function NewTemplate(_ref) {
61
68
  setTemplate
62
69
  } = useDispatch(editSiteStore);
63
70
 
64
- async function createTemplate(_ref2) {
65
- let {
66
- slug
67
- } = _ref2;
68
-
71
+ async function createTemplate(template) {
69
72
  try {
70
73
  const {
71
74
  title,
72
- description
73
- } = find(defaultTemplateTypes, {
75
+ description,
74
76
  slug
75
- });
76
- const template = await saveEntityRecord('postType', 'wp_template', {
77
- excerpt: description,
77
+ } = template;
78
+ const newTemplate = await saveEntityRecord('postType', 'wp_template', {
79
+ description,
78
80
  // Slugs need to be strings, so this is for template `404`
79
81
  slug: slug.toString(),
80
82
  status: 'publish',
81
- title
83
+ title,
84
+ // This adds a post meta field in template that is part of `is_custom` value calculation.
85
+ is_wp_suggestion: true
82
86
  }, {
83
87
  throwOnError: true
84
88
  }); // Set template before navigating away to avoid initial stale value.
85
89
 
86
- setTemplate(template.id, template.slug); // Navigate to the created template editor.
90
+ setTemplate(newTemplate.id, newTemplate.slug); // Navigate to the created template editor.
87
91
 
88
92
  history.push({
89
- postId: template.id,
90
- postType: template.type
93
+ postId: newTemplate.id,
94
+ postType: newTemplate.type
91
95
  }); // TODO: Add a success notice?
92
96
  } catch (error) {
93
97
  const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : __('An error occurred while creating the template.');
@@ -97,18 +101,69 @@ export default function NewTemplate(_ref) {
97
101
  }
98
102
  }
99
103
 
100
- const existingTemplateSlugs = map(templates, 'slug');
104
+ const existingTemplateSlugs = (existingTemplates || []).map(_ref2 => {
105
+ let {
106
+ slug
107
+ } = _ref2;
108
+ return slug;
109
+ });
101
110
  const missingTemplates = filter(defaultTemplateTypes, template => includes(DEFAULT_TEMPLATE_SLUGS, template.slug) && !includes(existingTemplateSlugs, template.slug));
111
+ const extraTemplates = (postTypes || []).reduce((accumulator, _postType) => {
112
+ var _postTypesEntitiesInf;
102
113
 
103
- if (!missingTemplates.length) {
114
+ const {
115
+ slug,
116
+ labels,
117
+ icon
118
+ } = _postType;
119
+ const hasGeneralTemplate = existingTemplateSlugs === null || existingTemplateSlugs === void 0 ? void 0 : existingTemplateSlugs.includes(`single-${slug}`);
120
+ const hasEntities = postTypesEntitiesInfo === null || postTypesEntitiesInfo === void 0 ? void 0 : (_postTypesEntitiesInf = postTypesEntitiesInfo[slug]) === null || _postTypesEntitiesInf === void 0 ? void 0 : _postTypesEntitiesInf.hasEntities;
121
+ const menuItem = {
122
+ slug: `single-${slug}`,
123
+ title: sprintf( // translators: %s: Name of the post type e.g: "Post".
124
+ __('Single item: %s'), labels.singular_name),
125
+ description: sprintf( // translators: %s: Name of the post type e.g: "Post".
126
+ __('Displays a single item: %s.'), labels.singular_name),
127
+ // `icon` is the `menu_icon` property of a post type. We
128
+ // only handle `dashicons` for now, even if the `menu_icon`
129
+ // also supports urls and svg as values.
130
+ icon: icon !== null && icon !== void 0 && icon.startsWith('dashicons-') ? icon.slice(10) : null
131
+ }; // We have a different template creation flow only if they have entities.
132
+
133
+ if (hasEntities) {
134
+ menuItem.onClick = template => {
135
+ setShowCustomTemplateModal(true);
136
+ setEntityForSuggestions({
137
+ type: 'postType',
138
+ slug,
139
+ labels,
140
+ hasGeneralTemplate,
141
+ template,
142
+ postsToExclude: postTypesEntitiesInfo[slug].existingPosts
143
+ });
144
+ };
145
+ } // We don't need to add the menu item if there are no
146
+ // entities and the general template exists.
147
+
148
+
149
+ if (!hasGeneralTemplate || hasEntities) {
150
+ accumulator.push(menuItem);
151
+ }
152
+
153
+ return accumulator;
154
+ }, []);
155
+
156
+ if (!missingTemplates.length && !extraTemplates.length) {
104
157
  return null;
105
158
  } // Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.
106
159
 
107
160
 
108
- missingTemplates.sort((template1, template2) => {
161
+ missingTemplates === null || missingTemplates === void 0 ? void 0 : missingTemplates.sort((template1, template2) => {
109
162
  return DEFAULT_TEMPLATE_SLUGS.indexOf(template1.slug) - DEFAULT_TEMPLATE_SLUGS.indexOf(template2.slug);
110
- });
111
- return createElement(DropdownMenu, {
163
+ }); // Append all extra templates at the end of the list for now.
164
+
165
+ missingTemplates.push(...extraTemplates);
166
+ return createElement(Fragment, null, createElement(DropdownMenu, {
112
167
  className: "edit-site-new-template-dropdown",
113
168
  icon: null,
114
169
  text: postType.labels.add_new,
@@ -123,23 +178,25 @@ export default function NewTemplate(_ref) {
123
178
  className: "edit-site-new-template-dropdown__popover"
124
179
  }, createElement(MenuGroup, {
125
180
  label: postType.labels.add_new_item
126
- }, map(missingTemplates, _ref3 => {
127
- let {
181
+ }, missingTemplates.map(template => {
182
+ const {
128
183
  title,
129
184
  description,
130
- slug
131
- } = _ref3;
185
+ slug,
186
+ onClick,
187
+ icon
188
+ } = template;
132
189
  return createElement(MenuItem, {
133
- icon: TEMPLATE_ICONS[slug],
190
+ icon: icon || TEMPLATE_ICONS[slug] || post,
134
191
  iconPosition: "left",
135
192
  info: description,
136
193
  key: slug,
137
- onClick: () => {
138
- createTemplate({
139
- slug
140
- }); // We will be navigated way so no need to close the dropdown.
141
- }
194
+ onClick: () => onClick ? onClick(template) : createTemplate(template)
142
195
  }, title);
143
- }))));
196
+ })))), showCustomTemplateModal && createElement(AddCustomTemplateModal, {
197
+ onClose: () => setShowCustomTemplateModal(false),
198
+ onSelect: createTemplate,
199
+ entityForSuggestions: entityForSuggestions
200
+ }));
144
201
  }
145
202
  //# sourceMappingURL=new-template.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/new-template.js"],"names":["filter","find","includes","map","DropdownMenu","MenuGroup","MenuItem","NavigableMenu","useSelect","useDispatch","store","coreStore","editorStore","archive","blockMeta","category","home","list","media","notFound","page","post","postAuthor","postDate","search","tag","__","noticesStore","useHistory","editSiteStore","DEFAULT_TEMPLATE_SLUGS","TEMPLATE_ICONS","single","index","author","taxonomy","date","attachment","NewTemplate","postType","history","templates","defaultTemplateTypes","select","getEntityRecords","per_page","__experimentalGetDefaultTemplateTypes","saveEntityRecord","createErrorNotice","setTemplate","createTemplate","slug","title","description","template","excerpt","toString","status","throwOnError","id","push","postId","type","error","errorMessage","message","code","existingTemplateSlugs","missingTemplates","length","sort","template1","template2","indexOf","labels","add_new","add_new_item","noArrow","variant"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { filter, find, includes, map } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as editorStore } from '@wordpress/editor';\nimport {\n\tarchive,\n\tblockMeta,\n\tcategory,\n\thome,\n\tlist,\n\tmedia,\n\tnotFound,\n\tpage,\n\tpost,\n\tpostAuthor,\n\tpostDate,\n\tsearch,\n\ttag,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { useHistory } from '../routes';\nimport { store as editSiteStore } from '../../store';\n\nconst DEFAULT_TEMPLATE_SLUGS = [\n\t'front-page',\n\t'single',\n\t'page',\n\t'index',\n\t'archive',\n\t'author',\n\t'category',\n\t'date',\n\t'tag',\n\t'taxonomy',\n\t'search',\n\t'404',\n];\n\nconst TEMPLATE_ICONS = {\n\t'front-page': home,\n\tsingle: post,\n\tpage,\n\tarchive,\n\tsearch,\n\t404: notFound,\n\tindex: list,\n\tcategory,\n\tauthor: postAuthor,\n\ttaxonomy: blockMeta,\n\tdate: postDate,\n\ttag,\n\tattachment: media,\n};\n\nexport default function NewTemplate( { postType } ) {\n\tconst history = useHistory();\n\tconst { templates, defaultTemplateTypes } = useSelect(\n\t\t( select ) => ( {\n\t\t\ttemplates: select( coreStore ).getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t{ per_page: -1 }\n\t\t\t),\n\t\t\tdefaultTemplateTypes: select(\n\t\t\t\teditorStore\n\t\t\t).__experimentalGetDefaultTemplateTypes(),\n\t\t} ),\n\t\t[]\n\t);\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst { setTemplate } = useDispatch( editSiteStore );\n\n\tasync function createTemplate( { slug } ) {\n\t\ttry {\n\t\t\tconst { title, description } = find( defaultTemplateTypes, {\n\t\t\t\tslug,\n\t\t\t} );\n\n\t\t\tconst template = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t{\n\t\t\t\t\texcerpt: description,\n\t\t\t\t\t// Slugs need to be strings, so this is for template `404`\n\t\t\t\t\tslug: slug.toString(),\n\t\t\t\t\tstatus: 'publish',\n\t\t\t\t\ttitle,\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\t// Set template before navigating away to avoid initial stale value.\n\t\t\tsetTemplate( template.id, template.slug );\n\n\t\t\t// Navigate to the created template editor.\n\t\t\thistory.push( {\n\t\t\t\tpostId: template.id,\n\t\t\t\tpostType: template.type,\n\t\t\t} );\n\n\t\t\t// TODO: Add a success notice?\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while creating the template.' );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t} );\n\t\t}\n\t}\n\n\tconst existingTemplateSlugs = map( templates, 'slug' );\n\n\tconst missingTemplates = filter(\n\t\tdefaultTemplateTypes,\n\t\t( template ) =>\n\t\t\tincludes( DEFAULT_TEMPLATE_SLUGS, template.slug ) &&\n\t\t\t! includes( existingTemplateSlugs, template.slug )\n\t);\n\n\tif ( ! missingTemplates.length ) {\n\t\treturn null;\n\t}\n\n\t// Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.\n\tmissingTemplates.sort( ( template1, template2 ) => {\n\t\treturn (\n\t\t\tDEFAULT_TEMPLATE_SLUGS.indexOf( template1.slug ) -\n\t\t\tDEFAULT_TEMPLATE_SLUGS.indexOf( template2.slug )\n\t\t);\n\t} );\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\tclassName=\"edit-site-new-template-dropdown\"\n\t\t\ticon={ null }\n\t\t\ttext={ postType.labels.add_new }\n\t\t\tlabel={ postType.labels.add_new_item }\n\t\t\tpopoverProps={ {\n\t\t\t\tnoArrow: false,\n\t\t\t} }\n\t\t\ttoggleProps={ {\n\t\t\t\tvariant: 'primary',\n\t\t\t} }\n\t\t>\n\t\t\t{ () => (\n\t\t\t\t<NavigableMenu className=\"edit-site-new-template-dropdown__popover\">\n\t\t\t\t\t<MenuGroup label={ postType.labels.add_new_item }>\n\t\t\t\t\t\t{ map(\n\t\t\t\t\t\t\tmissingTemplates,\n\t\t\t\t\t\t\t( { title, description, slug } ) => (\n\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\ticon={ TEMPLATE_ICONS[ slug ] }\n\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\tinfo={ description }\n\t\t\t\t\t\t\t\t\tkey={ slug }\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tcreateTemplate( { slug } );\n\t\t\t\t\t\t\t\t\t\t// We will be navigated way so no need to close the dropdown.\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) }\n\t\t\t\t\t</MenuGroup>\n\t\t\t\t</NavigableMenu>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/new-template.js"],"names":["filter","includes","DropdownMenu","MenuGroup","MenuItem","NavigableMenu","useState","useSelect","useDispatch","store","coreStore","editorStore","archive","blockMeta","category","home","list","media","notFound","page","post","postAuthor","postDate","search","tag","__","sprintf","noticesStore","AddCustomTemplateModal","usePostTypes","usePostTypesEntitiesInfo","useHistory","editSiteStore","DEFAULT_TEMPLATE_SLUGS","TEMPLATE_ICONS","single","index","author","taxonomy","date","attachment","NewTemplate","postType","history","postTypes","showCustomTemplateModal","setShowCustomTemplateModal","entityForSuggestions","setEntityForSuggestions","existingTemplates","defaultTemplateTypes","select","getEntityRecords","per_page","__experimentalGetDefaultTemplateTypes","postTypesEntitiesInfo","saveEntityRecord","createErrorNotice","setTemplate","createTemplate","template","title","description","slug","newTemplate","toString","status","is_wp_suggestion","throwOnError","id","push","postId","type","error","errorMessage","message","code","existingTemplateSlugs","map","missingTemplates","extraTemplates","reduce","accumulator","_postType","labels","icon","hasGeneralTemplate","hasEntities","menuItem","singular_name","startsWith","slice","onClick","postsToExclude","existingPosts","length","sort","template1","template2","indexOf","add_new","add_new_item","noArrow","variant"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { filter, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as editorStore } from '@wordpress/editor';\nimport {\n\tarchive,\n\tblockMeta,\n\tcategory,\n\thome,\n\tlist,\n\tmedia,\n\tnotFound,\n\tpage,\n\tpost,\n\tpostAuthor,\n\tpostDate,\n\tsearch,\n\ttag,\n} from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport AddCustomTemplateModal from './add-custom-template-modal';\nimport { usePostTypes, usePostTypesEntitiesInfo } from './utils';\nimport { useHistory } from '../routes';\nimport { store as editSiteStore } from '../../store';\n\nconst DEFAULT_TEMPLATE_SLUGS = [\n\t'front-page',\n\t'single',\n\t'page',\n\t'index',\n\t'archive',\n\t'author',\n\t'category',\n\t'date',\n\t'tag',\n\t'taxonomy',\n\t'search',\n\t'404',\n];\n\nconst TEMPLATE_ICONS = {\n\t'front-page': home,\n\tsingle: post,\n\tpage,\n\tarchive,\n\tsearch,\n\t404: notFound,\n\tindex: list,\n\tcategory,\n\tauthor: postAuthor,\n\ttaxonomy: blockMeta,\n\tdate: postDate,\n\ttag,\n\tattachment: media,\n};\n\nexport default function NewTemplate( { postType } ) {\n\tconst history = useHistory();\n\tconst postTypes = usePostTypes();\n\tconst [ showCustomTemplateModal, setShowCustomTemplateModal ] =\n\t\tuseState( false );\n\tconst [ entityForSuggestions, setEntityForSuggestions ] = useState( {} );\n\tconst { existingTemplates, defaultTemplateTypes } = useSelect(\n\t\t( select ) => ( {\n\t\t\texistingTemplates: select( coreStore ).getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t{ per_page: -1 }\n\t\t\t),\n\t\t\tdefaultTemplateTypes:\n\t\t\t\tselect( editorStore ).__experimentalGetDefaultTemplateTypes(),\n\t\t} ),\n\t\t[]\n\t);\n\tconst postTypesEntitiesInfo = usePostTypesEntitiesInfo( existingTemplates );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst { setTemplate } = useDispatch( editSiteStore );\n\n\tasync function createTemplate( template ) {\n\t\ttry {\n\t\t\tconst { title, description, slug } = template;\n\t\t\tconst newTemplate = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t{\n\t\t\t\t\tdescription,\n\t\t\t\t\t// Slugs need to be strings, so this is for template `404`\n\t\t\t\t\tslug: slug.toString(),\n\t\t\t\t\tstatus: 'publish',\n\t\t\t\t\ttitle,\n\t\t\t\t\t// This adds a post meta field in template that is part of `is_custom` value calculation.\n\t\t\t\t\tis_wp_suggestion: true,\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\t// Set template before navigating away to avoid initial stale value.\n\t\t\tsetTemplate( newTemplate.id, newTemplate.slug );\n\n\t\t\t// Navigate to the created template editor.\n\t\t\thistory.push( {\n\t\t\t\tpostId: newTemplate.id,\n\t\t\t\tpostType: newTemplate.type,\n\t\t\t} );\n\n\t\t\t// TODO: Add a success notice?\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while creating the template.' );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t} );\n\t\t}\n\t}\n\tconst existingTemplateSlugs = ( existingTemplates || [] ).map(\n\t\t( { slug } ) => slug\n\t);\n\tconst missingTemplates = filter(\n\t\tdefaultTemplateTypes,\n\t\t( template ) =>\n\t\t\tincludes( DEFAULT_TEMPLATE_SLUGS, template.slug ) &&\n\t\t\t! includes( existingTemplateSlugs, template.slug )\n\t);\n\n\tconst extraTemplates = ( postTypes || [] ).reduce(\n\t\t( accumulator, _postType ) => {\n\t\t\tconst { slug, labels, icon } = _postType;\n\t\t\tconst hasGeneralTemplate = existingTemplateSlugs?.includes(\n\t\t\t\t`single-${ slug }`\n\t\t\t);\n\t\t\tconst hasEntities = postTypesEntitiesInfo?.[ slug ]?.hasEntities;\n\t\t\tconst menuItem = {\n\t\t\t\tslug: `single-${ slug }`,\n\t\t\t\ttitle: sprintf(\n\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t__( 'Single item: %s' ),\n\t\t\t\t\tlabels.singular_name\n\t\t\t\t),\n\t\t\t\tdescription: sprintf(\n\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t__( 'Displays a single item: %s.' ),\n\t\t\t\t\tlabels.singular_name\n\t\t\t\t),\n\t\t\t\t// `icon` is the `menu_icon` property of a post type. We\n\t\t\t\t// only handle `dashicons` for now, even if the `menu_icon`\n\t\t\t\t// also supports urls and svg as values.\n\t\t\t\ticon: icon?.startsWith( 'dashicons-' )\n\t\t\t\t\t? icon.slice( 10 )\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t\t// We have a different template creation flow only if they have entities.\n\t\t\tif ( hasEntities ) {\n\t\t\t\tmenuItem.onClick = ( template ) => {\n\t\t\t\t\tsetShowCustomTemplateModal( true );\n\t\t\t\t\tsetEntityForSuggestions( {\n\t\t\t\t\t\ttype: 'postType',\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\tlabels,\n\t\t\t\t\t\thasGeneralTemplate,\n\t\t\t\t\t\ttemplate,\n\t\t\t\t\t\tpostsToExclude:\n\t\t\t\t\t\t\tpostTypesEntitiesInfo[ slug ].existingPosts,\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t}\n\t\t\t// We don't need to add the menu item if there are no\n\t\t\t// entities and the general template exists.\n\t\t\tif ( ! hasGeneralTemplate || hasEntities ) {\n\t\t\t\taccumulator.push( menuItem );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\tif ( ! missingTemplates.length && ! extraTemplates.length ) {\n\t\treturn null;\n\t}\n\t// Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.\n\tmissingTemplates?.sort( ( template1, template2 ) => {\n\t\treturn (\n\t\t\tDEFAULT_TEMPLATE_SLUGS.indexOf( template1.slug ) -\n\t\t\tDEFAULT_TEMPLATE_SLUGS.indexOf( template2.slug )\n\t\t);\n\t} );\n\t// Append all extra templates at the end of the list for now.\n\tmissingTemplates.push( ...extraTemplates );\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu\n\t\t\t\tclassName=\"edit-site-new-template-dropdown\"\n\t\t\t\ticon={ null }\n\t\t\t\ttext={ postType.labels.add_new }\n\t\t\t\tlabel={ postType.labels.add_new_item }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tnoArrow: false,\n\t\t\t\t} }\n\t\t\t\ttoggleProps={ {\n\t\t\t\t\tvariant: 'primary',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ () => (\n\t\t\t\t\t<NavigableMenu className=\"edit-site-new-template-dropdown__popover\">\n\t\t\t\t\t\t<MenuGroup label={ postType.labels.add_new_item }>\n\t\t\t\t\t\t\t{ missingTemplates.map( ( template ) => {\n\t\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\t\t\tslug,\n\t\t\t\t\t\t\t\t\tonClick,\n\t\t\t\t\t\t\t\t\ticon,\n\t\t\t\t\t\t\t\t} = template;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\ticon ||\n\t\t\t\t\t\t\t\t\t\t\tTEMPLATE_ICONS[ slug ] ||\n\t\t\t\t\t\t\t\t\t\t\tpost\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\t\tinfo={ description }\n\t\t\t\t\t\t\t\t\t\tkey={ slug }\n\t\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\t\tonClick\n\t\t\t\t\t\t\t\t\t\t\t\t? onClick( template )\n\t\t\t\t\t\t\t\t\t\t\t\t: createTemplate( template )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t</NavigableMenu>\n\t\t\t\t) }\n\t\t\t</DropdownMenu>\n\t\t\t{ showCustomTemplateModal && (\n\t\t\t\t<AddCustomTemplateModal\n\t\t\t\t\tonClose={ () => setShowCustomTemplateModal( false ) }\n\t\t\t\t\tonSelect={ createTemplate }\n\t\t\t\t\tentityForSuggestions={ entityForSuggestions }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { get } from 'lodash';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+
9
+ import { useSelect } from '@wordpress/data';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
+ import { decodeEntities } from '@wordpress/html-entities';
12
+ import { useMemo } from '@wordpress/element';
13
+ export const usePostTypes = () => {
14
+ const postTypes = useSelect(select => select(coreStore).getPostTypes({
15
+ per_page: -1
16
+ }), []);
17
+ return useMemo(() => {
18
+ const excludedPostTypes = ['attachment', 'page'];
19
+ return postTypes === null || postTypes === void 0 ? void 0 : postTypes.filter(_ref => {
20
+ let {
21
+ viewable,
22
+ slug
23
+ } = _ref;
24
+ return viewable && !excludedPostTypes.includes(slug);
25
+ });
26
+ }, [postTypes]);
27
+ };
28
+ /**
29
+ * @typedef {Object} PostTypeEntitiesInfo
30
+ * @property {boolean} hasEntities If a postType has available entities.
31
+ * @property {number[]} existingPosts An array of the existing entities ids.
32
+ */
33
+
34
+ /**
35
+ * Helper hook that returns information about a post type having
36
+ * posts that we can create a specific template for.
37
+ *
38
+ * First we need to find the existing posts with an associated template,
39
+ * to query afterwards for any remaing post, by excluding them.
40
+ *
41
+ * @param {string[]} existingTemplates The existing templates.
42
+ * @return {Record<string,PostTypeEntitiesInfo>} An object with the postTypes as `keys` and PostTypeEntitiesInfo as values.
43
+ */
44
+
45
+ export const usePostTypesEntitiesInfo = existingTemplates => {
46
+ const postTypes = usePostTypes();
47
+ const slugsToExcludePerEntity = useMemo(() => {
48
+ return postTypes === null || postTypes === void 0 ? void 0 : postTypes.reduce((accumulator, _postType) => {
49
+ const slugsWithTemplates = (existingTemplates || []).reduce((_accumulator, existingTemplate) => {
50
+ const prefix = `single-${_postType.slug}-`;
51
+
52
+ if (existingTemplate.slug.startsWith(prefix)) {
53
+ _accumulator.push(existingTemplate.slug.substring(prefix.length));
54
+ }
55
+
56
+ return _accumulator;
57
+ }, []);
58
+
59
+ if (slugsWithTemplates.length) {
60
+ accumulator[_postType.slug] = slugsWithTemplates;
61
+ }
62
+
63
+ return accumulator;
64
+ }, {});
65
+ }, [postTypes, existingTemplates]);
66
+ const postsToExcludePerEntity = useSelect(select => {
67
+ if (!slugsToExcludePerEntity) {
68
+ return;
69
+ }
70
+
71
+ const postsToExclude = Object.entries(slugsToExcludePerEntity).reduce((accumulator, _ref2) => {
72
+ let [slug, slugsWithTemplates] = _ref2;
73
+ const postsWithTemplates = select(coreStore).getEntityRecords('postType', slug, {
74
+ _fields: 'id',
75
+ context: 'view',
76
+ slug: slugsWithTemplates
77
+ });
78
+
79
+ if (postsWithTemplates !== null && postsWithTemplates !== void 0 && postsWithTemplates.length) {
80
+ accumulator[slug] = postsWithTemplates;
81
+ }
82
+
83
+ return accumulator;
84
+ }, {});
85
+ return postsToExclude;
86
+ }, [slugsToExcludePerEntity]);
87
+ const entitiesInfo = useSelect(select => {
88
+ return postTypes === null || postTypes === void 0 ? void 0 : postTypes.reduce((accumulator, _ref3) => {
89
+ var _postsToExcludePerEnt, _select$getEntityReco;
90
+
91
+ let {
92
+ slug
93
+ } = _ref3;
94
+ const existingPosts = (postsToExcludePerEntity === null || postsToExcludePerEntity === void 0 ? void 0 : (_postsToExcludePerEnt = postsToExcludePerEntity[slug]) === null || _postsToExcludePerEnt === void 0 ? void 0 : _postsToExcludePerEnt.map(_ref4 => {
95
+ let {
96
+ id
97
+ } = _ref4;
98
+ return id;
99
+ })) || [];
100
+ accumulator[slug] = {
101
+ hasEntities: !!((_select$getEntityReco = select(coreStore).getEntityRecords('postType', slug, {
102
+ per_page: 1,
103
+ _fields: 'id',
104
+ context: 'view',
105
+ exclude: existingPosts
106
+ })) !== null && _select$getEntityReco !== void 0 && _select$getEntityReco.length),
107
+ existingPosts
108
+ };
109
+ return accumulator;
110
+ }, {});
111
+ }, [postTypes, postsToExcludePerEntity]);
112
+ return entitiesInfo;
113
+ };
114
+ export const mapToIHasNameAndId = (entities, path) => {
115
+ return (entities || []).map(entity => ({ ...entity,
116
+ name: decodeEntities(get(entity, path))
117
+ }));
118
+ };
119
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/utils.js"],"names":["get","useSelect","store","coreStore","decodeEntities","useMemo","usePostTypes","postTypes","select","getPostTypes","per_page","excludedPostTypes","filter","viewable","slug","includes","usePostTypesEntitiesInfo","existingTemplates","slugsToExcludePerEntity","reduce","accumulator","_postType","slugsWithTemplates","_accumulator","existingTemplate","prefix","startsWith","push","substring","length","postsToExcludePerEntity","postsToExclude","Object","entries","postsWithTemplates","getEntityRecords","_fields","context","entitiesInfo","existingPosts","map","id","hasEntities","exclude","mapToIHasNameAndId","entities","path","entity","name"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useMemo } from '@wordpress/element';\n\nexport const usePostTypes = () => {\n\tconst postTypes = useSelect(\n\t\t( select ) => select( coreStore ).getPostTypes( { per_page: -1 } ),\n\t\t[]\n\t);\n\treturn useMemo( () => {\n\t\tconst excludedPostTypes = [ 'attachment', 'page' ];\n\t\treturn postTypes?.filter(\n\t\t\t( { viewable, slug } ) =>\n\t\t\t\tviewable && ! excludedPostTypes.includes( slug )\n\t\t);\n\t}, [ postTypes ] );\n};\n\n/**\n * @typedef {Object} PostTypeEntitiesInfo\n * @property {boolean} hasEntities If a postType has available entities.\n * @property {number[]} existingPosts An array of the existing entities ids.\n */\n\n/**\n * Helper hook that returns information about a post type having\n * posts that we can create a specific template for.\n *\n * First we need to find the existing posts with an associated template,\n * to query afterwards for any remaing post, by excluding them.\n *\n * @param {string[]} existingTemplates The existing templates.\n * @return {Record<string,PostTypeEntitiesInfo>} An object with the postTypes as `keys` and PostTypeEntitiesInfo as values.\n */\nexport const usePostTypesEntitiesInfo = ( existingTemplates ) => {\n\tconst postTypes = usePostTypes();\n\tconst slugsToExcludePerEntity = useMemo( () => {\n\t\treturn postTypes?.reduce( ( accumulator, _postType ) => {\n\t\t\tconst slugsWithTemplates = ( existingTemplates || [] ).reduce(\n\t\t\t\t( _accumulator, existingTemplate ) => {\n\t\t\t\t\tconst prefix = `single-${ _postType.slug }-`;\n\t\t\t\t\tif ( existingTemplate.slug.startsWith( prefix ) ) {\n\t\t\t\t\t\t_accumulator.push(\n\t\t\t\t\t\t\texistingTemplate.slug.substring( prefix.length )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn _accumulator;\n\t\t\t\t},\n\t\t\t\t[]\n\t\t\t);\n\t\t\tif ( slugsWithTemplates.length ) {\n\t\t\t\taccumulator[ _postType.slug ] = slugsWithTemplates;\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, {} );\n\t}, [ postTypes, existingTemplates ] );\n\tconst postsToExcludePerEntity = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! slugsToExcludePerEntity ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst postsToExclude = Object.entries(\n\t\t\t\tslugsToExcludePerEntity\n\t\t\t).reduce( ( accumulator, [ slug, slugsWithTemplates ] ) => {\n\t\t\t\tconst postsWithTemplates = select( coreStore ).getEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\tslug,\n\t\t\t\t\t{\n\t\t\t\t\t\t_fields: 'id',\n\t\t\t\t\t\tcontext: 'view',\n\t\t\t\t\t\tslug: slugsWithTemplates,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif ( postsWithTemplates?.length ) {\n\t\t\t\t\taccumulator[ slug ] = postsWithTemplates;\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} );\n\t\t\treturn postsToExclude;\n\t\t},\n\t\t[ slugsToExcludePerEntity ]\n\t);\n\tconst entitiesInfo = useSelect(\n\t\t( select ) => {\n\t\t\treturn postTypes?.reduce( ( accumulator, { slug } ) => {\n\t\t\t\tconst existingPosts =\n\t\t\t\t\tpostsToExcludePerEntity?.[ slug ]?.map(\n\t\t\t\t\t\t( { id } ) => id\n\t\t\t\t\t) || [];\n\t\t\t\taccumulator[ slug ] = {\n\t\t\t\t\thasEntities: !! select( coreStore ).getEntityRecords(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t_fields: 'id',\n\t\t\t\t\t\t\tcontext: 'view',\n\t\t\t\t\t\t\texclude: existingPosts,\n\t\t\t\t\t\t}\n\t\t\t\t\t)?.length,\n\t\t\t\t\texistingPosts,\n\t\t\t\t};\n\t\t\t\treturn accumulator;\n\t\t\t}, {} );\n\t\t},\n\t\t[ postTypes, postsToExcludePerEntity ]\n\t);\n\treturn entitiesInfo;\n};\n\nexport const mapToIHasNameAndId = ( entities, path ) => {\n\treturn ( entities || [] ).map( ( entity ) => ( {\n\t\t...entity,\n\t\tname: decodeEntities( get( entity, path ) ),\n\t} ) );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/block-editor/block-inspector-button.js"],"names":["__","speak","MenuItem","useSelect","useDispatch","store","interfaceStore","keyboardShortcutsStore","editSiteStore","STORE_NAME","SIDEBAR_BLOCK","BlockInspectorButton","onClick","shortcut","isBlockInspectorOpen","select","getShortcutRepresentation","getActiveComplementaryArea","name","enableComplementaryArea","disableComplementaryArea","label"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAT,QAAsB,iBAAtB;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,KAAK,IAAIC,cAAlB,QAAwC,sBAAxC;AACA,SAASD,KAAK,IAAIE,sBAAlB,QAAgD,+BAAhD;AAEA;AACA;AACA;;AACA,SAASF,KAAK,IAAIG,aAAlB,QAAuC,aAAvC;AACA,SAASC,UAAT,QAA2B,uBAA3B;AACA,SAASC,aAAT,QAA8B,sBAA9B;AAEA,eAAe,SAASC,oBAAT,OAAwD;AAAA,MAAzB;AAAEC,IAAAA,OAAO,GAAG,MAAM,CAAE;AAApB,GAAyB;AACtE,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAqCX,SAAS,CACjDY,MAAF,KAAgB;AACfF,IAAAA,QAAQ,EAAEE,MAAM,CACfR,sBADe,CAAN,CAERS,yBAFQ,CAGT,8CAHS,CADK;AAMfF,IAAAA,oBAAoB,EACnBC,MAAM,CAAET,cAAF,CAAN,CAAyBW,0BAAzB,CACCT,aAAa,CAACU,IADf,MAEMR;AATQ,GAAhB,CADmD,EAYnD,EAZmD,CAApD;AAcA,QAAM;AAAES,IAAAA,uBAAF;AAA2BC,IAAAA;AAA3B,MAAwDhB,WAAW,CACxEE,cADwE,CAAzE;AAIA,QAAMe,KAAK,GAAGP,oBAAoB,GAC/Bd,EAAE,CAAE,oBAAF,CAD6B,GAE/BA,EAAE,CAAE,oBAAF,CAFL;AAIA,SACC,cAAC,QAAD;AACC,IAAA,OAAO,EAAG,MAAM;AACf,UAAKc,oBAAL,EAA4B;AAC3BM,QAAAA,wBAAwB,CAAEX,UAAF,CAAxB;AACAR,QAAAA,KAAK,CAAED,EAAE,CAAE,uBAAF,CAAJ,CAAL;AACA,OAHD,MAGO;AACNmB,QAAAA,uBAAuB,CAAEV,UAAF,EAAcC,aAAd,CAAvB;AACAT,QAAAA,KAAK,CACJD,EAAE,CACD,4EADC,CADE,CAAL;AAKA,OAXc,CAYf;;;AACAY,MAAAA,OAAO;AACP,KAfF;AAgBC,IAAA,QAAQ,EAAGC;AAhBZ,KAkBGQ,KAlBH,CADD;AAsBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { MenuItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../store';\nimport { STORE_NAME } from '../../store/constants';\nimport { SIDEBAR_BLOCK } from '../sidebar/constants';\n\nexport default function BlockInspectorButton( { onClick = () => {} } ) {\n\tconst { shortcut, isBlockInspectorOpen } = useSelect(\n\t\t( select ) => ( {\n\t\t\tshortcut: select(\n\t\t\t\tkeyboardShortcutsStore\n\t\t\t).getShortcutRepresentation(\n\t\t\t\t'core/edit-site/toggle-block-settings-sidebar'\n\t\t\t),\n\t\t\tisBlockInspectorOpen:\n\t\t\t\tselect( interfaceStore ).getActiveComplementaryArea(\n\t\t\t\t\teditSiteStore.name\n\t\t\t\t) === SIDEBAR_BLOCK,\n\t\t} ),\n\t\t[]\n\t);\n\tconst { enableComplementaryArea, disableComplementaryArea } = useDispatch(\n\t\tinterfaceStore\n\t);\n\n\tconst label = isBlockInspectorOpen\n\t\t? __( 'Hide more settings' )\n\t\t: __( 'Show more settings' );\n\n\treturn (\n\t\t<MenuItem\n\t\t\tonClick={ () => {\n\t\t\t\tif ( isBlockInspectorOpen ) {\n\t\t\t\t\tdisableComplementaryArea( STORE_NAME );\n\t\t\t\t\tspeak( __( 'Block settings closed' ) );\n\t\t\t\t} else {\n\t\t\t\t\tenableComplementaryArea( STORE_NAME, SIDEBAR_BLOCK );\n\t\t\t\t\tspeak(\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Additional settings are now available in the Editor block settings sidebar'\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Close dropdown menu.\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tshortcut={ shortcut }\n\t\t>\n\t\t\t{ label }\n\t\t</MenuItem>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/block-editor/block-inspector-button.js"],"names":["__","speak","MenuItem","useSelect","useDispatch","store","interfaceStore","keyboardShortcutsStore","editSiteStore","STORE_NAME","SIDEBAR_BLOCK","BlockInspectorButton","onClick","shortcut","isBlockInspectorOpen","select","getShortcutRepresentation","getActiveComplementaryArea","name","enableComplementaryArea","disableComplementaryArea","label"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAT,QAAsB,iBAAtB;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,KAAK,IAAIC,cAAlB,QAAwC,sBAAxC;AACA,SAASD,KAAK,IAAIE,sBAAlB,QAAgD,+BAAhD;AAEA;AACA;AACA;;AACA,SAASF,KAAK,IAAIG,aAAlB,QAAuC,aAAvC;AACA,SAASC,UAAT,QAA2B,uBAA3B;AACA,SAASC,aAAT,QAA8B,sBAA9B;AAEA,eAAe,SAASC,oBAAT,OAAwD;AAAA,MAAzB;AAAEC,IAAAA,OAAO,GAAG,MAAM,CAAE;AAApB,GAAyB;AACtE,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAqCX,SAAS,CACjDY,MAAF,KAAgB;AACfF,IAAAA,QAAQ,EAAEE,MAAM,CACfR,sBADe,CAAN,CAERS,yBAFQ,CAGT,8CAHS,CADK;AAMfF,IAAAA,oBAAoB,EACnBC,MAAM,CAAET,cAAF,CAAN,CAAyBW,0BAAzB,CACCT,aAAa,CAACU,IADf,MAEMR;AATQ,GAAhB,CADmD,EAYnD,EAZmD,CAApD;AAcA,QAAM;AAAES,IAAAA,uBAAF;AAA2BC,IAAAA;AAA3B,MACLhB,WAAW,CAAEE,cAAF,CADZ;AAGA,QAAMe,KAAK,GAAGP,oBAAoB,GAC/Bd,EAAE,CAAE,oBAAF,CAD6B,GAE/BA,EAAE,CAAE,oBAAF,CAFL;AAIA,SACC,cAAC,QAAD;AACC,IAAA,OAAO,EAAG,MAAM;AACf,UAAKc,oBAAL,EAA4B;AAC3BM,QAAAA,wBAAwB,CAAEX,UAAF,CAAxB;AACAR,QAAAA,KAAK,CAAED,EAAE,CAAE,uBAAF,CAAJ,CAAL;AACA,OAHD,MAGO;AACNmB,QAAAA,uBAAuB,CAAEV,UAAF,EAAcC,aAAd,CAAvB;AACAT,QAAAA,KAAK,CACJD,EAAE,CACD,4EADC,CADE,CAAL;AAKA,OAXc,CAYf;;;AACAY,MAAAA,OAAO;AACP,KAfF;AAgBC,IAAA,QAAQ,EAAGC;AAhBZ,KAkBGQ,KAlBH,CADD;AAsBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { MenuItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../store';\nimport { STORE_NAME } from '../../store/constants';\nimport { SIDEBAR_BLOCK } from '../sidebar/constants';\n\nexport default function BlockInspectorButton( { onClick = () => {} } ) {\n\tconst { shortcut, isBlockInspectorOpen } = useSelect(\n\t\t( select ) => ( {\n\t\t\tshortcut: select(\n\t\t\t\tkeyboardShortcutsStore\n\t\t\t).getShortcutRepresentation(\n\t\t\t\t'core/edit-site/toggle-block-settings-sidebar'\n\t\t\t),\n\t\t\tisBlockInspectorOpen:\n\t\t\t\tselect( interfaceStore ).getActiveComplementaryArea(\n\t\t\t\t\teditSiteStore.name\n\t\t\t\t) === SIDEBAR_BLOCK,\n\t\t} ),\n\t\t[]\n\t);\n\tconst { enableComplementaryArea, disableComplementaryArea } =\n\t\tuseDispatch( interfaceStore );\n\n\tconst label = isBlockInspectorOpen\n\t\t? __( 'Hide more settings' )\n\t\t: __( 'Show more settings' );\n\n\treturn (\n\t\t<MenuItem\n\t\t\tonClick={ () => {\n\t\t\t\tif ( isBlockInspectorOpen ) {\n\t\t\t\t\tdisableComplementaryArea( STORE_NAME );\n\t\t\t\t\tspeak( __( 'Block settings closed' ) );\n\t\t\t\t} else {\n\t\t\t\t\tenableComplementaryArea( STORE_NAME, SIDEBAR_BLOCK );\n\t\t\t\t\tspeak(\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Additional settings are now available in the Editor block settings sidebar'\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Close dropdown menu.\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tshortcut={ shortcut }\n\t\t>\n\t\t\t{ label }\n\t\t</MenuItem>\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/block-editor/index.js"],"names":["classnames","omit","unionBy","useSelect","useDispatch","useCallback","useMemo","useRef","Fragment","useEntityBlockEditor","store","coreStore","BlockList","BlockEditorProvider","__experimentalLinkControl","BlockInspector","BlockTools","__unstableBlockToolbarLastItem","__unstableBlockSettingsMenuFirstItem","__unstableUseTypingObserver","useTypingObserver","BlockEditorKeyboardShortcuts","blockEditorStore","__unstableBlockNameContext","useMergeRefs","useViewportMatch","ReusableBlocksMenuItems","listView","ToolbarButton","ToolbarGroup","__","interfaceStore","TemplatePartConverter","NavigateToLink","SidebarInspectorFill","editSiteStore","BlockInspectorButton","EditTemplatePartMenuButton","BackButton","ResizableEditor","LAYOUT","type","alignments","BlockEditor","setIsInserterOpen","storedSettings","templateType","templateId","page","select","getSettings","getEditedPostType","getEditedPostId","getPage","settingsBlockPatterns","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","settingsBlockPatternCategories","__experimentalAdditionalBlockPatternCategories","__experimentalBlockPatternCategories","restBlockPatterns","restBlockPatternCategories","getBlockPatterns","getBlockPatternCategories","blockPatterns","blockPatternCategories","settings","blocks","onInput","onChange","setPage","enableComplementaryArea","openNavigationSidebar","contentRef","mergedRefs","isMobileViewport","clearSelectedBlock","isTemplatePart","hasBlocks","length","NavMenuSidebarToggle","MaybeNavMenuSidebarToggle","process","env","IS_GUTENBERG_PLUGIN","fillProps","event","target","currentTarget","undefined","onClose","blockName"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { omit, unionBy } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo, useRef, Fragment } from '@wordpress/element';\nimport { useEntityBlockEditor, store as coreStore } from '@wordpress/core-data';\nimport {\n\tBlockList,\n\tBlockEditorProvider,\n\t__experimentalLinkControl,\n\tBlockInspector,\n\tBlockTools,\n\t__unstableBlockToolbarLastItem,\n\t__unstableBlockSettingsMenuFirstItem,\n\t__unstableUseTypingObserver as useTypingObserver,\n\tBlockEditorKeyboardShortcuts,\n\tstore as blockEditorStore,\n\t__unstableBlockNameContext,\n} from '@wordpress/block-editor';\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\nimport { ReusableBlocksMenuItems } from '@wordpress/reusable-blocks';\nimport { listView } from '@wordpress/icons';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartConverter from '../template-part-converter';\nimport NavigateToLink from '../navigate-to-link';\nimport { SidebarInspectorFill } from '../sidebar';\nimport { store as editSiteStore } from '../../store';\nimport BlockInspectorButton from './block-inspector-button';\nimport EditTemplatePartMenuButton from '../edit-template-part-menu-button';\nimport BackButton from './back-button';\nimport ResizableEditor from './resizable-editor';\n\nconst LAYOUT = {\n\ttype: 'default',\n\t// At the root level of the site editor, no alignments should be allowed.\n\talignments: [],\n};\n\nexport default function BlockEditor( { setIsInserterOpen } ) {\n\tconst { storedSettings, templateType, templateId, page } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSettings,\n\t\t\t\tgetEditedPostType,\n\t\t\t\tgetEditedPostId,\n\t\t\t\tgetPage,\n\t\t\t} = select( editSiteStore );\n\n\t\t\treturn {\n\t\t\t\tstoredSettings: getSettings( setIsInserterOpen ),\n\t\t\t\ttemplateType: getEditedPostType(),\n\t\t\t\ttemplateId: getEditedPostId(),\n\t\t\t\tpage: getPage(),\n\t\t\t};\n\t\t},\n\t\t[ setIsInserterOpen ]\n\t);\n\n\tconst settingsBlockPatterns =\n\t\tstoredSettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0\n\t\tstoredSettings.__experimentalBlockPatterns; // WP 5.9\n\tconst settingsBlockPatternCategories =\n\t\tstoredSettings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0\n\t\tstoredSettings.__experimentalBlockPatternCategories; // WP 5.9\n\n\tconst { restBlockPatterns, restBlockPatternCategories } = useSelect(\n\t\t( select ) => ( {\n\t\t\trestBlockPatterns: select( coreStore ).getBlockPatterns(),\n\t\t\trestBlockPatternCategories: select(\n\t\t\t\tcoreStore\n\t\t\t).getBlockPatternCategories(),\n\t\t} ),\n\t\t[]\n\t);\n\n\tconst blockPatterns = useMemo(\n\t\t() => unionBy( settingsBlockPatterns, restBlockPatterns, 'name' ),\n\t\t[ settingsBlockPatterns, restBlockPatterns ]\n\t);\n\n\tconst blockPatternCategories = useMemo(\n\t\t() =>\n\t\t\tunionBy(\n\t\t\t\tsettingsBlockPatternCategories,\n\t\t\t\trestBlockPatternCategories,\n\t\t\t\t'name'\n\t\t\t),\n\t\t[ settingsBlockPatternCategories, restBlockPatternCategories ]\n\t);\n\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...omit( storedSettings, [\n\t\t\t\t'__experimentalAdditionalBlockPatterns',\n\t\t\t\t'__experimentalAdditionalBlockPatternCategories',\n\t\t\t] ),\n\t\t\t__experimentalBlockPatterns: blockPatterns,\n\t\t\t__experimentalBlockPatternCategories: blockPatternCategories,\n\t\t} ),\n\t\t[ storedSettings, blockPatterns, blockPatternCategories ]\n\t);\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\ttemplateType\n\t);\n\tconst { setPage } = useDispatch( editSiteStore );\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\tconst openNavigationSidebar = useCallback( () => {\n\t\tenableComplementaryArea(\n\t\t\t'core/edit-site',\n\t\t\t'edit-site/navigation-menu'\n\t\t);\n\t}, [ enableComplementaryArea ] );\n\tconst contentRef = useRef();\n\tconst mergedRefs = useMergeRefs( [ contentRef, useTypingObserver() ] );\n\tconst isMobileViewport = useViewportMatch( 'small', '<' );\n\tconst { clearSelectedBlock } = useDispatch( blockEditorStore );\n\n\tconst isTemplatePart = templateType === 'wp_template_part';\n\tconst hasBlocks = blocks.length !== 0;\n\n\tconst NavMenuSidebarToggle = () => (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarButton\n\t\t\t\tclassName=\"components-toolbar__control\"\n\t\t\t\tlabel={ __( 'Open list view' ) }\n\t\t\t\tonClick={ openNavigationSidebar }\n\t\t\t\ticon={ listView }\n\t\t\t/>\n\t\t</ToolbarGroup>\n\t);\n\n\t// Conditionally include NavMenu sidebar in Plugin only.\n\t// Optimise for dead code elimination.\n\t// See https://github.com/WordPress/gutenberg/blob/trunk/docs/how-to-guides/feature-flags.md#dead-code-elimination.\n\tlet MaybeNavMenuSidebarToggle = Fragment;\n\n\tif ( process.env.IS_GUTENBERG_PLUGIN ) {\n\t\tMaybeNavMenuSidebarToggle = NavMenuSidebarToggle;\n\t}\n\n\treturn (\n\t\t<BlockEditorProvider\n\t\t\tsettings={ settings }\n\t\t\tvalue={ blocks }\n\t\t\tonInput={ onInput }\n\t\t\tonChange={ onChange }\n\t\t\tuseSubRegistry={ false }\n\t\t>\n\t\t\t<EditTemplatePartMenuButton />\n\t\t\t<TemplatePartConverter />\n\t\t\t<__experimentalLinkControl.ViewerFill>\n\t\t\t\t{ useCallback(\n\t\t\t\t\t( fillProps ) => (\n\t\t\t\t\t\t<NavigateToLink\n\t\t\t\t\t\t\t{ ...fillProps }\n\t\t\t\t\t\t\tactivePage={ page }\n\t\t\t\t\t\t\tonActivePageChange={ setPage }\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\t\t\t\t\t[ page ]\n\t\t\t\t) }\n\t\t\t</__experimentalLinkControl.ViewerFill>\n\t\t\t<SidebarInspectorFill>\n\t\t\t\t<BlockInspector />\n\t\t\t</SidebarInspectorFill>\n\t\t\t<BlockTools\n\t\t\t\tclassName={ classnames( 'edit-site-visual-editor', {\n\t\t\t\t\t'is-focus-mode': isTemplatePart,\n\t\t\t\t} ) }\n\t\t\t\t__unstableContentRef={ contentRef }\n\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t// Clear selected block when clicking on the gray background.\n\t\t\t\t\tif ( event.target === event.currentTarget ) {\n\t\t\t\t\t\tclearSelectedBlock();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<BlockEditorKeyboardShortcuts.Register />\n\t\t\t\t<BackButton />\n\t\t\t\t<ResizableEditor\n\t\t\t\t\t// Reinitialize the editor and reset the states when the template changes.\n\t\t\t\t\tkey={ templateId }\n\t\t\t\t\tenableResizing={\n\t\t\t\t\t\tisTemplatePart &&\n\t\t\t\t\t\t// Disable resizing in mobile viewport.\n\t\t\t\t\t\t! isMobileViewport\n\t\t\t\t\t}\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t\tcontentRef={ mergedRefs }\n\t\t\t\t>\n\t\t\t\t\t<BlockList\n\t\t\t\t\t\tclassName=\"edit-site-block-editor__block-list wp-site-blocks\"\n\t\t\t\t\t\t__experimentalLayout={ LAYOUT }\n\t\t\t\t\t\trenderAppender={\n\t\t\t\t\t\t\tisTemplatePart && hasBlocks ? false : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</ResizableEditor>\n\t\t\t\t<__unstableBlockSettingsMenuFirstItem>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<BlockInspectorButton onClick={ onClose } />\n\t\t\t\t\t) }\n\t\t\t\t</__unstableBlockSettingsMenuFirstItem>\n\t\t\t\t<__unstableBlockToolbarLastItem>\n\t\t\t\t\t<__unstableBlockNameContext.Consumer>\n\t\t\t\t\t\t{ ( blockName ) =>\n\t\t\t\t\t\t\tblockName === 'core/navigation' && (\n\t\t\t\t\t\t\t\t<MaybeNavMenuSidebarToggle />\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t</__unstableBlockNameContext.Consumer>\n\t\t\t\t</__unstableBlockToolbarLastItem>\n\t\t\t</BlockTools>\n\t\t\t<ReusableBlocksMenuItems />\n\t\t</BlockEditorProvider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/block-editor/index.js"],"names":["classnames","omit","unionBy","useSelect","useDispatch","useCallback","useMemo","useRef","Fragment","useEntityBlockEditor","store","coreStore","BlockList","BlockEditorProvider","__experimentalLinkControl","BlockInspector","BlockTools","__unstableBlockToolbarLastItem","__unstableBlockSettingsMenuFirstItem","__unstableUseTypingObserver","useTypingObserver","BlockEditorKeyboardShortcuts","blockEditorStore","__unstableBlockNameContext","useMergeRefs","useViewportMatch","ReusableBlocksMenuItems","listView","ToolbarButton","ToolbarGroup","__","interfaceStore","TemplatePartConverter","NavigateToLink","SidebarInspectorFill","editSiteStore","BlockInspectorButton","EditTemplatePartMenuButton","BackButton","ResizableEditor","LAYOUT","type","alignments","BlockEditor","setIsInserterOpen","storedSettings","templateType","templateId","page","select","getSettings","getEditedPostType","getEditedPostId","getPage","settingsBlockPatterns","__experimentalAdditionalBlockPatterns","__experimentalBlockPatterns","settingsBlockPatternCategories","__experimentalAdditionalBlockPatternCategories","__experimentalBlockPatternCategories","restBlockPatterns","restBlockPatternCategories","getBlockPatterns","getBlockPatternCategories","blockPatterns","blockPatternCategories","settings","blocks","onInput","onChange","setPage","enableComplementaryArea","openNavigationSidebar","contentRef","mergedRefs","isMobileViewport","clearSelectedBlock","isTemplatePart","hasBlocks","length","NavMenuSidebarToggle","MaybeNavMenuSidebarToggle","process","env","IS_GUTENBERG_PLUGIN","fillProps","event","target","currentTarget","undefined","onClose","blockName"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { omit, unionBy } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo, useRef, Fragment } from '@wordpress/element';\nimport { useEntityBlockEditor, store as coreStore } from '@wordpress/core-data';\nimport {\n\tBlockList,\n\tBlockEditorProvider,\n\t__experimentalLinkControl,\n\tBlockInspector,\n\tBlockTools,\n\t__unstableBlockToolbarLastItem,\n\t__unstableBlockSettingsMenuFirstItem,\n\t__unstableUseTypingObserver as useTypingObserver,\n\tBlockEditorKeyboardShortcuts,\n\tstore as blockEditorStore,\n\t__unstableBlockNameContext,\n} from '@wordpress/block-editor';\nimport { useMergeRefs, useViewportMatch } from '@wordpress/compose';\nimport { ReusableBlocksMenuItems } from '@wordpress/reusable-blocks';\nimport { listView } from '@wordpress/icons';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartConverter from '../template-part-converter';\nimport NavigateToLink from '../navigate-to-link';\nimport { SidebarInspectorFill } from '../sidebar';\nimport { store as editSiteStore } from '../../store';\nimport BlockInspectorButton from './block-inspector-button';\nimport EditTemplatePartMenuButton from '../edit-template-part-menu-button';\nimport BackButton from './back-button';\nimport ResizableEditor from './resizable-editor';\n\nconst LAYOUT = {\n\ttype: 'default',\n\t// At the root level of the site editor, no alignments should be allowed.\n\talignments: [],\n};\n\nexport default function BlockEditor( { setIsInserterOpen } ) {\n\tconst { storedSettings, templateType, templateId, page } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings, getEditedPostType, getEditedPostId, getPage } =\n\t\t\t\tselect( editSiteStore );\n\n\t\t\treturn {\n\t\t\t\tstoredSettings: getSettings( setIsInserterOpen ),\n\t\t\t\ttemplateType: getEditedPostType(),\n\t\t\t\ttemplateId: getEditedPostId(),\n\t\t\t\tpage: getPage(),\n\t\t\t};\n\t\t},\n\t\t[ setIsInserterOpen ]\n\t);\n\n\tconst settingsBlockPatterns =\n\t\tstoredSettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0\n\t\tstoredSettings.__experimentalBlockPatterns; // WP 5.9\n\tconst settingsBlockPatternCategories =\n\t\tstoredSettings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0\n\t\tstoredSettings.__experimentalBlockPatternCategories; // WP 5.9\n\n\tconst { restBlockPatterns, restBlockPatternCategories } = useSelect(\n\t\t( select ) => ( {\n\t\t\trestBlockPatterns: select( coreStore ).getBlockPatterns(),\n\t\t\trestBlockPatternCategories:\n\t\t\t\tselect( coreStore ).getBlockPatternCategories(),\n\t\t} ),\n\t\t[]\n\t);\n\n\tconst blockPatterns = useMemo(\n\t\t() => unionBy( settingsBlockPatterns, restBlockPatterns, 'name' ),\n\t\t[ settingsBlockPatterns, restBlockPatterns ]\n\t);\n\n\tconst blockPatternCategories = useMemo(\n\t\t() =>\n\t\t\tunionBy(\n\t\t\t\tsettingsBlockPatternCategories,\n\t\t\t\trestBlockPatternCategories,\n\t\t\t\t'name'\n\t\t\t),\n\t\t[ settingsBlockPatternCategories, restBlockPatternCategories ]\n\t);\n\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...omit( storedSettings, [\n\t\t\t\t'__experimentalAdditionalBlockPatterns',\n\t\t\t\t'__experimentalAdditionalBlockPatternCategories',\n\t\t\t] ),\n\t\t\t__experimentalBlockPatterns: blockPatterns,\n\t\t\t__experimentalBlockPatternCategories: blockPatternCategories,\n\t\t} ),\n\t\t[ storedSettings, blockPatterns, blockPatternCategories ]\n\t);\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\ttemplateType\n\t);\n\tconst { setPage } = useDispatch( editSiteStore );\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\tconst openNavigationSidebar = useCallback( () => {\n\t\tenableComplementaryArea(\n\t\t\t'core/edit-site',\n\t\t\t'edit-site/navigation-menu'\n\t\t);\n\t}, [ enableComplementaryArea ] );\n\tconst contentRef = useRef();\n\tconst mergedRefs = useMergeRefs( [ contentRef, useTypingObserver() ] );\n\tconst isMobileViewport = useViewportMatch( 'small', '<' );\n\tconst { clearSelectedBlock } = useDispatch( blockEditorStore );\n\n\tconst isTemplatePart = templateType === 'wp_template_part';\n\tconst hasBlocks = blocks.length !== 0;\n\n\tconst NavMenuSidebarToggle = () => (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarButton\n\t\t\t\tclassName=\"components-toolbar__control\"\n\t\t\t\tlabel={ __( 'Open list view' ) }\n\t\t\t\tonClick={ openNavigationSidebar }\n\t\t\t\ticon={ listView }\n\t\t\t/>\n\t\t</ToolbarGroup>\n\t);\n\n\t// Conditionally include NavMenu sidebar in Plugin only.\n\t// Optimise for dead code elimination.\n\t// See https://github.com/WordPress/gutenberg/blob/trunk/docs/how-to-guides/feature-flags.md#dead-code-elimination.\n\tlet MaybeNavMenuSidebarToggle = Fragment;\n\n\tif ( process.env.IS_GUTENBERG_PLUGIN ) {\n\t\tMaybeNavMenuSidebarToggle = NavMenuSidebarToggle;\n\t}\n\n\treturn (\n\t\t<BlockEditorProvider\n\t\t\tsettings={ settings }\n\t\t\tvalue={ blocks }\n\t\t\tonInput={ onInput }\n\t\t\tonChange={ onChange }\n\t\t\tuseSubRegistry={ false }\n\t\t>\n\t\t\t<EditTemplatePartMenuButton />\n\t\t\t<TemplatePartConverter />\n\t\t\t<__experimentalLinkControl.ViewerFill>\n\t\t\t\t{ useCallback(\n\t\t\t\t\t( fillProps ) => (\n\t\t\t\t\t\t<NavigateToLink\n\t\t\t\t\t\t\t{ ...fillProps }\n\t\t\t\t\t\t\tactivePage={ page }\n\t\t\t\t\t\t\tonActivePageChange={ setPage }\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\t\t\t\t\t[ page ]\n\t\t\t\t) }\n\t\t\t</__experimentalLinkControl.ViewerFill>\n\t\t\t<SidebarInspectorFill>\n\t\t\t\t<BlockInspector />\n\t\t\t</SidebarInspectorFill>\n\t\t\t<BlockTools\n\t\t\t\tclassName={ classnames( 'edit-site-visual-editor', {\n\t\t\t\t\t'is-focus-mode': isTemplatePart,\n\t\t\t\t} ) }\n\t\t\t\t__unstableContentRef={ contentRef }\n\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t// Clear selected block when clicking on the gray background.\n\t\t\t\t\tif ( event.target === event.currentTarget ) {\n\t\t\t\t\t\tclearSelectedBlock();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<BlockEditorKeyboardShortcuts.Register />\n\t\t\t\t<BackButton />\n\t\t\t\t<ResizableEditor\n\t\t\t\t\t// Reinitialize the editor and reset the states when the template changes.\n\t\t\t\t\tkey={ templateId }\n\t\t\t\t\tenableResizing={\n\t\t\t\t\t\tisTemplatePart &&\n\t\t\t\t\t\t// Disable resizing in mobile viewport.\n\t\t\t\t\t\t! isMobileViewport\n\t\t\t\t\t}\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t\tcontentRef={ mergedRefs }\n\t\t\t\t>\n\t\t\t\t\t<BlockList\n\t\t\t\t\t\tclassName=\"edit-site-block-editor__block-list wp-site-blocks\"\n\t\t\t\t\t\t__experimentalLayout={ LAYOUT }\n\t\t\t\t\t\trenderAppender={\n\t\t\t\t\t\t\tisTemplatePart && hasBlocks ? false : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</ResizableEditor>\n\t\t\t\t<__unstableBlockSettingsMenuFirstItem>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<BlockInspectorButton onClick={ onClose } />\n\t\t\t\t\t) }\n\t\t\t\t</__unstableBlockSettingsMenuFirstItem>\n\t\t\t\t<__unstableBlockToolbarLastItem>\n\t\t\t\t\t<__unstableBlockNameContext.Consumer>\n\t\t\t\t\t\t{ ( blockName ) =>\n\t\t\t\t\t\t\tblockName === 'core/navigation' && (\n\t\t\t\t\t\t\t\t<MaybeNavMenuSidebarToggle />\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t</__unstableBlockNameContext.Consumer>\n\t\t\t\t</__unstableBlockToolbarLastItem>\n\t\t\t</BlockTools>\n\t\t\t<ReusableBlocksMenuItems />\n\t\t</BlockEditorProvider>\n\t);\n}\n"]}
@@ -8,16 +8,8 @@ import Textarea from 'react-autosize-textarea';
8
8
  * WordPress dependencies
9
9
  */
10
10
 
11
- /**
12
- * WordPress dependencies
13
- */
14
-
15
- /**
16
- * WordPress dependencies
17
- */
18
-
19
11
  import { __ } from '@wordpress/i18n';
20
- import { useState } from '@wordpress/element';
12
+ import { useEffect, useState, useRef } from '@wordpress/element';
21
13
  import { useInstanceId } from '@wordpress/compose';
22
14
  import { VisuallyHidden } from '@wordpress/components';
23
15
  export default function CodeEditorTextArea(_ref) {
@@ -29,6 +21,7 @@ export default function CodeEditorTextArea(_ref) {
29
21
  const [stateValue, setStateValue] = useState(value);
30
22
  const [isDirty, setIsDirty] = useState(false);
31
23
  const instanceId = useInstanceId(CodeEditorTextArea);
24
+ const valueRef = useRef();
32
25
 
33
26
  if (!isDirty && stateValue !== value) {
34
27
  setStateValue(value);
@@ -51,6 +44,7 @@ export default function CodeEditorTextArea(_ref) {
51
44
  onInput(newValue);
52
45
  setStateValue(newValue);
53
46
  setIsDirty(true);
47
+ valueRef.current = newValue;
54
48
  };
55
49
  /**
56
50
  * Function called when the user has completed their edits, responsible for
@@ -64,8 +58,16 @@ export default function CodeEditorTextArea(_ref) {
64
58
  onChange(stateValue);
65
59
  setIsDirty(false);
66
60
  }
67
- };
61
+ }; // Ensure changes aren't lost when component unmounts.
62
+
68
63
 
64
+ useEffect(() => {
65
+ return () => {
66
+ if (valueRef.current) {
67
+ onChange(valueRef.current);
68
+ }
69
+ };
70
+ }, []);
69
71
  return createElement(Fragment, null, createElement(VisuallyHidden, {
70
72
  as: "label",
71
73
  htmlFor: `code-editor-text-area-${instanceId}`
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/code-editor/code-editor-text-area.js"],"names":["Textarea","__","useState","useInstanceId","VisuallyHidden","CodeEditorTextArea","value","onChange","onInput","stateValue","setStateValue","isDirty","setIsDirty","instanceId","onChangeHandler","event","newValue","target","stopEditing"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,yBAArB;AAEA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,QAAT,QAAyB,oBAAzB;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,cAAT,QAA+B,uBAA/B;AAEA,eAAe,SAASC,kBAAT,OAA4D;AAAA,MAA/B;AAAEC,IAAAA,KAAF;AAASC,IAAAA,QAAT;AAAmBC,IAAAA;AAAnB,GAA+B;AAC1E,QAAM,CAAEC,UAAF,EAAcC,aAAd,IAAgCR,QAAQ,CAAEI,KAAF,CAA9C;AACA,QAAM,CAAEK,OAAF,EAAWC,UAAX,IAA0BV,QAAQ,CAAE,KAAF,CAAxC;AACA,QAAMW,UAAU,GAAGV,aAAa,CAAEE,kBAAF,CAAhC;;AAEA,MAAK,CAAEM,OAAF,IAAaF,UAAU,KAAKH,KAAjC,EAAyC;AACxCI,IAAAA,aAAa,CAAEJ,KAAF,CAAb;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMQ,eAAe,GAAKC,KAAF,IAAa;AACpC,UAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAN,CAAaX,KAA9B;AACAE,IAAAA,OAAO,CAAEQ,QAAF,CAAP;AACAN,IAAAA,aAAa,CAAEM,QAAF,CAAb;AACAJ,IAAAA,UAAU,CAAE,IAAF,CAAV;AACA,GALD;AAOA;AACD;AACA;AACA;AACA;;;AACC,QAAMM,WAAW,GAAG,MAAM;AACzB,QAAKP,OAAL,EAAe;AACdJ,MAAAA,QAAQ,CAAEE,UAAF,CAAR;AACAG,MAAAA,UAAU,CAAE,KAAF,CAAV;AACA;AACD,GALD;;AAOA,SACC,8BACC,cAAC,cAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,yBAAyBC,UAAY;AAFjD,KAIGZ,EAAE,CAAE,mBAAF,CAJL,CADD,EAOC,cAAC,QAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGQ,UAHT;AAIC,IAAA,QAAQ,EAAGK,eAJZ;AAKC,IAAA,MAAM,EAAGI,WALV;AAMC,IAAA,SAAS,EAAC,iCANX;AAOC,IAAA,EAAE,EAAI,yBAAyBL,UAAY,EAP5C;AAQC,IAAA,WAAW,EAAGZ,EAAE,CAAE,iCAAF;AARjB,IAPD,CADD;AAoBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\n/**\n * WordPress dependencies\n */\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\nexport default function CodeEditorTextArea( { value, onChange, onInput } ) {\n\tconst [ stateValue, setStateValue ] = useState( value );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst instanceId = useInstanceId( CodeEditorTextArea );\n\n\tif ( ! isDirty && stateValue !== value ) {\n\t\tsetStateValue( value );\n\t}\n\n\t/**\n\t * Handles a textarea change event to notify the onChange prop callback and\n\t * reflect the new value in the component's own state. This marks the start\n\t * of the user's edits, if not already changed, preventing future props\n\t * changes to value from replacing the rendered value. This is expected to\n\t * be followed by a reset to dirty state via `stopEditing`.\n\t *\n\t * @see stopEditing\n\t *\n\t * @param {Event} event Change event.\n\t */\n\tconst onChangeHandler = ( event ) => {\n\t\tconst newValue = event.target.value;\n\t\tonInput( newValue );\n\t\tsetStateValue( newValue );\n\t\tsetIsDirty( true );\n\t};\n\n\t/**\n\t * Function called when the user has completed their edits, responsible for\n\t * ensuring that changes, if made, are surfaced to the onPersist prop\n\t * callback and resetting dirty state.\n\t */\n\tconst stopEditing = () => {\n\t\tif ( isDirty ) {\n\t\t\tonChange( stateValue );\n\t\t\tsetIsDirty( false );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `code-editor-text-area-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ stateValue }\n\t\t\t\tonChange={ onChangeHandler }\n\t\t\t\tonBlur={ stopEditing }\n\t\t\t\tclassName=\"edit-site-code-editor-text-area\"\n\t\t\t\tid={ `code-editor-text-area-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/code-editor/code-editor-text-area.js"],"names":["Textarea","__","useEffect","useState","useRef","useInstanceId","VisuallyHidden","CodeEditorTextArea","value","onChange","onInput","stateValue","setStateValue","isDirty","setIsDirty","instanceId","valueRef","onChangeHandler","event","newValue","target","current","stopEditing"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,yBAArB;AAEA;AACA;AACA;;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,SAAT,EAAoBC,QAApB,EAA8BC,MAA9B,QAA4C,oBAA5C;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,cAAT,QAA+B,uBAA/B;AAEA,eAAe,SAASC,kBAAT,OAA4D;AAAA,MAA/B;AAAEC,IAAAA,KAAF;AAASC,IAAAA,QAAT;AAAmBC,IAAAA;AAAnB,GAA+B;AAC1E,QAAM,CAAEC,UAAF,EAAcC,aAAd,IAAgCT,QAAQ,CAAEK,KAAF,CAA9C;AACA,QAAM,CAAEK,OAAF,EAAWC,UAAX,IAA0BX,QAAQ,CAAE,KAAF,CAAxC;AACA,QAAMY,UAAU,GAAGV,aAAa,CAAEE,kBAAF,CAAhC;AACA,QAAMS,QAAQ,GAAGZ,MAAM,EAAvB;;AAEA,MAAK,CAAES,OAAF,IAAaF,UAAU,KAAKH,KAAjC,EAAyC;AACxCI,IAAAA,aAAa,CAAEJ,KAAF,CAAb;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMS,eAAe,GAAKC,KAAF,IAAa;AACpC,UAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAN,CAAaZ,KAA9B;AACAE,IAAAA,OAAO,CAAES,QAAF,CAAP;AACAP,IAAAA,aAAa,CAAEO,QAAF,CAAb;AACAL,IAAAA,UAAU,CAAE,IAAF,CAAV;AACAE,IAAAA,QAAQ,CAACK,OAAT,GAAmBF,QAAnB;AACA,GAND;AAQA;AACD;AACA;AACA;AACA;;;AACC,QAAMG,WAAW,GAAG,MAAM;AACzB,QAAKT,OAAL,EAAe;AACdJ,MAAAA,QAAQ,CAAEE,UAAF,CAAR;AACAG,MAAAA,UAAU,CAAE,KAAF,CAAV;AACA;AACD,GALD,CAlC0E,CAyC1E;;;AACAZ,EAAAA,SAAS,CAAE,MAAM;AAChB,WAAO,MAAM;AACZ,UAAKc,QAAQ,CAACK,OAAd,EAAwB;AACvBZ,QAAAA,QAAQ,CAAEO,QAAQ,CAACK,OAAX,CAAR;AACA;AACD,KAJD;AAKA,GANQ,EAMN,EANM,CAAT;AAQA,SACC,8BACC,cAAC,cAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,yBAAyBN,UAAY;AAFjD,KAIGd,EAAE,CAAE,mBAAF,CAJL,CADD,EAOC,cAAC,QAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGU,UAHT;AAIC,IAAA,QAAQ,EAAGM,eAJZ;AAKC,IAAA,MAAM,EAAGK,WALV;AAMC,IAAA,SAAS,EAAC,iCANX;AAOC,IAAA,EAAE,EAAI,yBAAyBP,UAAY,EAP5C;AAQC,IAAA,WAAW,EAAGd,EAAE,CAAE,iCAAF;AARjB,IAPD,CADD;AAoBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\nexport default function CodeEditorTextArea( { value, onChange, onInput } ) {\n\tconst [ stateValue, setStateValue ] = useState( value );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst instanceId = useInstanceId( CodeEditorTextArea );\n\tconst valueRef = useRef();\n\n\tif ( ! isDirty && stateValue !== value ) {\n\t\tsetStateValue( value );\n\t}\n\n\t/**\n\t * Handles a textarea change event to notify the onChange prop callback and\n\t * reflect the new value in the component's own state. This marks the start\n\t * of the user's edits, if not already changed, preventing future props\n\t * changes to value from replacing the rendered value. This is expected to\n\t * be followed by a reset to dirty state via `stopEditing`.\n\t *\n\t * @see stopEditing\n\t *\n\t * @param {Event} event Change event.\n\t */\n\tconst onChangeHandler = ( event ) => {\n\t\tconst newValue = event.target.value;\n\t\tonInput( newValue );\n\t\tsetStateValue( newValue );\n\t\tsetIsDirty( true );\n\t\tvalueRef.current = newValue;\n\t};\n\n\t/**\n\t * Function called when the user has completed their edits, responsible for\n\t * ensuring that changes, if made, are surfaced to the onPersist prop\n\t * callback and resetting dirty state.\n\t */\n\tconst stopEditing = () => {\n\t\tif ( isDirty ) {\n\t\t\tonChange( stateValue );\n\t\t\tsetIsDirty( false );\n\t\t}\n\t};\n\n\t// Ensure changes aren't lost when component unmounts.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( valueRef.current ) {\n\t\t\t\tonChange( valueRef.current );\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `code-editor-text-area-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ stateValue }\n\t\t\t\tonChange={ onChangeHandler }\n\t\t\t\tonBlur={ stopEditing }\n\t\t\t\tclassName=\"edit-site-code-editor-text-area\"\n\t\t\t\tid={ `code-editor-text-area-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/edit-template-part-menu-button/index.js"],"names":["useSelect","store","blockEditorStore","BlockSettingsMenuControls","coreStore","MenuItem","isTemplatePart","__","sprintf","useLocation","useLink","EditTemplatePartMenuButton","selectedClientIds","onClose","EditTemplatePartMenuItem","selectedClientId","params","selectedTemplatePart","select","block","getBlock","theme","slug","attributes","getEntityRecord","linkProps","postId","id","postType","type","fromTemplateId","event","onClick"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AACA,SACCC,KAAK,IAAIC,gBADV,EAECC,yBAFD,QAGO,yBAHP;AAIA,SAASF,KAAK,IAAIG,SAAlB,QAAmC,sBAAnC;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,cAAT,QAA+B,mBAA/B;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,WAA5B;AACA,SAASC,OAAT,QAAwB,gBAAxB;AAEA,eAAe,SAASC,0BAAT,GAAsC;AACpD,SACC,cAAC,yBAAD,QACG;AAAA,QAAE;AAAEC,MAAAA,iBAAF;AAAqBC,MAAAA;AAArB,KAAF;AAAA,WACD,cAAC,wBAAD;AACC,MAAA,gBAAgB,EAAGD,iBAAiB,CAAE,CAAF,CADrC;AAEC,MAAA,OAAO,EAAGC;AAFX,MADC;AAAA,GADH,CADD;AAUA;;AAED,SAASC,wBAAT,QAAmE;AAAA,MAAhC;AAAEC,IAAAA,gBAAF;AAAoBF,IAAAA;AAApB,GAAgC;AAClE,QAAM;AAAEG,IAAAA;AAAF,MAAaP,WAAW,EAA9B;AACA,QAAMQ,oBAAoB,GAAGjB,SAAS,CACnCkB,MAAF,IAAc;AACb,UAAMC,KAAK,GAAGD,MAAM,CAAEhB,gBAAF,CAAN,CAA2BkB,QAA3B,CACbL,gBADa,CAAd;;AAIA,QAAKI,KAAK,IAAIb,cAAc,CAAEa,KAAF,CAA5B,EAAwC;AACvC,YAAM;AAAEE,QAAAA,KAAF;AAASC,QAAAA;AAAT,UAAkBH,KAAK,CAACI,UAA9B;AAEA,aAAOL,MAAM,CAAEd,SAAF,CAAN,CAAoBoB,eAApB,CACN,UADM,EAEN,kBAFM,EAGN;AACC,SAAGH,KAAO,KAAKC,IAAM,EAJhB,CAAP;AAMA;AACD,GAhBoC,EAiBrC,CAAEP,gBAAF,CAjBqC,CAAtC;AAoBA,QAAMU,SAAS,GAAGf,OAAO,CACxB;AACCgB,IAAAA,MAAM,EAAET,oBAAF,aAAEA,oBAAF,uBAAEA,oBAAoB,CAAEU,EAD/B;AAECC,IAAAA,QAAQ,EAAEX,oBAAF,aAAEA,oBAAF,uBAAEA,oBAAoB,CAAEY;AAFjC,GADwB,EAKxB;AACCC,IAAAA,cAAc,EAAEd,MAAM,CAACU;AADxB,GALwB,CAAzB;;AAUA,MAAK,CAAET,oBAAP,EAA8B;AAC7B,WAAO,IAAP;AACA;;AAED,SACC,cAAC,QAAD,eACMQ,SADN;AAEC,IAAA,OAAO,EAAKM,KAAF,IAAa;AACtBN,MAAAA,SAAS,CAACO,OAAV,CAAmBD,KAAnB;AACAlB,MAAAA,OAAO;AACP;AALF;AAQE;AACAL,EAAAA,OAAO,CAAED,EAAE,CAAE,SAAF,CAAJ,EAAmBU,oBAAoB,CAACK,IAAxC,CATT,CADD;AAcA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blockEditorStore,\n\tBlockSettingsMenuControls,\n} from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { MenuItem } from '@wordpress/components';\nimport { isTemplatePart } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useLocation } from '../routes';\nimport { useLink } from '../routes/link';\n\nexport default function EditTemplatePartMenuButton() {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { selectedClientIds, onClose } ) => (\n\t\t\t\t<EditTemplatePartMenuItem\n\t\t\t\t\tselectedClientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n\nfunction EditTemplatePartMenuItem( { selectedClientId, onClose } ) {\n\tconst { params } = useLocation();\n\tconst selectedTemplatePart = useSelect(\n\t\t( select ) => {\n\t\t\tconst block = select( blockEditorStore ).getBlock(\n\t\t\t\tselectedClientId\n\t\t\t);\n\n\t\t\tif ( block && isTemplatePart( block ) ) {\n\t\t\t\tconst { theme, slug } = block.attributes;\n\n\t\t\t\treturn select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_template_part',\n\t\t\t\t\t// Ideally this should be an official public API.\n\t\t\t\t\t`${ theme }//${ slug }`\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ selectedClientId ]\n\t);\n\n\tconst linkProps = useLink(\n\t\t{\n\t\t\tpostId: selectedTemplatePart?.id,\n\t\t\tpostType: selectedTemplatePart?.type,\n\t\t},\n\t\t{\n\t\t\tfromTemplateId: params.postId,\n\t\t}\n\t);\n\n\tif ( ! selectedTemplatePart ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\t{ ...linkProps }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tlinkProps.onClick( event );\n\t\t\t\tonClose();\n\t\t\t} }\n\t\t>\n\t\t\t{\n\t\t\t\t/* translators: %s: template part title */\n\t\t\t\tsprintf( __( 'Edit %s' ), selectedTemplatePart.slug )\n\t\t\t}\n\t\t</MenuItem>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/edit-template-part-menu-button/index.js"],"names":["useSelect","store","blockEditorStore","BlockSettingsMenuControls","coreStore","MenuItem","isTemplatePart","__","sprintf","useLocation","useLink","EditTemplatePartMenuButton","selectedClientIds","onClose","EditTemplatePartMenuItem","selectedClientId","params","selectedTemplatePart","select","block","getBlock","theme","slug","attributes","getEntityRecord","linkProps","postId","id","postType","type","fromTemplateId","event","onClick"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AACA,SACCC,KAAK,IAAIC,gBADV,EAECC,yBAFD,QAGO,yBAHP;AAIA,SAASF,KAAK,IAAIG,SAAlB,QAAmC,sBAAnC;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,cAAT,QAA+B,mBAA/B;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,WAA5B;AACA,SAASC,OAAT,QAAwB,gBAAxB;AAEA,eAAe,SAASC,0BAAT,GAAsC;AACpD,SACC,cAAC,yBAAD,QACG;AAAA,QAAE;AAAEC,MAAAA,iBAAF;AAAqBC,MAAAA;AAArB,KAAF;AAAA,WACD,cAAC,wBAAD;AACC,MAAA,gBAAgB,EAAGD,iBAAiB,CAAE,CAAF,CADrC;AAEC,MAAA,OAAO,EAAGC;AAFX,MADC;AAAA,GADH,CADD;AAUA;;AAED,SAASC,wBAAT,QAAmE;AAAA,MAAhC;AAAEC,IAAAA,gBAAF;AAAoBF,IAAAA;AAApB,GAAgC;AAClE,QAAM;AAAEG,IAAAA;AAAF,MAAaP,WAAW,EAA9B;AACA,QAAMQ,oBAAoB,GAAGjB,SAAS,CACnCkB,MAAF,IAAc;AACb,UAAMC,KAAK,GACVD,MAAM,CAAEhB,gBAAF,CAAN,CAA2BkB,QAA3B,CAAqCL,gBAArC,CADD;;AAGA,QAAKI,KAAK,IAAIb,cAAc,CAAEa,KAAF,CAA5B,EAAwC;AACvC,YAAM;AAAEE,QAAAA,KAAF;AAASC,QAAAA;AAAT,UAAkBH,KAAK,CAACI,UAA9B;AAEA,aAAOL,MAAM,CAAEd,SAAF,CAAN,CAAoBoB,eAApB,CACN,UADM,EAEN,kBAFM,EAGN;AACC,SAAGH,KAAO,KAAKC,IAAM,EAJhB,CAAP;AAMA;AACD,GAfoC,EAgBrC,CAAEP,gBAAF,CAhBqC,CAAtC;AAmBA,QAAMU,SAAS,GAAGf,OAAO,CACxB;AACCgB,IAAAA,MAAM,EAAET,oBAAF,aAAEA,oBAAF,uBAAEA,oBAAoB,CAAEU,EAD/B;AAECC,IAAAA,QAAQ,EAAEX,oBAAF,aAAEA,oBAAF,uBAAEA,oBAAoB,CAAEY;AAFjC,GADwB,EAKxB;AACCC,IAAAA,cAAc,EAAEd,MAAM,CAACU;AADxB,GALwB,CAAzB;;AAUA,MAAK,CAAET,oBAAP,EAA8B;AAC7B,WAAO,IAAP;AACA;;AAED,SACC,cAAC,QAAD,eACMQ,SADN;AAEC,IAAA,OAAO,EAAKM,KAAF,IAAa;AACtBN,MAAAA,SAAS,CAACO,OAAV,CAAmBD,KAAnB;AACAlB,MAAAA,OAAO;AACP;AALF;AAQE;AACAL,EAAAA,OAAO,CAAED,EAAE,CAAE,SAAF,CAAJ,EAAmBU,oBAAoB,CAACK,IAAxC,CATT,CADD;AAcA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blockEditorStore,\n\tBlockSettingsMenuControls,\n} from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { MenuItem } from '@wordpress/components';\nimport { isTemplatePart } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useLocation } from '../routes';\nimport { useLink } from '../routes/link';\n\nexport default function EditTemplatePartMenuButton() {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { selectedClientIds, onClose } ) => (\n\t\t\t\t<EditTemplatePartMenuItem\n\t\t\t\t\tselectedClientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</BlockSettingsMenuControls>\n\t);\n}\n\nfunction EditTemplatePartMenuItem( { selectedClientId, onClose } ) {\n\tconst { params } = useLocation();\n\tconst selectedTemplatePart = useSelect(\n\t\t( select ) => {\n\t\t\tconst block =\n\t\t\t\tselect( blockEditorStore ).getBlock( selectedClientId );\n\n\t\t\tif ( block && isTemplatePart( block ) ) {\n\t\t\t\tconst { theme, slug } = block.attributes;\n\n\t\t\t\treturn select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_template_part',\n\t\t\t\t\t// Ideally this should be an official public API.\n\t\t\t\t\t`${ theme }//${ slug }`\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ selectedClientId ]\n\t);\n\n\tconst linkProps = useLink(\n\t\t{\n\t\t\tpostId: selectedTemplatePart?.id,\n\t\t\tpostType: selectedTemplatePart?.type,\n\t\t},\n\t\t{\n\t\t\tfromTemplateId: params.postId,\n\t\t}\n\t);\n\n\tif ( ! selectedTemplatePart ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\t{ ...linkProps }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tlinkProps.onClick( event );\n\t\t\t\tonClose();\n\t\t\t} }\n\t\t>\n\t\t\t{\n\t\t\t\t/* translators: %s: template part title */\n\t\t\t\tsprintf( __( 'Edit %s' ), selectedTemplatePart.slug )\n\t\t\t}\n\t\t</MenuItem>\n\t);\n}\n"]}