@wordpress/edit-site 4.10.0 → 4.12.1-next.d6164808d3.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 (204) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-template/add-custom-template-modal.js +26 -44
  3. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
  4. package/build/components/add-new-template/new-template.js +45 -23
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/add-new-template/utils.js +493 -242
  7. package/build/components/add-new-template/utils.js.map +1 -1
  8. package/build/components/block-editor/index.js +1 -3
  9. package/build/components/block-editor/index.js.map +1 -1
  10. package/build/components/block-editor/resizable-editor.js +26 -12
  11. package/build/components/block-editor/resizable-editor.js.map +1 -1
  12. package/build/components/global-styles/border-panel.js +3 -3
  13. package/build/components/global-styles/border-panel.js.map +1 -1
  14. package/build/components/global-styles/dimensions-panel.js +280 -20
  15. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  16. package/build/components/global-styles/hooks.js +4 -4
  17. package/build/components/global-styles/hooks.js.map +1 -1
  18. package/build/components/global-styles/screen-color-palette.js +1 -1
  19. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  20. package/build/components/global-styles/screen-colors.js +51 -7
  21. package/build/components/global-styles/screen-colors.js.map +1 -1
  22. package/build/components/global-styles/screen-heading-color.js +157 -0
  23. package/build/components/global-styles/screen-heading-color.js.map +1 -0
  24. package/build/components/global-styles/screen-typography-element.js +4 -0
  25. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  26. package/build/components/global-styles/screen-typography.js +5 -0
  27. package/build/components/global-styles/screen-typography.js.map +1 -1
  28. package/build/components/global-styles/typography-panel.js +82 -14
  29. package/build/components/global-styles/typography-panel.js.map +1 -1
  30. package/build/components/global-styles/typography-utils.js +217 -0
  31. package/build/components/global-styles/typography-utils.js.map +1 -0
  32. package/build/components/global-styles/ui.js +11 -0
  33. package/build/components/global-styles/ui.js.map +1 -1
  34. package/build/components/global-styles/use-global-styles-output.js +183 -52
  35. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  36. package/build/components/global-styles/utils.js +85 -5
  37. package/build/components/global-styles/utils.js.map +1 -1
  38. package/build/components/header/document-actions/index.js +1 -0
  39. package/build/components/header/document-actions/index.js.map +1 -1
  40. package/build/components/header/index.js +27 -12
  41. package/build/components/header/index.js.map +1 -1
  42. package/build/components/header/mode-switcher/index.js +0 -4
  43. package/build/components/header/mode-switcher/index.js.map +1 -1
  44. package/build/components/header/more-menu/index.js +13 -3
  45. package/build/components/header/more-menu/index.js.map +1 -1
  46. package/build/components/header/undo-redo/redo.js +2 -1
  47. package/build/components/header/undo-redo/redo.js.map +1 -1
  48. package/build/components/list/actions/index.js +1 -1
  49. package/build/components/list/actions/index.js.map +1 -1
  50. package/build/components/save-button/index.js +2 -3
  51. package/build/components/save-button/index.js.map +1 -1
  52. package/build/components/sidebar/default-sidebar.js +11 -1
  53. package/build/components/sidebar/default-sidebar.js.map +1 -1
  54. package/build/components/sidebar/navigation-menu-sidebar/navigation-menu.js +2 -2
  55. package/build/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +1 -1
  56. package/build/components/sidebar/plugin-sidebar/index.js +11 -1
  57. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -1
  58. package/build/components/sidebar/template-card/template-actions.js +1 -1
  59. package/build/components/sidebar/template-card/template-actions.js.map +1 -1
  60. package/build/components/template-details/edit-template-title.js +1 -1
  61. package/build/components/template-details/edit-template-title.js.map +1 -1
  62. package/build/components/template-details/index.js +19 -9
  63. package/build/components/template-details/index.js.map +1 -1
  64. package/build/components/template-details/template-areas.js +1 -1
  65. package/build/components/template-details/template-areas.js.map +1 -1
  66. package/build/components/template-details/template-part-area-selector.js +47 -0
  67. package/build/components/template-details/template-part-area-selector.js.map +1 -0
  68. package/build/components/template-part-converter/convert-to-template-part.js +4 -1
  69. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  70. package/build/hooks/index.js +2 -0
  71. package/build/hooks/index.js.map +1 -1
  72. package/build/hooks/template-part-edit.js +86 -0
  73. package/build/hooks/template-part-edit.js.map +1 -0
  74. package/build/index.js +1 -1
  75. package/build/index.js.map +1 -1
  76. package/build-module/components/add-new-template/add-custom-template-modal.js +27 -45
  77. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
  78. package/build-module/components/add-new-template/new-template.js +45 -25
  79. package/build-module/components/add-new-template/new-template.js.map +1 -1
  80. package/build-module/components/add-new-template/utils.js +489 -230
  81. package/build-module/components/add-new-template/utils.js.map +1 -1
  82. package/build-module/components/block-editor/index.js +1 -2
  83. package/build-module/components/block-editor/index.js.map +1 -1
  84. package/build-module/components/block-editor/resizable-editor.js +26 -12
  85. package/build-module/components/block-editor/resizable-editor.js.map +1 -1
  86. package/build-module/components/global-styles/border-panel.js +3 -3
  87. package/build-module/components/global-styles/border-panel.js.map +1 -1
  88. package/build-module/components/global-styles/dimensions-panel.js +278 -22
  89. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  90. package/build-module/components/global-styles/hooks.js +4 -4
  91. package/build-module/components/global-styles/hooks.js.map +1 -1
  92. package/build-module/components/global-styles/screen-color-palette.js +1 -1
  93. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  94. package/build-module/components/global-styles/screen-colors.js +51 -7
  95. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  96. package/build-module/components/global-styles/screen-heading-color.js +143 -0
  97. package/build-module/components/global-styles/screen-heading-color.js.map +1 -0
  98. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  99. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  100. package/build-module/components/global-styles/screen-typography.js +5 -0
  101. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  102. package/build-module/components/global-styles/typography-panel.js +83 -15
  103. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  104. package/build-module/components/global-styles/typography-utils.js +204 -0
  105. package/build-module/components/global-styles/typography-utils.js.map +1 -0
  106. package/build-module/components/global-styles/ui.js +10 -0
  107. package/build-module/components/global-styles/ui.js.map +1 -1
  108. package/build-module/components/global-styles/use-global-styles-output.js +182 -61
  109. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  110. package/build-module/components/global-styles/utils.js +82 -5
  111. package/build-module/components/global-styles/utils.js.map +1 -1
  112. package/build-module/components/header/document-actions/index.js +1 -0
  113. package/build-module/components/header/document-actions/index.js.map +1 -1
  114. package/build-module/components/header/index.js +30 -14
  115. package/build-module/components/header/index.js.map +1 -1
  116. package/build-module/components/header/mode-switcher/index.js +0 -4
  117. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  118. package/build-module/components/header/more-menu/index.js +13 -3
  119. package/build-module/components/header/more-menu/index.js.map +1 -1
  120. package/build-module/components/header/undo-redo/redo.js +3 -2
  121. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  122. package/build-module/components/list/actions/index.js +1 -1
  123. package/build-module/components/list/actions/index.js.map +1 -1
  124. package/build-module/components/save-button/index.js +3 -4
  125. package/build-module/components/save-button/index.js.map +1 -1
  126. package/build-module/components/sidebar/default-sidebar.js +9 -1
  127. package/build-module/components/sidebar/default-sidebar.js.map +1 -1
  128. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js +3 -3
  129. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +1 -1
  130. package/build-module/components/sidebar/plugin-sidebar/index.js +9 -1
  131. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -1
  132. package/build-module/components/sidebar/template-card/template-actions.js +1 -1
  133. package/build-module/components/sidebar/template-card/template-actions.js.map +1 -1
  134. package/build-module/components/template-details/edit-template-title.js +1 -1
  135. package/build-module/components/template-details/edit-template-title.js.map +1 -1
  136. package/build-module/components/template-details/index.js +19 -10
  137. package/build-module/components/template-details/index.js.map +1 -1
  138. package/build-module/components/template-details/template-areas.js +1 -1
  139. package/build-module/components/template-details/template-areas.js.map +1 -1
  140. package/build-module/components/template-details/template-part-area-selector.js +35 -0
  141. package/build-module/components/template-details/template-part-area-selector.js.map +1 -0
  142. package/build-module/components/template-part-converter/convert-to-template-part.js +3 -1
  143. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  144. package/build-module/hooks/index.js +1 -0
  145. package/build-module/hooks/index.js.map +1 -1
  146. package/build-module/hooks/template-part-edit.js +67 -0
  147. package/build-module/hooks/template-part-edit.js.map +1 -0
  148. package/build-module/index.js +1 -1
  149. package/build-module/index.js.map +1 -1
  150. package/build-style/style-rtl.css +40 -33
  151. package/build-style/style.css +40 -33
  152. package/package.json +29 -29
  153. package/src/components/add-new-template/add-custom-template-modal.js +39 -48
  154. package/src/components/add-new-template/new-template.js +50 -58
  155. package/src/components/add-new-template/style.scss +20 -8
  156. package/src/components/add-new-template/utils.js +529 -231
  157. package/src/components/block-editor/index.js +0 -2
  158. package/src/components/block-editor/resizable-editor.js +28 -18
  159. package/src/components/editor/style.scss +1 -0
  160. package/src/components/global-styles/border-panel.js +3 -3
  161. package/src/components/global-styles/dimensions-panel.js +344 -45
  162. package/src/components/global-styles/hooks.js +6 -3
  163. package/src/components/global-styles/screen-color-palette.js +1 -1
  164. package/src/components/global-styles/screen-colors.js +46 -4
  165. package/src/components/global-styles/screen-heading-color.js +201 -0
  166. package/src/components/global-styles/screen-typography-element.js +4 -0
  167. package/src/components/global-styles/screen-typography.js +6 -0
  168. package/src/components/global-styles/style.scss +14 -6
  169. package/src/components/global-styles/test/typography-utils.js +130 -0
  170. package/src/components/global-styles/test/use-global-styles-output.js +143 -4
  171. package/src/components/global-styles/test/utils.js +68 -8
  172. package/src/components/global-styles/typography-panel.js +119 -48
  173. package/src/components/global-styles/typography-utils.js +228 -0
  174. package/src/components/global-styles/ui.js +13 -0
  175. package/src/components/global-styles/use-global-styles-output.js +203 -53
  176. package/src/components/global-styles/utils.js +70 -4
  177. package/src/components/header/document-actions/index.js +3 -0
  178. package/src/components/header/index.js +41 -14
  179. package/src/components/header/mode-switcher/index.js +0 -3
  180. package/src/components/header/more-menu/index.js +7 -2
  181. package/src/components/header/style.scss +5 -3
  182. package/src/components/header/undo-redo/redo.js +6 -2
  183. package/src/components/list/actions/index.js +3 -1
  184. package/src/components/save-button/index.js +10 -13
  185. package/src/components/sidebar/default-sidebar.js +12 -0
  186. package/src/components/sidebar/navigation-menu-sidebar/navigation-menu.js +1 -5
  187. package/src/components/sidebar/plugin-sidebar/index.js +12 -0
  188. package/src/components/sidebar/style.scss +4 -0
  189. package/src/components/sidebar/template-card/template-actions.js +3 -1
  190. package/src/components/template-details/edit-template-title.js +7 -3
  191. package/src/components/template-details/index.js +23 -8
  192. package/src/components/template-details/style.scss +0 -5
  193. package/src/components/template-details/template-areas.js +3 -1
  194. package/src/components/template-details/template-part-area-selector.js +38 -0
  195. package/src/components/template-part-converter/convert-to-template-part.js +3 -1
  196. package/src/hooks/index.js +1 -0
  197. package/src/hooks/template-part-edit.js +82 -0
  198. package/src/index.js +1 -1
  199. package/src/style.scss +0 -1
  200. package/build/components/edit-template-part-menu-button/index.js +0 -90
  201. package/build/components/edit-template-part-menu-button/index.js.map +0 -1
  202. package/build-module/components/edit-template-part-menu-button/index.js +0 -72
  203. package/build-module/components/edit-template-part-menu-button/index.js.map +0 -1
  204. package/src/components/edit-template-part-menu-button/index.js +0 -82
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.12.0 (2022-08-10)
6
+
7
+ ## 4.11.0 (2022-07-27)
8
+
5
9
  ## 4.10.0 (2022-07-13)
6
10
 
7
11
  ## 4.9.0 (2022-06-29)
@@ -30,32 +30,6 @@ var _utils = require("./utils");
30
30
  */
31
31
  const EMPTY_ARRAY = [];
32
32
 
33
- function selectSuggestion(suggestion, onSelect, entityForSuggestions) {
34
- const {
35
- labels,
36
- slug,
37
- config: {
38
- templateSlug,
39
- templatePrefix
40
- }
41
- } = entityForSuggestions;
42
- const title = (0, _i18n.sprintf)( // translators: Represents the title of a user's custom template in the Site Editor, where %1$s is the singular name of a post type or taxonomy and %2$s is the name of the post or term, e.g. "Post: Hello, WordPress", "Category: shoes"
43
- (0, _i18n.__)('%1$s: %2$s'), labels.singular_name, suggestion.name);
44
- let newTemplateSlug = `${templateSlug || slug}-${suggestion.slug}`;
45
-
46
- if (templatePrefix) {
47
- newTemplateSlug = templatePrefix + newTemplateSlug;
48
- }
49
-
50
- const newTemplate = {
51
- title,
52
- description: (0, _i18n.sprintf)( // translators: Represents the description of a user's custom template in the Site Editor, e.g. "Template for Post: Hello, WordPress"
53
- (0, _i18n.__)('Template for %1$s'), title),
54
- slug: newTemplateSlug
55
- };
56
- onSelect(newTemplate);
57
- }
58
-
59
33
  function SuggestionListItem(_ref) {
60
34
  let {
61
35
  suggestion,
@@ -70,7 +44,7 @@ function SuggestionListItem(_ref) {
70
44
  as: _components.Button
71
45
  }, composite, {
72
46
  className: baseCssClass,
73
- onClick: () => selectSuggestion(suggestion, onSelect, entityForSuggestions)
47
+ onClick: () => onSelect(entityForSuggestions.config.getSpecificTemplate(suggestion))
74
48
  }), (0, _element.createElement)("span", {
75
49
  className: `${baseCssClass}__title`
76
50
  }, (0, _element.createElement)(_components.TextHighlight, {
@@ -95,20 +69,15 @@ function useDebouncedInput() {
95
69
 
96
70
  function useSearchSuggestions(entityForSuggestions, search) {
97
71
  const {
98
- config,
99
- postsToExclude
72
+ config
100
73
  } = entityForSuggestions;
101
74
  const query = (0, _element.useMemo)(() => ({
102
75
  order: 'asc',
103
- _fields: 'id,name,title,slug,link',
104
76
  context: 'view',
105
77
  search,
106
- orderBy: config.getOrderBy({
107
- search
108
- }),
109
- exclude: postsToExclude,
110
- per_page: search ? 20 : 10
111
- }), [search, config, postsToExclude]);
78
+ per_page: search ? 20 : 10,
79
+ ...config.queryArgs(search)
80
+ }), [search, config]);
112
81
  const {
113
82
  records: searchResults,
114
83
  hasResolved: searchHasResolved
@@ -146,14 +115,21 @@ function SuggestionList(_ref2) {
146
115
  const {
147
116
  labels
148
117
  } = entityForSuggestions;
149
- return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.SearchControl, {
118
+ const [showSearchControl, setShowSearchControl] = (0, _element.useState)(false);
119
+
120
+ if (!showSearchControl && (suggestions === null || suggestions === void 0 ? void 0 : suggestions.length) > 9) {
121
+ setShowSearchControl(true);
122
+ }
123
+
124
+ return (0, _element.createElement)(_element.Fragment, null, showSearchControl && (0, _element.createElement)(_components.SearchControl, {
150
125
  onChange: setSearch,
151
126
  value: search,
152
127
  label: labels.search_items,
153
128
  placeholder: labels.search_items
154
129
  }), !!(suggestions !== null && suggestions !== void 0 && suggestions.length) && (0, _element.createElement)(_components.__unstableComposite, (0, _extends2.default)({}, composite, {
155
130
  role: "listbox",
156
- className: "edit-site-custom-template-modal__suggestions_list"
131
+ className: "edit-site-custom-template-modal__suggestions_list",
132
+ "aria-label": (0, _i18n.__)('Suggestions list')
157
133
  }), suggestions.map(suggestion => (0, _element.createElement)(SuggestionListItem, {
158
134
  key: suggestion.slug,
159
135
  suggestion: suggestion,
@@ -186,30 +162,36 @@ function AddCustomTemplateModal(_ref3) {
186
162
  align: "initial"
187
163
  }, (0, _element.createElement)(_components.FlexItem, {
188
164
  isBlock: true,
165
+ as: _components.Button,
189
166
  onClick: () => {
190
167
  const {
191
168
  slug,
192
169
  title,
193
- description
170
+ description,
171
+ templatePrefix
194
172
  } = entityForSuggestions.template;
195
173
  onSelect({
196
174
  slug,
197
175
  title,
198
- description
176
+ description,
177
+ templatePrefix
199
178
  });
200
179
  }
201
- }, (0, _element.createElement)(_components.__experimentalHeading, {
202
- level: 5
180
+ }, (0, _element.createElement)(_components.__experimentalText, {
181
+ as: "span",
182
+ weight: 600
203
183
  }, entityForSuggestions.labels.all_items), (0, _element.createElement)(_components.__experimentalText, {
204
184
  as: "span"
205
185
  }, // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.
206
186
  (0, _i18n.__)('For all items'))), (0, _element.createElement)(_components.FlexItem, {
207
187
  isBlock: true,
188
+ as: _components.Button,
208
189
  onClick: () => {
209
190
  setShowSearchEntities(true);
210
191
  }
211
- }, (0, _element.createElement)(_components.__experimentalHeading, {
212
- level: 5
192
+ }, (0, _element.createElement)(_components.__experimentalText, {
193
+ as: "span",
194
+ weight: 600
213
195
  }, entityForSuggestions.labels.singular_name), (0, _element.createElement)(_components.__experimentalText, {
214
196
  as: "span"
215
197
  }, // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/add-custom-template-modal.js"],"names":["EMPTY_ARRAY","selectSuggestion","suggestion","onSelect","entityForSuggestions","labels","slug","config","templateSlug","templatePrefix","title","singular_name","name","newTemplateSlug","newTemplate","description","SuggestionListItem","search","composite","baseCssClass","Button","link","useDebouncedInput","input","setInput","debounced","setter","setDebounced","useSearchSuggestions","postsToExclude","query","order","_fields","context","orderBy","getOrderBy","exclude","per_page","records","searchResults","hasResolved","searchHasResolved","type","suggestions","setSuggestions","newSuggestions","length","recordNamePath","SuggestionList","orientation","setSearch","debouncedSearch","search_items","map","not_found","AddCustomTemplateModal","onClose","showSearchEntities","setShowSearchEntities","hasGeneralTemplate","template","all_items"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useMemo, useEffect } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tFlex,\n\tFlexItem,\n\tModal,\n\tSearchControl,\n\tTextHighlight,\n\t__experimentalText as Text,\n\t__experimentalHeading as Heading,\n\t__unstableComposite as Composite,\n\t__unstableUseCompositeState as useCompositeState,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { useDebounce } from '@wordpress/compose';\nimport { useEntityRecords } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { mapToIHasNameAndId } from './utils';\n\nconst EMPTY_ARRAY = [];\n\nfunction selectSuggestion( suggestion, onSelect, entityForSuggestions ) {\n\tconst {\n\t\tlabels,\n\t\tslug,\n\t\tconfig: { templateSlug, templatePrefix },\n\t} = entityForSuggestions;\n\tconst title = sprintf(\n\t\t// translators: Represents the title of a user's custom template in the Site Editor, where %1$s is the singular name of a post type or taxonomy and %2$s is the name of the post or term, e.g. \"Post: Hello, WordPress\", \"Category: shoes\"\n\t\t__( '%1$s: %2$s' ),\n\t\tlabels.singular_name,\n\t\tsuggestion.name\n\t);\n\tlet newTemplateSlug = `${ templateSlug || slug }-${ suggestion.slug }`;\n\tif ( templatePrefix ) {\n\t\tnewTemplateSlug = templatePrefix + newTemplateSlug;\n\t}\n\tconst newTemplate = {\n\t\ttitle,\n\t\tdescription: sprintf(\n\t\t\t// translators: Represents the description of a user's custom template in the Site Editor, e.g. \"Template for Post: Hello, WordPress\"\n\t\t\t__( 'Template for %1$s' ),\n\t\t\ttitle\n\t\t),\n\t\tslug: newTemplateSlug,\n\t};\n\tonSelect( newTemplate );\n}\n\nfunction SuggestionListItem( {\n\tsuggestion,\n\tsearch,\n\tonSelect,\n\tentityForSuggestions,\n\tcomposite,\n} ) {\n\tconst baseCssClass =\n\t\t'edit-site-custom-template-modal__suggestions_list__list-item';\n\treturn (\n\t\t<CompositeItem\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName={ baseCssClass }\n\t\t\tonClick={ () =>\n\t\t\t\tselectSuggestion( suggestion, onSelect, entityForSuggestions )\n\t\t\t}\n\t\t>\n\t\t\t<span className={ `${ baseCssClass }__title` }>\n\t\t\t\t<TextHighlight text={ suggestion.name } highlight={ search } />\n\t\t\t</span>\n\t\t\t{ suggestion.link && (\n\t\t\t\t<span className={ `${ baseCssClass }__info` }>\n\t\t\t\t\t{ suggestion.link }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</CompositeItem>\n\t);\n}\n\nfunction useDebouncedInput() {\n\tconst [ input, setInput ] = useState( '' );\n\tconst [ debounced, setter ] = useState( '' );\n\tconst setDebounced = useDebounce( setter, 250 );\n\tuseEffect( () => {\n\t\tif ( debounced !== input ) {\n\t\t\tsetDebounced( input );\n\t\t}\n\t}, [ debounced, input ] );\n\treturn [ input, setInput, debounced ];\n}\n\nfunction useSearchSuggestions( entityForSuggestions, search ) {\n\tconst { config, postsToExclude } = entityForSuggestions;\n\tconst query = useMemo(\n\t\t() => ( {\n\t\t\torder: 'asc',\n\t\t\t_fields: 'id,name,title,slug,link',\n\t\t\tcontext: 'view',\n\t\t\tsearch,\n\t\t\torderBy: config.getOrderBy( { search } ),\n\t\t\texclude: postsToExclude,\n\t\t\tper_page: search ? 20 : 10,\n\t\t} ),\n\t\t[ search, config, postsToExclude ]\n\t);\n\tconst { records: searchResults, hasResolved: searchHasResolved } =\n\t\tuseEntityRecords(\n\t\t\tentityForSuggestions.type,\n\t\t\tentityForSuggestions.slug,\n\t\t\tquery\n\t\t);\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) return;\n\t\tlet newSuggestions = EMPTY_ARRAY;\n\t\tif ( searchResults?.length ) {\n\t\t\tnewSuggestions = searchResults;\n\t\t\tif ( config.recordNamePath ) {\n\t\t\t\tnewSuggestions = mapToIHasNameAndId(\n\t\t\t\t\tnewSuggestions,\n\t\t\t\t\tconfig.recordNamePath\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// Update suggestions only when the query has resolved, so as to keep\n\t\t// the previous results in the UI.\n\t\tsetSuggestions( newSuggestions );\n\t}, [ searchResults, searchHasResolved ] );\n\treturn suggestions;\n}\n\nfunction SuggestionList( { entityForSuggestions, onSelect } ) {\n\tconst composite = useCompositeState( { orientation: 'vertical' } );\n\tconst [ search, setSearch, debouncedSearch ] = useDebouncedInput();\n\tconst suggestions = useSearchSuggestions(\n\t\tentityForSuggestions,\n\t\tdebouncedSearch\n\t);\n\tconst { labels } = entityForSuggestions;\n\treturn (\n\t\t<>\n\t\t\t<SearchControl\n\t\t\t\tonChange={ setSearch }\n\t\t\t\tvalue={ search }\n\t\t\t\tlabel={ labels.search_items }\n\t\t\t\tplaceholder={ labels.search_items }\n\t\t\t/>\n\t\t\t{ !! suggestions?.length && (\n\t\t\t\t<Composite\n\t\t\t\t\t{ ...composite }\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\tclassName=\"edit-site-custom-template-modal__suggestions_list\"\n\t\t\t\t>\n\t\t\t\t\t{ suggestions.map( ( suggestion ) => (\n\t\t\t\t\t\t<SuggestionListItem\n\t\t\t\t\t\t\tkey={ suggestion.slug }\n\t\t\t\t\t\t\tsuggestion={ suggestion }\n\t\t\t\t\t\t\tsearch={ debouncedSearch }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tentityForSuggestions={ entityForSuggestions }\n\t\t\t\t\t\t\tcomposite={ composite }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</Composite>\n\t\t\t) }\n\t\t\t{ debouncedSearch && ! suggestions?.length && (\n\t\t\t\t<p className=\"edit-site-custom-template-modal__no-results\">\n\t\t\t\t\t{ labels.not_found }\n\t\t\t\t</p>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction AddCustomTemplateModal( { onClose, onSelect, entityForSuggestions } ) {\n\tconst [ showSearchEntities, setShowSearchEntities ] = useState(\n\t\tentityForSuggestions.hasGeneralTemplate\n\t);\n\tconst baseCssClass = 'edit-site-custom-template-modal';\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t__( 'Add template: %s' ),\n\t\t\t\tentityForSuggestions.labels.singular_name\n\t\t\t) }\n\t\t\tclassName={ baseCssClass }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t{ ! showSearchEntities && (\n\t\t\t\t<>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Select whether to create a single template for all items or a specific one.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tclassName={ `${ baseCssClass }__contents` }\n\t\t\t\t\t\tgap=\"4\"\n\t\t\t\t\t\talign=\"initial\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FlexItem\n\t\t\t\t\t\t\tisBlock\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tconst { slug, title, description } =\n\t\t\t\t\t\t\t\t\tentityForSuggestions.template;\n\t\t\t\t\t\t\t\tonSelect( { slug, title, description } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Heading level={ 5 }>\n\t\t\t\t\t\t\t\t{ entityForSuggestions.labels.all_items }\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t<Text as=\"span\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.\n\t\t\t\t\t\t\t\t\t__( 'For all items' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t<FlexItem\n\t\t\t\t\t\t\tisBlock\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetShowSearchEntities( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Heading level={ 5 }>\n\t\t\t\t\t\t\t\t{ entityForSuggestions.labels.singular_name }\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t<Text as=\"span\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.\n\t\t\t\t\t\t\t\t\t__( 'For a specific item' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t</Flex>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t{ showSearchEntities && (\n\t\t\t\t<>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'This template will be used only for the specific item chosen.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\tentityForSuggestions={ entityForSuggestions }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) }\n\t\t</Modal>\n\t);\n}\n\nexport default AddCustomTemplateModal;\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/add-custom-template-modal.js"],"names":["EMPTY_ARRAY","SuggestionListItem","suggestion","search","onSelect","entityForSuggestions","composite","baseCssClass","Button","config","getSpecificTemplate","name","link","useDebouncedInput","input","setInput","debounced","setter","setDebounced","useSearchSuggestions","query","order","context","per_page","queryArgs","records","searchResults","hasResolved","searchHasResolved","type","slug","suggestions","setSuggestions","newSuggestions","length","recordNamePath","SuggestionList","orientation","setSearch","debouncedSearch","labels","showSearchControl","setShowSearchControl","search_items","map","not_found","AddCustomTemplateModal","onClose","showSearchEntities","setShowSearchEntities","hasGeneralTemplate","singular_name","title","description","templatePrefix","template","all_items"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useMemo, useEffect } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tFlex,\n\tFlexItem,\n\tModal,\n\tSearchControl,\n\tTextHighlight,\n\t__experimentalText as Text,\n\t__unstableComposite as Composite,\n\t__unstableUseCompositeState as useCompositeState,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { useDebounce } from '@wordpress/compose';\nimport { useEntityRecords } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { mapToIHasNameAndId } from './utils';\n\nconst EMPTY_ARRAY = [];\n\nfunction SuggestionListItem( {\n\tsuggestion,\n\tsearch,\n\tonSelect,\n\tentityForSuggestions,\n\tcomposite,\n} ) {\n\tconst baseCssClass =\n\t\t'edit-site-custom-template-modal__suggestions_list__list-item';\n\treturn (\n\t\t<CompositeItem\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName={ baseCssClass }\n\t\t\tonClick={ () =>\n\t\t\t\tonSelect(\n\t\t\t\t\tentityForSuggestions.config.getSpecificTemplate(\n\t\t\t\t\t\tsuggestion\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}\n\t\t>\n\t\t\t<span className={ `${ baseCssClass }__title` }>\n\t\t\t\t<TextHighlight text={ suggestion.name } highlight={ search } />\n\t\t\t</span>\n\t\t\t{ suggestion.link && (\n\t\t\t\t<span className={ `${ baseCssClass }__info` }>\n\t\t\t\t\t{ suggestion.link }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</CompositeItem>\n\t);\n}\n\nfunction useDebouncedInput() {\n\tconst [ input, setInput ] = useState( '' );\n\tconst [ debounced, setter ] = useState( '' );\n\tconst setDebounced = useDebounce( setter, 250 );\n\tuseEffect( () => {\n\t\tif ( debounced !== input ) {\n\t\t\tsetDebounced( input );\n\t\t}\n\t}, [ debounced, input ] );\n\treturn [ input, setInput, debounced ];\n}\n\nfunction useSearchSuggestions( entityForSuggestions, search ) {\n\tconst { config } = entityForSuggestions;\n\tconst query = useMemo(\n\t\t() => ( {\n\t\t\torder: 'asc',\n\t\t\tcontext: 'view',\n\t\t\tsearch,\n\t\t\tper_page: search ? 20 : 10,\n\t\t\t...config.queryArgs( search ),\n\t\t} ),\n\t\t[ search, config ]\n\t);\n\tconst { records: searchResults, hasResolved: searchHasResolved } =\n\t\tuseEntityRecords(\n\t\t\tentityForSuggestions.type,\n\t\t\tentityForSuggestions.slug,\n\t\t\tquery\n\t\t);\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) return;\n\t\tlet newSuggestions = EMPTY_ARRAY;\n\t\tif ( searchResults?.length ) {\n\t\t\tnewSuggestions = searchResults;\n\t\t\tif ( config.recordNamePath ) {\n\t\t\t\tnewSuggestions = mapToIHasNameAndId(\n\t\t\t\t\tnewSuggestions,\n\t\t\t\t\tconfig.recordNamePath\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// Update suggestions only when the query has resolved, so as to keep\n\t\t// the previous results in the UI.\n\t\tsetSuggestions( newSuggestions );\n\t}, [ searchResults, searchHasResolved ] );\n\treturn suggestions;\n}\n\nfunction SuggestionList( { entityForSuggestions, onSelect } ) {\n\tconst composite = useCompositeState( { orientation: 'vertical' } );\n\tconst [ search, setSearch, debouncedSearch ] = useDebouncedInput();\n\tconst suggestions = useSearchSuggestions(\n\t\tentityForSuggestions,\n\t\tdebouncedSearch\n\t);\n\tconst { labels } = entityForSuggestions;\n\tconst [ showSearchControl, setShowSearchControl ] = useState( false );\n\tif ( ! showSearchControl && suggestions?.length > 9 ) {\n\t\tsetShowSearchControl( true );\n\t}\n\treturn (\n\t\t<>\n\t\t\t{ showSearchControl && (\n\t\t\t\t<SearchControl\n\t\t\t\t\tonChange={ setSearch }\n\t\t\t\t\tvalue={ search }\n\t\t\t\t\tlabel={ labels.search_items }\n\t\t\t\t\tplaceholder={ labels.search_items }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ !! suggestions?.length && (\n\t\t\t\t<Composite\n\t\t\t\t\t{ ...composite }\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\tclassName=\"edit-site-custom-template-modal__suggestions_list\"\n\t\t\t\t\taria-label={ __( 'Suggestions list' ) }\n\t\t\t\t>\n\t\t\t\t\t{ suggestions.map( ( suggestion ) => (\n\t\t\t\t\t\t<SuggestionListItem\n\t\t\t\t\t\t\tkey={ suggestion.slug }\n\t\t\t\t\t\t\tsuggestion={ suggestion }\n\t\t\t\t\t\t\tsearch={ debouncedSearch }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tentityForSuggestions={ entityForSuggestions }\n\t\t\t\t\t\t\tcomposite={ composite }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</Composite>\n\t\t\t) }\n\t\t\t{ debouncedSearch && ! suggestions?.length && (\n\t\t\t\t<p className=\"edit-site-custom-template-modal__no-results\">\n\t\t\t\t\t{ labels.not_found }\n\t\t\t\t</p>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction AddCustomTemplateModal( { onClose, onSelect, entityForSuggestions } ) {\n\tconst [ showSearchEntities, setShowSearchEntities ] = useState(\n\t\tentityForSuggestions.hasGeneralTemplate\n\t);\n\tconst baseCssClass = 'edit-site-custom-template-modal';\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t__( 'Add template: %s' ),\n\t\t\t\tentityForSuggestions.labels.singular_name\n\t\t\t) }\n\t\t\tclassName={ baseCssClass }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t{ ! showSearchEntities && (\n\t\t\t\t<>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Select whether to create a single template for all items or a specific one.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tclassName={ `${ baseCssClass }__contents` }\n\t\t\t\t\t\tgap=\"4\"\n\t\t\t\t\t\talign=\"initial\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FlexItem\n\t\t\t\t\t\t\tisBlock\n\t\t\t\t\t\t\tas={ Button }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\t\tslug,\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\ttemplatePrefix,\n\t\t\t\t\t\t\t\t} = entityForSuggestions.template;\n\t\t\t\t\t\t\t\tonSelect( {\n\t\t\t\t\t\t\t\t\tslug,\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\ttemplatePrefix,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text as=\"span\" weight={ 600 }>\n\t\t\t\t\t\t\t\t{ entityForSuggestions.labels.all_items }\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text as=\"span\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.\n\t\t\t\t\t\t\t\t\t__( 'For all items' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t<FlexItem\n\t\t\t\t\t\t\tisBlock\n\t\t\t\t\t\t\tas={ Button }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetShowSearchEntities( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text as=\"span\" weight={ 600 }>\n\t\t\t\t\t\t\t\t{ entityForSuggestions.labels.singular_name }\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text as=\"span\">\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.\n\t\t\t\t\t\t\t\t\t__( 'For a specific item' )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t</Flex>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t{ showSearchEntities && (\n\t\t\t\t<>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'This template will be used only for the specific item chosen.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\tentityForSuggestions={ entityForSuggestions }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) }\n\t\t</Modal>\n\t);\n}\n\nexport default AddCustomTemplateModal;\n"]}
@@ -9,6 +9,10 @@ exports.default = NewTemplate;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
12
+ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
13
+
14
+ var _url = require("@wordpress/url");
15
+
12
16
  var _components = require("@wordpress/components");
13
17
 
14
18
  var _data = require("@wordpress/data");
@@ -67,7 +71,8 @@ function NewTemplate(_ref) {
67
71
  saveEntityRecord
68
72
  } = (0, _data.useDispatch)(_coreData.store);
69
73
  const {
70
- createErrorNotice
74
+ createErrorNotice,
75
+ createSuccessNotice
71
76
  } = (0, _data.useDispatch)(_notices.store);
72
77
  const {
73
78
  setTemplate
@@ -80,14 +85,29 @@ function NewTemplate(_ref) {
80
85
  const {
81
86
  title,
82
87
  description,
83
- slug
88
+ slug,
89
+ templatePrefix
84
90
  } = template;
91
+ let templateContent = template.content; // Try to find fallback content from existing templates.
92
+
93
+ if (!templateContent) {
94
+ const fallbackTemplate = await (0, _apiFetch.default)({
95
+ path: (0, _url.addQueryArgs)('/wp/v2/templates/lookup', {
96
+ slug,
97
+ is_custom: !isWPSuggestion,
98
+ template_prefix: templatePrefix
99
+ })
100
+ });
101
+ templateContent = fallbackTemplate.content;
102
+ }
103
+
85
104
  const newTemplate = await saveEntityRecord('postType', 'wp_template', {
86
105
  description,
87
106
  // Slugs need to be strings, so this is for template `404`
88
107
  slug: slug.toString(),
89
108
  status: 'publish',
90
109
  title,
110
+ content: templateContent,
91
111
  // This adds a post meta field in template that is part of `is_custom` value calculation.
92
112
  is_wp_suggestion: isWPSuggestion
93
113
  }, {
@@ -99,7 +119,11 @@ function NewTemplate(_ref) {
99
119
  history.push({
100
120
  postId: newTemplate.id,
101
121
  postType: newTemplate.type
102
- }); // TODO: Add a success notice?
122
+ });
123
+ createSuccessNotice((0, _i18n.sprintf)( // translators: %s: Title of the created template e.g: "Category".
124
+ (0, _i18n.__)('"%s" successfully created.'), title), {
125
+ type: 'snackbar'
126
+ });
103
127
  } catch (error) {
104
128
  const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0, _i18n.__)('An error occurred while creating the template.');
105
129
  createErrorNotice(errorMessage, {
@@ -161,11 +185,6 @@ function NewTemplate(_ref) {
161
185
  }
162
186
 
163
187
  function useMissingTemplates(setEntityForSuggestions, setShowCustomTemplateModal) {
164
- const postTypes = (0, _utils.usePostTypes)();
165
- const pagePostType = (0, _utils.usePostTypePage)();
166
- const taxonomies = (0, _utils.useTaxonomies)();
167
- const categoryTaxonomy = (0, _utils.useTaxonomyCategory)();
168
- const tagTaxonomy = (0, _utils.useTaxonomyTag)();
169
188
  const existingTemplates = (0, _utils.useExistingTemplates)();
170
189
  const defaultTemplateTypes = (0, _utils.useDefaultTemplateTypes)();
171
190
  const existingTemplateSlugs = (existingTemplates || []).map(_ref2 => {
@@ -179,41 +198,44 @@ function useMissingTemplates(setEntityForSuggestions, setShowCustomTemplateModal
179
198
  const onClickMenuItem = _entityForSuggestions => {
180
199
  setShowCustomTemplateModal(true);
181
200
  setEntityForSuggestions(_entityForSuggestions);
182
- }; // TODO: find better names for these variables. `useExtraTemplates` returns an array of items.
183
-
184
-
185
- const categoryMenuItem = (0, _utils.useExtraTemplates)(categoryTaxonomy, _utils.entitiesConfig.category, onClickMenuItem);
186
- const tagMenuItem = (0, _utils.useExtraTemplates)(tagTaxonomy, _utils.entitiesConfig.tag, onClickMenuItem);
187
- const pageMenuItem = (0, _utils.useExtraTemplates)(pagePostType, _utils.entitiesConfig.page, onClickMenuItem); // We need to replace existing default template types with
201
+ }; // We need to replace existing default template types with
188
202
  // the create specific template functionality. The original
189
203
  // info (title, description, etc.) is preserved in the
190
- // `useExtraTemplates` hook.
204
+ // used hooks.
205
+
191
206
 
192
207
  const enhancedMissingDefaultTemplateTypes = [...missingDefaultTemplates];
193
- [categoryMenuItem, tagMenuItem, pageMenuItem].forEach(menuItem => {
194
- if (!(menuItem !== null && menuItem !== void 0 && menuItem.length)) {
208
+ const {
209
+ defaultTaxonomiesMenuItems,
210
+ taxonomiesMenuItems
211
+ } = (0, _utils.useTaxonomiesMenuItems)(onClickMenuItem);
212
+ const {
213
+ defaultPostTypesMenuItems,
214
+ postTypesMenuItems
215
+ } = (0, _utils.usePostTypeMenuItems)(onClickMenuItem);
216
+ const authorMenuItem = (0, _utils.useAuthorMenuItem)(onClickMenuItem);
217
+ [...defaultTaxonomiesMenuItems, ...defaultPostTypesMenuItems, authorMenuItem].forEach(menuItem => {
218
+ if (!menuItem) {
195
219
  return;
196
220
  }
197
221
 
198
- const matchIndex = enhancedMissingDefaultTemplateTypes.findIndex(template => template.slug === menuItem[0].slug); // Some default template types might have been filtered above from
222
+ const matchIndex = enhancedMissingDefaultTemplateTypes.findIndex(template => template.slug === menuItem.slug); // Some default template types might have been filtered above from
199
223
  // `missingDefaultTemplates` because they only check for the general
200
224
  // template. So here we either replace or append the item, augmented
201
225
  // with the check if it has available specific item to create a
202
226
  // template for.
203
227
 
204
228
  if (matchIndex > -1) {
205
- enhancedMissingDefaultTemplateTypes.splice(matchIndex, 1, menuItem[0]);
229
+ enhancedMissingDefaultTemplateTypes[matchIndex] = menuItem;
206
230
  } else {
207
- enhancedMissingDefaultTemplateTypes.push(menuItem[0]);
231
+ enhancedMissingDefaultTemplateTypes.push(menuItem);
208
232
  }
209
233
  }); // Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.
210
234
 
211
235
  enhancedMissingDefaultTemplateTypes === null || enhancedMissingDefaultTemplateTypes === void 0 ? void 0 : enhancedMissingDefaultTemplateTypes.sort((template1, template2) => {
212
236
  return DEFAULT_TEMPLATE_SLUGS.indexOf(template1.slug) - DEFAULT_TEMPLATE_SLUGS.indexOf(template2.slug);
213
237
  });
214
- const extraPostTypeTemplates = (0, _utils.useExtraTemplates)(postTypes, _utils.entitiesConfig.postType, onClickMenuItem);
215
- const extraTaxonomyTemplates = (0, _utils.useExtraTemplates)(taxonomies, _utils.entitiesConfig.taxonomy, onClickMenuItem);
216
- const missingTemplates = [...enhancedMissingDefaultTemplateTypes, ...extraPostTypeTemplates, ...extraTaxonomyTemplates];
238
+ const missingTemplates = [...enhancedMissingDefaultTemplateTypes, ...postTypesMenuItems, ...taxonomiesMenuItems];
217
239
  return missingTemplates;
218
240
  }
219
241
  //# sourceMappingURL=new-template.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/new-template.js"],"names":["DEFAULT_TEMPLATE_SLUGS","TEMPLATE_ICONS","home","single","post","page","archive","search","notFound","index","list","category","author","postAuthor","taxonomy","blockMeta","date","postDate","tag","attachment","media","NewTemplate","postType","showCustomTemplateModal","setShowCustomTemplateModal","showCustomGenericTemplateModal","setShowCustomGenericTemplateModal","entityForSuggestions","setEntityForSuggestions","history","saveEntityRecord","coreStore","createErrorNotice","noticesStore","setTemplate","editSiteStore","createTemplate","template","isWPSuggestion","title","description","slug","newTemplate","toString","status","is_wp_suggestion","throwOnError","id","push","postId","type","error","errorMessage","message","code","missingTemplates","useMissingTemplates","length","labels","add_new","add_new_item","noArrow","variant","map","onClick","icon","customGenericTemplateIcon","postTypes","pagePostType","taxonomies","categoryTaxonomy","tagTaxonomy","existingTemplates","defaultTemplateTypes","existingTemplateSlugs","missingDefaultTemplates","filter","includes","onClickMenuItem","_entityForSuggestions","categoryMenuItem","entitiesConfig","tagMenuItem","pageMenuItem","enhancedMissingDefaultTemplateTypes","forEach","menuItem","matchIndex","findIndex","splice","sort","template1","template2","indexOf","extraPostTypeTemplates","extraTaxonomyTemplates"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\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\tlayout as customGenericTemplateIcon,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport AddCustomTemplateModal from './add-custom-template-modal';\nimport {\n\tuseExistingTemplates,\n\tuseDefaultTemplateTypes,\n\tentitiesConfig,\n\tusePostTypes,\n\tusePostTypePage,\n\tuseTaxonomies,\n\tuseTaxonomyCategory,\n\tuseTaxonomyTag,\n\tuseExtraTemplates,\n} from './utils';\nimport AddCustomGenericTemplateModal from './add-custom-generic-template-modal';\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 [ showCustomTemplateModal, setShowCustomTemplateModal ] =\n\t\tuseState( false );\n\tconst [\n\t\tshowCustomGenericTemplateModal,\n\t\tsetShowCustomGenericTemplateModal,\n\t] = useState( false );\n\tconst [ entityForSuggestions, setEntityForSuggestions ] = useState( {} );\n\n\tconst history = useHistory();\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst { setTemplate } = useDispatch( editSiteStore );\n\n\tasync function createTemplate( template, isWPSuggestion = true ) {\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: isWPSuggestion,\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\n\tconst missingTemplates = useMissingTemplates(\n\t\tsetEntityForSuggestions,\n\t\tsetShowCustomTemplateModal\n\t);\n\tif ( ! missingTemplates.length ) {\n\t\treturn null;\n\t}\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\t<MenuGroup>\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\ticon={ customGenericTemplateIcon }\n\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\tinfo={ __(\n\t\t\t\t\t\t\t\t\t'Custom templates can be applied to any post or page.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey=\"custom-template\"\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tsetShowCustomGenericTemplateModal( true )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Custom template' ) }\n\t\t\t\t\t\t\t</MenuItem>\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\t{ showCustomGenericTemplateModal && (\n\t\t\t\t<AddCustomGenericTemplateModal\n\t\t\t\t\tonClose={ () => setShowCustomGenericTemplateModal( false ) }\n\t\t\t\t\tcreateTemplate={ createTemplate }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction useMissingTemplates(\n\tsetEntityForSuggestions,\n\tsetShowCustomTemplateModal\n) {\n\tconst postTypes = usePostTypes();\n\tconst pagePostType = usePostTypePage();\n\tconst taxonomies = useTaxonomies();\n\tconst categoryTaxonomy = useTaxonomyCategory();\n\tconst tagTaxonomy = useTaxonomyTag();\n\n\tconst existingTemplates = useExistingTemplates();\n\tconst defaultTemplateTypes = useDefaultTemplateTypes();\n\n\tconst existingTemplateSlugs = ( existingTemplates || [] ).map(\n\t\t( { slug } ) => slug\n\t);\n\n\tconst missingDefaultTemplates = ( defaultTemplateTypes || [] ).filter(\n\t\t( template ) =>\n\t\t\tDEFAULT_TEMPLATE_SLUGS.includes( template.slug ) &&\n\t\t\t! existingTemplateSlugs.includes( template.slug )\n\t);\n\tconst onClickMenuItem = ( _entityForSuggestions ) => {\n\t\tsetShowCustomTemplateModal( true );\n\t\tsetEntityForSuggestions( _entityForSuggestions );\n\t};\n\t// TODO: find better names for these variables. `useExtraTemplates` returns an array of items.\n\tconst categoryMenuItem = useExtraTemplates(\n\t\tcategoryTaxonomy,\n\t\tentitiesConfig.category,\n\t\tonClickMenuItem\n\t);\n\tconst tagMenuItem = useExtraTemplates(\n\t\ttagTaxonomy,\n\t\tentitiesConfig.tag,\n\t\tonClickMenuItem\n\t);\n\tconst pageMenuItem = useExtraTemplates(\n\t\tpagePostType,\n\t\tentitiesConfig.page,\n\t\tonClickMenuItem\n\t);\n\t// We need to replace existing default template types with\n\t// the create specific template functionality. The original\n\t// info (title, description, etc.) is preserved in the\n\t// `useExtraTemplates` hook.\n\tconst enhancedMissingDefaultTemplateTypes = [ ...missingDefaultTemplates ];\n\t[ categoryMenuItem, tagMenuItem, pageMenuItem ].forEach( ( menuItem ) => {\n\t\tif ( ! menuItem?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst matchIndex = enhancedMissingDefaultTemplateTypes.findIndex(\n\t\t\t( template ) => template.slug === menuItem[ 0 ].slug\n\t\t);\n\t\t// Some default template types might have been filtered above from\n\t\t// `missingDefaultTemplates` because they only check for the general\n\t\t// template. So here we either replace or append the item, augmented\n\t\t// with the check if it has available specific item to create a\n\t\t// template for.\n\t\tif ( matchIndex > -1 ) {\n\t\t\tenhancedMissingDefaultTemplateTypes.splice(\n\t\t\t\tmatchIndex,\n\t\t\t\t1,\n\t\t\t\tmenuItem[ 0 ]\n\t\t\t);\n\t\t} else {\n\t\t\tenhancedMissingDefaultTemplateTypes.push( menuItem[ 0 ] );\n\t\t}\n\t} );\n\t// Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.\n\tenhancedMissingDefaultTemplateTypes?.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\tconst extraPostTypeTemplates = useExtraTemplates(\n\t\tpostTypes,\n\t\tentitiesConfig.postType,\n\t\tonClickMenuItem\n\t);\n\tconst extraTaxonomyTemplates = useExtraTemplates(\n\t\ttaxonomies,\n\t\tentitiesConfig.taxonomy,\n\t\tonClickMenuItem\n\t);\n\tconst missingTemplates = [\n\t\t...enhancedMissingDefaultTemplateTypes,\n\t\t...extraPostTypeTemplates,\n\t\t...extraTaxonomyTemplates,\n\t];\n\treturn missingTemplates;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/add-new-template/new-template.js"],"names":["DEFAULT_TEMPLATE_SLUGS","TEMPLATE_ICONS","home","single","post","page","archive","search","notFound","index","list","category","author","postAuthor","taxonomy","blockMeta","date","postDate","tag","attachment","media","NewTemplate","postType","showCustomTemplateModal","setShowCustomTemplateModal","showCustomGenericTemplateModal","setShowCustomGenericTemplateModal","entityForSuggestions","setEntityForSuggestions","history","saveEntityRecord","coreStore","createErrorNotice","createSuccessNotice","noticesStore","setTemplate","editSiteStore","createTemplate","template","isWPSuggestion","title","description","slug","templatePrefix","templateContent","content","fallbackTemplate","path","is_custom","template_prefix","newTemplate","toString","status","is_wp_suggestion","throwOnError","id","push","postId","type","error","errorMessage","message","code","missingTemplates","useMissingTemplates","length","labels","add_new","add_new_item","noArrow","variant","map","onClick","icon","customGenericTemplateIcon","existingTemplates","defaultTemplateTypes","existingTemplateSlugs","missingDefaultTemplates","filter","includes","onClickMenuItem","_entityForSuggestions","enhancedMissingDefaultTemplateTypes","defaultTaxonomiesMenuItems","taxonomiesMenuItems","defaultPostTypesMenuItems","postTypesMenuItems","authorMenuItem","forEach","menuItem","matchIndex","findIndex","sort","template1","template2","indexOf"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport {\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\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\tlayout as customGenericTemplateIcon,\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 {\n\tuseExistingTemplates,\n\tuseDefaultTemplateTypes,\n\tuseTaxonomiesMenuItems,\n\tusePostTypeMenuItems,\n\tuseAuthorMenuItem,\n} from './utils';\nimport AddCustomGenericTemplateModal from './add-custom-generic-template-modal';\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 [ showCustomTemplateModal, setShowCustomTemplateModal ] =\n\t\tuseState( false );\n\tconst [\n\t\tshowCustomGenericTemplateModal,\n\t\tsetShowCustomGenericTemplateModal,\n\t] = useState( false );\n\tconst [ entityForSuggestions, setEntityForSuggestions ] = useState( {} );\n\n\tconst history = useHistory();\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { setTemplate } = useDispatch( editSiteStore );\n\n\tasync function createTemplate( template, isWPSuggestion = true ) {\n\t\ttry {\n\t\t\tconst { title, description, slug, templatePrefix } = template;\n\t\t\tlet templateContent = template.content;\n\t\t\t// Try to find fallback content from existing templates.\n\t\t\tif ( ! templateContent ) {\n\t\t\t\tconst fallbackTemplate = await apiFetch( {\n\t\t\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', {\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\tis_custom: ! isWPSuggestion,\n\t\t\t\t\t\ttemplate_prefix: templatePrefix,\n\t\t\t\t\t} ),\n\t\t\t\t} );\n\t\t\t\ttemplateContent = fallbackTemplate.content;\n\t\t\t}\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\tcontent: templateContent,\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: isWPSuggestion,\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\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: Title of the created template e.g: \"Category\".\n\t\t\t\t\t__( '\"%s\" successfully created.' ),\n\t\t\t\t\ttitle\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\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 missingTemplates = useMissingTemplates(\n\t\tsetEntityForSuggestions,\n\t\tsetShowCustomTemplateModal\n\t);\n\tif ( ! missingTemplates.length ) {\n\t\treturn null;\n\t}\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\t<MenuGroup>\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\ticon={ customGenericTemplateIcon }\n\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\tinfo={ __(\n\t\t\t\t\t\t\t\t\t'Custom templates can be applied to any post or page.'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey=\"custom-template\"\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tsetShowCustomGenericTemplateModal( true )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Custom template' ) }\n\t\t\t\t\t\t\t</MenuItem>\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\t{ showCustomGenericTemplateModal && (\n\t\t\t\t<AddCustomGenericTemplateModal\n\t\t\t\t\tonClose={ () => setShowCustomGenericTemplateModal( false ) }\n\t\t\t\t\tcreateTemplate={ createTemplate }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction useMissingTemplates(\n\tsetEntityForSuggestions,\n\tsetShowCustomTemplateModal\n) {\n\tconst existingTemplates = useExistingTemplates();\n\tconst defaultTemplateTypes = useDefaultTemplateTypes();\n\tconst existingTemplateSlugs = ( existingTemplates || [] ).map(\n\t\t( { slug } ) => slug\n\t);\n\tconst missingDefaultTemplates = ( defaultTemplateTypes || [] ).filter(\n\t\t( template ) =>\n\t\t\tDEFAULT_TEMPLATE_SLUGS.includes( template.slug ) &&\n\t\t\t! existingTemplateSlugs.includes( template.slug )\n\t);\n\tconst onClickMenuItem = ( _entityForSuggestions ) => {\n\t\tsetShowCustomTemplateModal( true );\n\t\tsetEntityForSuggestions( _entityForSuggestions );\n\t};\n\t// We need to replace existing default template types with\n\t// the create specific template functionality. The original\n\t// info (title, description, etc.) is preserved in the\n\t// used hooks.\n\tconst enhancedMissingDefaultTemplateTypes = [ ...missingDefaultTemplates ];\n\tconst { defaultTaxonomiesMenuItems, taxonomiesMenuItems } =\n\t\tuseTaxonomiesMenuItems( onClickMenuItem );\n\tconst { defaultPostTypesMenuItems, postTypesMenuItems } =\n\t\tusePostTypeMenuItems( onClickMenuItem );\n\n\tconst authorMenuItem = useAuthorMenuItem( onClickMenuItem );\n\t[\n\t\t...defaultTaxonomiesMenuItems,\n\t\t...defaultPostTypesMenuItems,\n\t\tauthorMenuItem,\n\t].forEach( ( menuItem ) => {\n\t\tif ( ! menuItem ) {\n\t\t\treturn;\n\t\t}\n\t\tconst matchIndex = enhancedMissingDefaultTemplateTypes.findIndex(\n\t\t\t( template ) => template.slug === menuItem.slug\n\t\t);\n\t\t// Some default template types might have been filtered above from\n\t\t// `missingDefaultTemplates` because they only check for the general\n\t\t// template. So here we either replace or append the item, augmented\n\t\t// with the check if it has available specific item to create a\n\t\t// template for.\n\t\tif ( matchIndex > -1 ) {\n\t\t\tenhancedMissingDefaultTemplateTypes[ matchIndex ] = menuItem;\n\t\t} else {\n\t\t\tenhancedMissingDefaultTemplateTypes.push( menuItem );\n\t\t}\n\t} );\n\t// Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.\n\tenhancedMissingDefaultTemplateTypes?.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\tconst missingTemplates = [\n\t\t...enhancedMissingDefaultTemplateTypes,\n\t\t...postTypesMenuItems,\n\t\t...taxonomiesMenuItems,\n\t];\n\treturn missingTemplates;\n}\n"]}