@wordpress/edit-site 5.19.2 → 5.19.4

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 (162) hide show
  1. package/build/components/add-new-pattern/index.js +6 -10
  2. package/build/components/add-new-pattern/index.js.map +1 -1
  3. package/build/components/global-styles/font-library-modal/collection-font-details.js +3 -1
  4. package/build/components/global-styles/font-library-modal/collection-font-details.js.map +1 -1
  5. package/build/components/global-styles/font-library-modal/context.js +26 -30
  6. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  7. package/build/components/global-styles/font-library-modal/font-collection.js +31 -11
  8. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  9. package/build/components/global-styles/font-library-modal/index.js +10 -3
  10. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  11. package/build/components/global-styles/font-library-modal/installed-fonts.js +27 -7
  12. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  13. package/build/components/global-styles/font-library-modal/local-fonts.js +35 -8
  14. package/build/components/global-styles/font-library-modal/local-fonts.js.map +1 -1
  15. package/build/components/global-styles/font-library-modal/resolvers.js +1 -1
  16. package/build/components/global-styles/font-library-modal/resolvers.js.map +1 -1
  17. package/build/components/global-styles/font-library-modal/upload-fonts.js +26 -0
  18. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -0
  19. package/build/components/global-styles/font-library-modal/utils/fonts-outline.js +4 -1
  20. package/build/components/global-styles/font-library-modal/utils/fonts-outline.js.map +1 -1
  21. package/build/components/global-styles/font-library-modal/utils/get-notice-from-response.js +71 -0
  22. package/build/components/global-styles/font-library-modal/utils/get-notice-from-response.js.map +1 -0
  23. package/build/components/global-styles/font-library-modal/utils/index.js +4 -1
  24. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  25. package/build/components/page-patterns/grid.js +0 -1
  26. package/build/components/page-patterns/grid.js.map +1 -1
  27. package/build/components/page-patterns/patterns-list.js +1 -1
  28. package/build/components/page-patterns/patterns-list.js.map +1 -1
  29. package/build/components/page-patterns/use-patterns.js +5 -1
  30. package/build/components/page-patterns/use-patterns.js.map +1 -1
  31. package/build/components/page-template-parts/index.js +12 -1
  32. package/build/components/page-template-parts/index.js.map +1 -1
  33. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +1 -1
  34. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  35. package/build/components/sidebar-edit-mode/template-panel/hooks.js +71 -0
  36. package/build/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -0
  37. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js +2 -2
  38. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -1
  39. package/build/components/sidebar-edit-mode/template-panel/replace-template-button.js +82 -0
  40. package/build/components/sidebar-edit-mode/template-panel/replace-template-button.js.map +1 -0
  41. package/build/components/sidebar-edit-mode/template-panel/template-actions.js +10 -3
  42. package/build/components/sidebar-edit-mode/template-panel/template-actions.js.map +1 -1
  43. package/build/components/sidebar-edit-mode/template-panel/template-areas.js +1 -1
  44. package/build/components/sidebar-edit-mode/template-panel/template-areas.js.map +1 -1
  45. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +5 -3
  46. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  47. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +5 -4
  48. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  49. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +8 -1
  50. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js.map +1 -1
  51. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +29 -0
  52. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  53. package/build/components/sidebar-navigation-screen-patterns/index.js +14 -2
  54. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  55. package/build/components/sidebar-navigation-screen-template/home-template-details.js +13 -18
  56. package/build/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  57. package/build/components/sidebar-navigation-screen-templates-browse/index.js +16 -4
  58. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  59. package/build/store/selectors.js +4 -5
  60. package/build/store/selectors.js.map +1 -1
  61. package/build/utils/constants.js +1 -1
  62. package/build/utils/constants.js.map +1 -1
  63. package/build-module/components/add-new-pattern/index.js +7 -11
  64. package/build-module/components/add-new-pattern/index.js.map +1 -1
  65. package/build-module/components/global-styles/font-library-modal/collection-font-details.js +3 -1
  66. package/build-module/components/global-styles/font-library-modal/collection-font-details.js.map +1 -1
  67. package/build-module/components/global-styles/font-library-modal/context.js +26 -30
  68. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  69. package/build-module/components/global-styles/font-library-modal/font-collection.js +32 -12
  70. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  71. package/build-module/components/global-styles/font-library-modal/index.js +10 -3
  72. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  73. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +28 -8
  74. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  75. package/build-module/components/global-styles/font-library-modal/local-fonts.js +38 -11
  76. package/build-module/components/global-styles/font-library-modal/local-fonts.js.map +1 -1
  77. package/build-module/components/global-styles/font-library-modal/resolvers.js +1 -1
  78. package/build-module/components/global-styles/font-library-modal/resolvers.js.map +1 -1
  79. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +17 -0
  80. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -0
  81. package/build-module/components/global-styles/font-library-modal/utils/fonts-outline.js +4 -1
  82. package/build-module/components/global-styles/font-library-modal/utils/fonts-outline.js.map +1 -1
  83. package/build-module/components/global-styles/font-library-modal/utils/get-notice-from-response.js +63 -0
  84. package/build-module/components/global-styles/font-library-modal/utils/get-notice-from-response.js.map +1 -0
  85. package/build-module/components/global-styles/font-library-modal/utils/index.js +4 -1
  86. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  87. package/build-module/components/page-patterns/grid.js +0 -1
  88. package/build-module/components/page-patterns/grid.js.map +1 -1
  89. package/build-module/components/page-patterns/patterns-list.js +1 -1
  90. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  91. package/build-module/components/page-patterns/use-patterns.js +5 -1
  92. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  93. package/build-module/components/page-template-parts/index.js +12 -1
  94. package/build-module/components/page-template-parts/index.js.map +1 -1
  95. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +1 -1
  96. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  97. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js +64 -0
  98. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -0
  99. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js +3 -3
  100. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -1
  101. package/build-module/components/sidebar-edit-mode/template-panel/replace-template-button.js +76 -0
  102. package/build-module/components/sidebar-edit-mode/template-panel/replace-template-button.js.map +1 -0
  103. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js +10 -3
  104. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js.map +1 -1
  105. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js +1 -1
  106. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js.map +1 -1
  107. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +5 -3
  108. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js.map +1 -1
  109. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +5 -4
  110. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  111. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +7 -1
  112. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js.map +1 -1
  113. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +22 -0
  114. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js.map +1 -0
  115. package/build-module/components/sidebar-navigation-screen-patterns/index.js +14 -2
  116. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  117. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js +14 -19
  118. package/build-module/components/sidebar-navigation-screen-template/home-template-details.js.map +1 -1
  119. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +16 -4
  120. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  121. package/build-module/store/selectors.js +4 -5
  122. package/build-module/store/selectors.js.map +1 -1
  123. package/build-module/utils/constants.js +1 -1
  124. package/build-module/utils/constants.js.map +1 -1
  125. package/build-style/style-rtl.css +35 -2
  126. package/build-style/style.css +35 -2
  127. package/package.json +40 -40
  128. package/src/components/add-new-pattern/index.js +7 -10
  129. package/src/components/global-styles/font-library-modal/collection-font-details.js +1 -1
  130. package/src/components/global-styles/font-library-modal/context.js +36 -38
  131. package/src/components/global-styles/font-library-modal/font-collection.js +41 -12
  132. package/src/components/global-styles/font-library-modal/index.js +16 -6
  133. package/src/components/global-styles/font-library-modal/installed-fonts.js +36 -6
  134. package/src/components/global-styles/font-library-modal/local-fonts.js +65 -23
  135. package/src/components/global-styles/font-library-modal/resolvers.js +1 -1
  136. package/src/components/global-styles/font-library-modal/style.scss +18 -1
  137. package/src/components/global-styles/font-library-modal/upload-fonts.js +20 -0
  138. package/src/components/global-styles/font-library-modal/utils/fonts-outline.js +4 -3
  139. package/src/components/global-styles/font-library-modal/utils/get-notice-from-response.js +62 -0
  140. package/src/components/global-styles/font-library-modal/utils/index.js +5 -1
  141. package/src/components/global-styles/font-library-modal/utils/test/makeFormDataFromFontFamilies.spec.js +1 -1
  142. package/src/components/page-patterns/grid.js +1 -1
  143. package/src/components/page-patterns/patterns-list.js +1 -1
  144. package/src/components/page-patterns/use-patterns.js +7 -3
  145. package/src/components/page-template-parts/index.js +14 -1
  146. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +1 -1
  147. package/src/components/sidebar-edit-mode/template-panel/hooks.js +97 -0
  148. package/src/components/sidebar-edit-mode/template-panel/pattern-categories.js +18 -16
  149. package/src/components/sidebar-edit-mode/template-panel/replace-template-button.js +89 -0
  150. package/src/components/sidebar-edit-mode/template-panel/style.scss +18 -0
  151. package/src/components/sidebar-edit-mode/template-panel/template-actions.js +27 -12
  152. package/src/components/sidebar-edit-mode/template-panel/template-areas.js +1 -1
  153. package/src/components/sidebar-navigation-screen/style.scss +0 -1
  154. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js +5 -8
  155. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +5 -9
  156. package/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +11 -5
  157. package/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js +32 -0
  158. package/src/components/sidebar-navigation-screen-patterns/index.js +25 -4
  159. package/src/components/sidebar-navigation-screen-template/home-template-details.js +27 -35
  160. package/src/components/sidebar-navigation-screen-templates-browse/index.js +12 -4
  161. package/src/store/selectors.js +9 -10
  162. package/src/utils/constants.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","PanelRow","useSelect","useDispatch","store","coreStore","useDebounce","noticesStore","decodeEntities","PATTERN_TYPES","unescapeString","arg","unescapeTerm","term","name","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","id","PatternCategories","post","_taxonomy$labels$sing","slug","values","setValues","search","setSearch","debouncedSearch","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","_post$_links","_post$_links2","getEntityRecords","getTaxonomy","hasFinishedResolution","_taxonomy","_termIds","wp_pattern_category","length","query","include","join","_links","rest_base","termIds","searchResults","newValues","suggestions","saveEntityRecord","editEntityRecord","invalidateResolution","createErrorNotice","findOrCreateTerm","newTerm","throwOnError","error","code","data","term_id","onUpdateTerms","newTermIds","user","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","Promise","all","then","newTerms","newAvailableTerms","concat","catch","message","type","singularName","labels","singular_name","termAddedLabel","termRemovedLabel","removeTermLabel","createElement","initialOpen","title","__next40pxDefaultSize","value","onInputChange","maxSuggestions","label","messages","added","removed","remove","tokenizeOnBlur"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/pattern-categories.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, PanelRow } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport { PATTERN_TYPES } from '../../../utils/constants';\n\nexport const unescapeString = ( arg ) => {\n\treturn decodeEntities( arg );\n};\n\n/**\n * Returns a term object with name unescaped.\n *\n * @param {Object} term The term object to unescape.\n *\n * @return {Object} Term object with name property unescaped.\n */\nexport const unescapeTerm = ( term ) => {\n\treturn {\n\t\t...term,\n\t\tname: unescapeString( term.name ),\n\t};\n};\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nexport default function PatternCategories( { post } ) {\n\tconst slug = 'wp_pattern_category';\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds =\n\t\t\t\tpost?.wp_pattern_category?.length > 0\n\t\t\t\t\t? post?.wp_pattern_category\n\t\t\t\t\t: EMPTY_ARRAY;\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds?.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds?.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug, post ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { saveEntityRecord, editEntityRecord, invalidateResolution } =\n\t\tuseDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst newTerm = await saveEntityRecord( 'taxonomy', slug, term, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\treturn unescapeTerm( newTerm );\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: term.name,\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditEntityRecord( 'postType', PATTERN_TYPES.user, post.id, {\n\t\t\twp_pattern_category: newTermIds,\n\t\t} );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( { name: termName } )\n\t\t\t)\n\t\t)\n\t\t\t.then( ( newTerms ) => {\n\t\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\t\treturn onUpdateTerms(\n\t\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t\t);\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t} );\n\t}\n\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<PanelRow initialOpen={ true } title={ __( 'Categories' ) }>\n\t\t\t<FormTokenField\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ __( 'Pattern categories' ) }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t\ttokenizeOnBlur\n\t\t\t/>\n\t\t</PanelRow>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","FlexBlock","PanelRow","useSelect","useDispatch","store","coreStore","useDebounce","noticesStore","decodeEntities","PATTERN_TYPES","unescapeString","arg","unescapeTerm","term","name","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","id","PatternCategories","post","_taxonomy$labels$sing","slug","values","setValues","search","setSearch","debouncedSearch","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","_post$_links","_post$_links2","getEntityRecords","getTaxonomy","hasFinishedResolution","_taxonomy","_termIds","wp_pattern_category","length","query","include","join","_links","rest_base","termIds","searchResults","newValues","suggestions","saveEntityRecord","editEntityRecord","invalidateResolution","createErrorNotice","findOrCreateTerm","newTerm","throwOnError","error","code","data","term_id","onUpdateTerms","newTermIds","user","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","Promise","all","then","newTerms","newAvailableTerms","concat","catch","message","type","singularName","labels","singular_name","termAddedLabel","termRemovedLabel","removeTermLabel","createElement","initialOpen","title","__next40pxDefaultSize","value","onInputChange","maxSuggestions","label","messages","added","removed","remove","tokenizeOnBlur"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/pattern-categories.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, FlexBlock, PanelRow } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport { PATTERN_TYPES } from '../../../utils/constants';\n\nexport const unescapeString = ( arg ) => {\n\treturn decodeEntities( arg );\n};\n\n/**\n * Returns a term object with name unescaped.\n *\n * @param {Object} term The term object to unescape.\n *\n * @return {Object} Term object with name property unescaped.\n */\nexport const unescapeTerm = ( term ) => {\n\treturn {\n\t\t...term,\n\t\tname: unescapeString( term.name ),\n\t};\n};\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nexport default function PatternCategories( { post } ) {\n\tconst slug = 'wp_pattern_category';\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds =\n\t\t\t\tpost?.wp_pattern_category?.length > 0\n\t\t\t\t\t? post?.wp_pattern_category\n\t\t\t\t\t: EMPTY_ARRAY;\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds?.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds?.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug, post ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { saveEntityRecord, editEntityRecord, invalidateResolution } =\n\t\tuseDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst newTerm = await saveEntityRecord( 'taxonomy', slug, term, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\treturn unescapeTerm( newTerm );\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: term.name,\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditEntityRecord( 'postType', PATTERN_TYPES.user, post.id, {\n\t\t\twp_pattern_category: newTermIds,\n\t\t} );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( { name: termName } )\n\t\t\t)\n\t\t)\n\t\t\t.then( ( newTerms ) => {\n\t\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\t\treturn onUpdateTerms(\n\t\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t\t);\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t} );\n\t}\n\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<PanelRow initialOpen={ true } title={ __( 'Categories' ) }>\n\t\t\t<FlexBlock>\n\t\t\t\t<FormTokenField\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tvalue={ values }\n\t\t\t\t\tsuggestions={ suggestions }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\t\tlabel={ __( 'Pattern categories' ) }\n\t\t\t\t\tmessages={ {\n\t\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t\t} }\n\t\t\t\t\ttokenizeOnBlur\n\t\t\t\t/>\n\t\t\t</FlexBlock>\n\t\t</PanelRow>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,EAAEC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AACjD,SAASC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,oBAAoB;AACjE,SAASC,cAAc,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,uBAAuB;AAC3E,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AACzD,SAASC,WAAW,QAAQ,oBAAoB;AAChD,SAASF,KAAK,IAAIG,YAAY,QAAQ,oBAAoB;AAC1D,SAASC,cAAc,QAAQ,0BAA0B;;AAEzD;AACA;AACA;AACA,SAASC,aAAa,QAAQ,0BAA0B;AAExD,OAAO,MAAMC,cAAc,GAAKC,GAAG,IAAM;EACxC,OAAOH,cAAc,CAAEG,GAAI,CAAC;AAC7B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAKC,IAAI,IAAM;EACvC,OAAO;IACN,GAAGA,IAAI;IACPC,IAAI,EAAEJ,cAAc,CAAEG,IAAI,CAACC,IAAK;EACjC,CAAC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAG,EAAE;;AAEtB;AACA;AACA;AACA,MAAMC,qBAAqB,GAAG,EAAE;AAChC,MAAMC,aAAa,GAAG;EACrBC,QAAQ,EAAEF,qBAAqB;EAC/BG,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACV,CAAC;AAED,MAAMC,cAAc,GAAGA,CAAEC,KAAK,EAAEC,KAAK,KACpCb,cAAc,CAAEY,KAAM,CAAC,CAACE,WAAW,CAAC,CAAC,KACrCd,cAAc,CAAEa,KAAM,CAAC,CAACC,WAAW,CAAC,CAAC;AAEtC,MAAMC,cAAc,GAAGA,CAAEC,KAAK,EAAEC,KAAK,KAAM;EAC1C,OAAOD,KAAK,CAACE,GAAG,CACbC,QAAQ,IACTF,KAAK,CAACG,IAAI,CAAIjB,IAAI,IAAMQ,cAAc,CAAER,IAAI,CAACC,IAAI,EAAEe,QAAS,CAAE,CAAC,CAACE,EAClE,CAAC;AACF,CAAC;AAED,eAAe,SAASC,iBAAiBA,CAAE;EAAEC;AAAK,CAAC,EAAG;EAAA,IAAAC,qBAAA;EACrD,MAAMC,IAAI,GAAG,qBAAqB;EAClC,MAAM,CAAEC,MAAM,EAAEC,SAAS,CAAE,GAAGvC,QAAQ,CAAE,EAAG,CAAC;EAC5C,MAAM,CAAEwC,MAAM,EAAEC,SAAS,CAAE,GAAGzC,QAAQ,CAAE,EAAG,CAAC;EAC5C,MAAM0C,eAAe,GAAGlC,WAAW,CAAEiC,SAAS,EAAE,GAAI,CAAC;EAErD,MAAM;IACLZ,KAAK;IACLc,QAAQ;IACRC,eAAe;IACfC,eAAe;IACfC;EACD,CAAC,GAAG1C,SAAS,CACV2C,MAAM,IAAM;IAAA,IAAAC,YAAA,EAAAC,aAAA;IACb,MAAM;MAAEC,gBAAgB;MAAEC,WAAW;MAAEC;IAAsB,CAAC,GAC7DL,MAAM,CAAExC,SAAU,CAAC;IACpB,MAAM8C,SAAS,GAAGF,WAAW,CAAEd,IAAK,CAAC;IACrC,MAAMiB,QAAQ,GACbnB,IAAI,EAAEoB,mBAAmB,EAAEC,MAAM,GAAG,CAAC,GAClCrB,IAAI,EAAEoB,mBAAmB,GACzBtC,WAAW;IACf,MAAMwC,KAAK,GAAG;MACb,GAAGtC,aAAa;MAChBuC,OAAO,EAAEJ,QAAQ,EAAEK,IAAI,CAAE,GAAI,CAAC;MAC9BvC,QAAQ,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;MACNyB,eAAe,EAAEQ,SAAS,IAAAL,YAAA,GACvBb,IAAI,CAACyB,MAAM,GACX,mBAAmB,GAAGP,SAAS,CAACQ,SAAS,CACxC,cAAAb,YAAA,cAAAA,YAAA,GAAI,KAAK,GACV,KAAK;MACRJ,eAAe,EAAES,SAAS,IAAAJ,aAAA,GACvBd,IAAI,CAACyB,MAAM,GACX,mBAAmB,GAAGP,SAAS,CAACQ,SAAS,CACxC,cAAAZ,aAAA,cAAAA,aAAA,GAAI,KAAK,GACV,KAAK;MACRN,QAAQ,EAAEU,SAAS;MACnBS,OAAO,EAAER,QAAQ;MACjBzB,KAAK,EAAEyB,QAAQ,EAAEE,MAAM,GACpBN,gBAAgB,CAAE,UAAU,EAAEb,IAAI,EAAEoB,KAAM,CAAC,GAC3CxC,WAAW;MACd6B,gBAAgB,EAAEM,qBAAqB,CAAE,kBAAkB,EAAE,CAC5D,UAAU,EACVf,IAAI,EACJoB,KAAK,CACJ;IACH,CAAC;EACF,CAAC,EACD,CAAEpB,IAAI,EAAEF,IAAI,CACb,CAAC;EAED,MAAM;IAAE4B;EAAc,CAAC,GAAG3D,SAAS,CAChC2C,MAAM,IAAM;IACb,MAAM;MAAEG;IAAiB,CAAC,GAAGH,MAAM,CAAExC,SAAU,CAAC;IAEhD,OAAO;MACNwD,aAAa,EAAE,CAAC,CAAEvB,MAAM,GACrBU,gBAAgB,CAAE,UAAU,EAAEb,IAAI,EAAE;QACpC,GAAGlB,aAAa;QAChBqB;MACA,CAAE,CAAC,GACHvB;IACJ,CAAC;EACF,CAAC,EACD,CAAEuB,MAAM,EAAEH,IAAI,CACf,CAAC;;EAED;EACA;EACA;EACAvC,SAAS,CAAE,MAAM;IAChB,IAAKgD,gBAAgB,EAAG;MACvB,MAAMkB,SAAS,GAAG,CAAEnC,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAGC,GAAG,CAAIf,IAAI,IAC5CH,cAAc,CAAEG,IAAI,CAACC,IAAK,CAC3B,CAAC;MAEDuB,SAAS,CAAEyB,SAAU,CAAC;IACvB;EACD,CAAC,EAAE,CAAEnC,KAAK,EAAEiB,gBAAgB,CAAG,CAAC;EAEhC,MAAMmB,WAAW,GAAGlE,OAAO,CAAE,MAAM;IAClC,OAAO,CAAEgE,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,EAAE,EAAGjC,GAAG,CAAIf,IAAI,IACzCH,cAAc,CAAEG,IAAI,CAACC,IAAK,CAC3B,CAAC;EACF,CAAC,EAAE,CAAE+C,aAAa,CAAG,CAAC;EAEtB,MAAM;IAAEG,gBAAgB;IAAEC,gBAAgB;IAAEC;EAAqB,CAAC,GACjE/D,WAAW,CAAEE,SAAU,CAAC;EACzB,MAAM;IAAE8D;EAAkB,CAAC,GAAGhE,WAAW,CAAEI,YAAa,CAAC;EAEzD,IAAK,CAAEmC,eAAe,EAAG;IACxB,OAAO,IAAI;EACZ;EAEA,eAAe0B,gBAAgBA,CAAEvD,IAAI,EAAG;IACvC,IAAI;MACH,MAAMwD,OAAO,GAAG,MAAML,gBAAgB,CAAE,UAAU,EAAE7B,IAAI,EAAEtB,IAAI,EAAE;QAC/DyD,YAAY,EAAE;MACf,CAAE,CAAC;MACHJ,oBAAoB,CAAE,0BAA2B,CAAC;MAClD,OAAOtD,YAAY,CAAEyD,OAAQ,CAAC;IAC/B,CAAC,CAAC,OAAQE,KAAK,EAAG;MACjB,IAAKA,KAAK,CAACC,IAAI,KAAK,aAAa,EAAG;QACnC,MAAMD,KAAK;MACZ;MAEA,OAAO;QACNxC,EAAE,EAAEwC,KAAK,CAACE,IAAI,CAACC,OAAO;QACtB5D,IAAI,EAAED,IAAI,CAACC;MACZ,CAAC;IACF;EACD;EAEA,SAAS6D,aAAaA,CAAEC,UAAU,EAAG;IACpCX,gBAAgB,CAAE,UAAU,EAAExD,aAAa,CAACoE,IAAI,EAAE5C,IAAI,CAACF,EAAE,EAAE;MAC1DsB,mBAAmB,EAAEuB;IACtB,CAAE,CAAC;EACJ;EAEA,SAASE,QAAQA,CAAEC,SAAS,EAAG;IAC9B,MAAMC,cAAc,GAAG,CACtB,IAAKrD,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAE,EAClB,IAAKkC,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,EAAE,CAAE,CAC1B;IACD,MAAMoB,WAAW,GAAGF,SAAS,CAACG,MAAM,CAAE,CAAEC,GAAG,EAAErE,IAAI,KAAM;MACtD,IACC,CAAEqE,GAAG,CAACC,IAAI,CAAIC,CAAC,IAAMA,CAAC,CAAC7D,WAAW,CAAC,CAAC,KAAKV,IAAI,CAACU,WAAW,CAAC,CAAE,CAAC,EAC5D;QACD2D,GAAG,CAACG,IAAI,CAAExE,IAAK,CAAC;MACjB;MACA,OAAOqE,GAAG;IACX,CAAC,EAAE,EAAG,CAAC;IAEP,MAAMI,YAAY,GAAGN,WAAW,CAACO,MAAM,CACpC3D,QAAQ,IACT,CAAEmD,cAAc,CAAClD,IAAI,CAAIjB,IAAI,IAC5BQ,cAAc,CAAER,IAAI,CAACC,IAAI,EAAEe,QAAS,CACrC,CACF,CAAC;;IAED;IACA;IACAQ,SAAS,CAAE4C,WAAY,CAAC;IAExB,IAAKM,YAAY,CAACjC,MAAM,KAAK,CAAC,EAAG;MAChC,OAAOqB,aAAa,CACnBlD,cAAc,CAAEwD,WAAW,EAAED,cAAe,CAC7C,CAAC;IACF;IAEA,IAAK,CAAErC,eAAe,EAAG;MACxB;IACD;IAEA8C,OAAO,CAACC,GAAG,CACVH,YAAY,CAAC3D,GAAG,CAAIC,QAAQ,IAC3BuC,gBAAgB,CAAE;MAAEtD,IAAI,EAAEe;IAAS,CAAE,CACtC,CACD,CAAC,CACC8D,IAAI,CAAIC,QAAQ,IAAM;MACtB,MAAMC,iBAAiB,GAAGb,cAAc,CAACc,MAAM,CAAEF,QAAS,CAAC;MAC3D,OAAOjB,aAAa,CACnBlD,cAAc,CAAEwD,WAAW,EAAEY,iBAAkB,CAChD,CAAC;IACF,CAAE,CAAC,CACFE,KAAK,CAAIxB,KAAK,IAAM;MACpBJ,iBAAiB,CAAEI,KAAK,CAACyB,OAAO,EAAE;QACjCC,IAAI,EAAE;MACP,CAAE,CAAC;IACJ,CAAE,CAAC;EACL;EAEA,MAAMC,YAAY,IAAAhE,qBAAA,GACjBO,QAAQ,EAAE0D,MAAM,EAAEC,aAAa,cAAAlE,qBAAA,cAAAA,qBAAA,GAC7BC,IAAI,KAAK,UAAU,GAAG1C,EAAE,CAAE,KAAM,CAAC,GAAGA,EAAE,CAAE,MAAO,CAAG;EACrD,MAAM4G,cAAc,GAAG1G,OAAO,EAC7B;EACAD,EAAE,CAAE,UAAU,EAAE,MAAO,CAAC,EACxBwG,YACD,CAAC;EACD,MAAMI,gBAAgB,GAAG3G,OAAO,EAC/B;EACAD,EAAE,CAAE,YAAY,EAAE,MAAO,CAAC,EAC1BwG,YACD,CAAC;EACD,MAAMK,eAAe,GAAG5G,OAAO,EAC9B;EACAD,EAAE,CAAE,WAAW,EAAE,MAAO,CAAC,EACzBwG,YACD,CAAC;EAED,OACCM,aAAA,CAACvG,QAAQ;IAACwG,WAAW,EAAG,IAAM;IAACC,KAAK,EAAGjH,EAAE,CAAE,YAAa;EAAG,GAC1D+G,aAAA,CAACxG,SAAS,QACTwG,aAAA,CAACzG,cAAc;IACd4G,qBAAqB;IACrBC,KAAK,EAAGxE,MAAQ;IAChB2B,WAAW,EAAGA,WAAa;IAC3Be,QAAQ,EAAGA,QAAU;IACrB+B,aAAa,EAAGrE,eAAiB;IACjCsE,cAAc,EAAG9F,qBAAuB;IACxC+F,KAAK,EAAGtH,EAAE,CAAE,oBAAqB,CAAG;IACpCuH,QAAQ,EAAG;MACVC,KAAK,EAAEZ,cAAc;MACrBa,OAAO,EAAEZ,gBAAgB;MACzBa,MAAM,EAAEZ;IACT,CAAG;IACHa,cAAc;EAAA,CACd,CACS,CACF,CAAC;AAEb"}
@@ -0,0 +1,76 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { useSelect, useDispatch } from '@wordpress/data';
6
+ import { useState } from '@wordpress/element';
7
+ import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
8
+ import { MenuItem, Modal } from '@wordpress/components';
9
+ import { __ } from '@wordpress/i18n';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
+ import { useAsyncList } from '@wordpress/compose';
12
+ import { serialize } from '@wordpress/blocks';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { store as editSiteStore } from '../../../store';
18
+ export default function ReplaceTemplateButton({
19
+ onClick,
20
+ availableTemplates
21
+ }) {
22
+ const {
23
+ editEntityRecord
24
+ } = useDispatch(coreStore);
25
+ const [showModal, setShowModal] = useState(false);
26
+ const onClose = () => {
27
+ setShowModal(false);
28
+ };
29
+ const {
30
+ postId,
31
+ postType
32
+ } = useSelect(select => {
33
+ return {
34
+ postId: select(editSiteStore).getEditedPostId(),
35
+ postType: select(editSiteStore).getEditedPostType()
36
+ };
37
+ }, []);
38
+ const onTemplateSelect = async selectedTemplate => {
39
+ onClose(); // Close the template suggestions modal first.
40
+ onClick();
41
+ await editEntityRecord('postType', postType, postId, {
42
+ blocks: selectedTemplate.blocks,
43
+ content: serialize(selectedTemplate.blocks)
44
+ });
45
+ };
46
+ if (!availableTemplates.length || availableTemplates.length < 1) {
47
+ return null;
48
+ }
49
+ return createElement(Fragment, null, createElement(MenuItem, {
50
+ info: __('Replace the contents of this template with another.'),
51
+ onClick: () => setShowModal(true)
52
+ }, __('Replace template')), showModal && createElement(Modal, {
53
+ title: __('Choose a template'),
54
+ onRequestClose: onClose,
55
+ overlayClassName: "edit-site-template-panel__replace-template-modal",
56
+ isFullScreen: true
57
+ }, createElement("div", {
58
+ className: "edit-site-template-panel__replace-template-modal__content"
59
+ }, createElement(TemplatesList, {
60
+ availableTemplates: availableTemplates,
61
+ onSelect: onTemplateSelect
62
+ }))));
63
+ }
64
+ function TemplatesList({
65
+ availableTemplates,
66
+ onSelect
67
+ }) {
68
+ const shownTemplates = useAsyncList(availableTemplates);
69
+ return createElement(BlockPatternsList, {
70
+ label: __('Templates'),
71
+ blockPatterns: availableTemplates,
72
+ shownPatterns: shownTemplates,
73
+ onClickPattern: onSelect
74
+ });
75
+ }
76
+ //# sourceMappingURL=replace-template-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useSelect","useDispatch","useState","__experimentalBlockPatternsList","BlockPatternsList","MenuItem","Modal","__","store","coreStore","useAsyncList","serialize","editSiteStore","ReplaceTemplateButton","onClick","availableTemplates","editEntityRecord","showModal","setShowModal","onClose","postId","postType","select","getEditedPostId","getEditedPostType","onTemplateSelect","selectedTemplate","blocks","content","length","createElement","Fragment","info","title","onRequestClose","overlayClassName","isFullScreen","className","TemplatesList","onSelect","shownTemplates","label","blockPatterns","shownPatterns","onClickPattern"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/replace-template-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';\nimport { MenuItem, Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useAsyncList } from '@wordpress/compose';\nimport { serialize } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\n\nexport default function ReplaceTemplateButton( {\n\tonClick,\n\tavailableTemplates,\n} ) {\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst [ showModal, setShowModal ] = useState( false );\n\tconst onClose = () => {\n\t\tsetShowModal( false );\n\t};\n\n\tconst { postId, postType } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tpostId: select( editSiteStore ).getEditedPostId(),\n\t\t\tpostType: select( editSiteStore ).getEditedPostType(),\n\t\t};\n\t}, [] );\n\n\tconst onTemplateSelect = async ( selectedTemplate ) => {\n\t\tonClose(); // Close the template suggestions modal first.\n\t\tonClick();\n\t\tawait editEntityRecord( 'postType', postType, postId, {\n\t\t\tblocks: selectedTemplate.blocks,\n\t\t\tcontent: serialize( selectedTemplate.blocks ),\n\t\t} );\n\t};\n\n\tif ( ! availableTemplates.length || availableTemplates.length < 1 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\tinfo={ __(\n\t\t\t\t\t'Replace the contents of this template with another.'\n\t\t\t\t) }\n\t\t\t\tonClick={ () => setShowModal( true ) }\n\t\t\t>\n\t\t\t\t{ __( 'Replace template' ) }\n\t\t\t</MenuItem>\n\n\t\t\t{ showModal && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ __( 'Choose a template' ) }\n\t\t\t\t\tonRequestClose={ onClose }\n\t\t\t\t\toverlayClassName=\"edit-site-template-panel__replace-template-modal\"\n\t\t\t\t\tisFullScreen\n\t\t\t\t>\n\t\t\t\t\t<div className=\"edit-site-template-panel__replace-template-modal__content\">\n\t\t\t\t\t\t<TemplatesList\n\t\t\t\t\t\t\tavailableTemplates={ availableTemplates }\n\t\t\t\t\t\t\tonSelect={ onTemplateSelect }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction TemplatesList( { availableTemplates, onSelect } ) {\n\tconst shownTemplates = useAsyncList( availableTemplates );\n\n\treturn (\n\t\t<BlockPatternsList\n\t\t\tlabel={ __( 'Templates' ) }\n\t\t\tblockPatterns={ availableTemplates }\n\t\t\tshownPatterns={ shownTemplates }\n\t\t\tonClickPattern={ onSelect }\n\t\t/>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,+BAA+B,IAAIC,iBAAiB,QAAQ,yBAAyB;AAC9F,SAASC,QAAQ,EAAEC,KAAK,QAAQ,uBAAuB;AACvD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AACzD,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,SAAS,QAAQ,mBAAmB;;AAE7C;AACA;AACA;AACA,SAASH,KAAK,IAAII,aAAa,QAAQ,gBAAgB;AAEvD,eAAe,SAASC,qBAAqBA,CAAE;EAC9CC,OAAO;EACPC;AACD,CAAC,EAAG;EACH,MAAM;IAAEC;EAAiB,CAAC,GAAGf,WAAW,CAAEQ,SAAU,CAAC;EACrD,MAAM,CAAEQ,SAAS,EAAEC,YAAY,CAAE,GAAGhB,QAAQ,CAAE,KAAM,CAAC;EACrD,MAAMiB,OAAO,GAAGA,CAAA,KAAM;IACrBD,YAAY,CAAE,KAAM,CAAC;EACtB,CAAC;EAED,MAAM;IAAEE,MAAM;IAAEC;EAAS,CAAC,GAAGrB,SAAS,CAAIsB,MAAM,IAAM;IACrD,OAAO;MACNF,MAAM,EAAEE,MAAM,CAAEV,aAAc,CAAC,CAACW,eAAe,CAAC,CAAC;MACjDF,QAAQ,EAAEC,MAAM,CAAEV,aAAc,CAAC,CAACY,iBAAiB,CAAC;IACrD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAMC,gBAAgB,GAAG,MAAQC,gBAAgB,IAAM;IACtDP,OAAO,CAAC,CAAC,CAAC,CAAC;IACXL,OAAO,CAAC,CAAC;IACT,MAAME,gBAAgB,CAAE,UAAU,EAAEK,QAAQ,EAAED,MAAM,EAAE;MACrDO,MAAM,EAAED,gBAAgB,CAACC,MAAM;MAC/BC,OAAO,EAAEjB,SAAS,CAAEe,gBAAgB,CAACC,MAAO;IAC7C,CAAE,CAAC;EACJ,CAAC;EAED,IAAK,CAAEZ,kBAAkB,CAACc,MAAM,IAAId,kBAAkB,CAACc,MAAM,GAAG,CAAC,EAAG;IACnE,OAAO,IAAI;EACZ;EAEA,OACCC,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACzB,QAAQ;IACR2B,IAAI,EAAGzB,EAAE,CACR,qDACD,CAAG;IACHO,OAAO,EAAGA,CAAA,KAAMI,YAAY,CAAE,IAAK;EAAG,GAEpCX,EAAE,CAAE,kBAAmB,CAChB,CAAC,EAETU,SAAS,IACVa,aAAA,CAACxB,KAAK;IACL2B,KAAK,EAAG1B,EAAE,CAAE,mBAAoB,CAAG;IACnC2B,cAAc,EAAGf,OAAS;IAC1BgB,gBAAgB,EAAC,kDAAkD;IACnEC,YAAY;EAAA,GAEZN,aAAA;IAAKO,SAAS,EAAC;EAA2D,GACzEP,aAAA,CAACQ,aAAa;IACbvB,kBAAkB,EAAGA,kBAAoB;IACzCwB,QAAQ,EAAGd;EAAkB,CAC7B,CACG,CACC,CAEP,CAAC;AAEL;AAEA,SAASa,aAAaA,CAAE;EAAEvB,kBAAkB;EAAEwB;AAAS,CAAC,EAAG;EAC1D,MAAMC,cAAc,GAAG9B,YAAY,CAAEK,kBAAmB,CAAC;EAEzD,OACCe,aAAA,CAAC1B,iBAAiB;IACjBqC,KAAK,EAAGlC,EAAE,CAAE,WAAY,CAAG;IAC3BmC,aAAa,EAAG3B,kBAAoB;IACpC4B,aAAa,EAAGH,cAAgB;IAChCI,cAAc,EAAGL;EAAU,CAC3B,CAAC;AAEJ"}
@@ -12,14 +12,17 @@ import { moreVertical } from '@wordpress/icons';
12
12
  */
13
13
  import { store as editSiteStore } from '../../../store';
14
14
  import isTemplateRevertable from '../../../utils/is-template-revertable';
15
+ import ReplaceTemplateButton from './replace-template-button';
16
+ import { useAvailablePatterns } from './hooks';
15
17
  export default function Actions({
16
18
  template
17
19
  }) {
20
+ const availablePatterns = useAvailablePatterns(template);
18
21
  const {
19
22
  revertTemplate
20
23
  } = useDispatch(editSiteStore);
21
24
  const isRevertable = isTemplateRevertable(template);
22
- if (!isRevertable) {
25
+ if (!isRevertable && (!availablePatterns.length || availablePatterns.length < 1)) {
23
26
  return null;
24
27
  }
25
28
  return createElement(DropdownMenu, {
@@ -31,12 +34,16 @@ export default function Actions({
31
34
  }
32
35
  }, ({
33
36
  onClose
34
- }) => createElement(MenuGroup, null, createElement(MenuItem, {
37
+ }) => createElement(MenuGroup, null, isRevertable && createElement(MenuItem, {
35
38
  info: __('Use the template as supplied by the theme.'),
36
39
  onClick: () => {
37
40
  revertTemplate(template);
38
41
  onClose();
39
42
  }
40
- }, __('Clear customizations'))));
43
+ }, __('Clear customizations')), createElement(ReplaceTemplateButton, {
44
+ availableTemplates: availablePatterns,
45
+ template: template,
46
+ onClick: onClose
47
+ })));
41
48
  }
42
49
  //# sourceMappingURL=template-actions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useDispatch","__","DropdownMenu","MenuGroup","MenuItem","moreVertical","store","editSiteStore","isTemplateRevertable","Actions","template","revertTemplate","isRevertable","createElement","icon","label","className","toggleProps","isSmall","onClose","info","onClick"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/template-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\nimport isTemplateRevertable from '../../../utils/is-template-revertable';\n\nexport default function Actions( { template } ) {\n\tconst { revertTemplate } = useDispatch( editSiteStore );\n\tconst isRevertable = isTemplateRevertable( template );\n\tif ( ! isRevertable ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<DropdownMenu\n\t\t\ticon={ moreVertical }\n\t\t\tlabel={ __( 'Actions' ) }\n\t\t\tclassName=\"edit-site-template-card__actions\"\n\t\t\ttoggleProps={ { isSmall: true } }\n\t\t>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<MenuGroup>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tinfo={ __(\n\t\t\t\t\t\t\t'Use the template as supplied by the theme.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\trevertTemplate( template );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Clear customizations' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,uBAAuB;AACzE,SAASC,YAAY,QAAQ,kBAAkB;;AAE/C;AACA;AACA;AACA,SAASC,KAAK,IAAIC,aAAa,QAAQ,gBAAgB;AACvD,OAAOC,oBAAoB,MAAM,uCAAuC;AAExE,eAAe,SAASC,OAAOA,CAAE;EAAEC;AAAS,CAAC,EAAG;EAC/C,MAAM;IAAEC;EAAe,CAAC,GAAGX,WAAW,CAAEO,aAAc,CAAC;EACvD,MAAMK,YAAY,GAAGJ,oBAAoB,CAAEE,QAAS,CAAC;EACrD,IAAK,CAAEE,YAAY,EAAG;IACrB,OAAO,IAAI;EACZ;EACA,OACCC,aAAA,CAACX,YAAY;IACZY,IAAI,EAAGT,YAAc;IACrBU,KAAK,EAAGd,EAAE,CAAE,SAAU,CAAG;IACzBe,SAAS,EAAC,kCAAkC;IAC5CC,WAAW,EAAG;MAAEC,OAAO,EAAE;IAAK;EAAG,GAE/B,CAAE;IAAEC;EAAQ,CAAC,KACdN,aAAA,CAACV,SAAS,QACTU,aAAA,CAACT,QAAQ;IACRgB,IAAI,EAAGnB,EAAE,CACR,4CACD,CAAG;IACHoB,OAAO,EAAGA,CAAA,KAAM;MACfV,cAAc,CAAED,QAAS,CAAC;MAC1BS,OAAO,CAAC,CAAC;IACV;EAAG,GAEDlB,EAAE,CAAE,sBAAuB,CACpB,CACA,CAEC,CAAC;AAEjB"}
1
+ {"version":3,"names":["useDispatch","__","DropdownMenu","MenuGroup","MenuItem","moreVertical","store","editSiteStore","isTemplateRevertable","ReplaceTemplateButton","useAvailablePatterns","Actions","template","availablePatterns","revertTemplate","isRevertable","length","createElement","icon","label","className","toggleProps","isSmall","onClose","info","onClick","availableTemplates"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/template-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\nimport isTemplateRevertable from '../../../utils/is-template-revertable';\nimport ReplaceTemplateButton from './replace-template-button';\nimport { useAvailablePatterns } from './hooks';\n\nexport default function Actions( { template } ) {\n\tconst availablePatterns = useAvailablePatterns( template );\n\tconst { revertTemplate } = useDispatch( editSiteStore );\n\tconst isRevertable = isTemplateRevertable( template );\n\n\tif (\n\t\t! isRevertable &&\n\t\t( ! availablePatterns.length || availablePatterns.length < 1 )\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\ticon={ moreVertical }\n\t\t\tlabel={ __( 'Actions' ) }\n\t\t\tclassName=\"edit-site-template-card__actions\"\n\t\t\ttoggleProps={ { isSmall: true } }\n\t\t>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<MenuGroup>\n\t\t\t\t\t{ isRevertable && (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tinfo={ __(\n\t\t\t\t\t\t\t\t'Use the template as supplied by the theme.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\trevertTemplate( template );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Clear customizations' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t) }\n\t\t\t\t\t<ReplaceTemplateButton\n\t\t\t\t\t\tavailableTemplates={ availablePatterns }\n\t\t\t\t\t\ttemplate={ template }\n\t\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t/>\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,uBAAuB;AACzE,SAASC,YAAY,QAAQ,kBAAkB;;AAE/C;AACA;AACA;AACA,SAASC,KAAK,IAAIC,aAAa,QAAQ,gBAAgB;AACvD,OAAOC,oBAAoB,MAAM,uCAAuC;AACxE,OAAOC,qBAAqB,MAAM,2BAA2B;AAC7D,SAASC,oBAAoB,QAAQ,SAAS;AAE9C,eAAe,SAASC,OAAOA,CAAE;EAAEC;AAAS,CAAC,EAAG;EAC/C,MAAMC,iBAAiB,GAAGH,oBAAoB,CAAEE,QAAS,CAAC;EAC1D,MAAM;IAAEE;EAAe,CAAC,GAAGd,WAAW,CAAEO,aAAc,CAAC;EACvD,MAAMQ,YAAY,GAAGP,oBAAoB,CAAEI,QAAS,CAAC;EAErD,IACC,CAAEG,YAAY,KACZ,CAAEF,iBAAiB,CAACG,MAAM,IAAIH,iBAAiB,CAACG,MAAM,GAAG,CAAC,CAAE,EAC7D;IACD,OAAO,IAAI;EACZ;EAEA,OACCC,aAAA,CAACf,YAAY;IACZgB,IAAI,EAAGb,YAAc;IACrBc,KAAK,EAAGlB,EAAE,CAAE,SAAU,CAAG;IACzBmB,SAAS,EAAC,kCAAkC;IAC5CC,WAAW,EAAG;MAAEC,OAAO,EAAE;IAAK;EAAG,GAE/B,CAAE;IAAEC;EAAQ,CAAC,KACdN,aAAA,CAACd,SAAS,QACPY,YAAY,IACbE,aAAA,CAACb,QAAQ;IACRoB,IAAI,EAAGvB,EAAE,CACR,4CACD,CAAG;IACHwB,OAAO,EAAGA,CAAA,KAAM;MACfX,cAAc,CAAEF,QAAS,CAAC;MAC1BW,OAAO,CAAC,CAAC;IACV;EAAG,GAEDtB,EAAE,CAAE,sBAAuB,CACpB,CACV,EACDgB,aAAA,CAACR,qBAAqB;IACrBiB,kBAAkB,EAAGb,iBAAmB;IACxCD,QAAQ,EAAGA,QAAU;IACrBa,OAAO,EAAGF;EAAS,CACnB,CACS,CAEC,CAAC;AAEjB"}
@@ -54,7 +54,7 @@ export default function TemplateAreas() {
54
54
  templatePart,
55
55
  block
56
56
  }) => createElement("li", {
57
- key: templatePart.slug
57
+ key: block.clientId
58
58
  }, createElement(TemplateAreaItem, {
59
59
  area: templatePart.area,
60
60
  clientId: block.clientId
@@ -1 +1 @@
1
- {"version":3,"names":["useSelect","useDispatch","Button","__experimentalHeading","Heading","store","editorStore","blockEditorStore","__","editSiteStore","TemplateAreaItem","area","clientId","selectBlock","toggleBlockHighlight","templatePartArea","select","defaultAreas","__experimentalGetDefaultTemplatePartAreas","find","defaultArea","highlightBlock","cancelHighlightBlock","createElement","className","icon","onMouseOver","onMouseLeave","onFocus","onBlur","onClick","label","TemplateAreas","templateParts","getCurrentTemplateTemplateParts","length","level","map","templatePart","block","key","slug"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/template-areas.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tButton,\n\t__experimentalHeading as Heading,\n} from '@wordpress/components';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\n\nfunction TemplateAreaItem( { area, clientId } ) {\n\tconst { selectBlock, toggleBlockHighlight } =\n\t\tuseDispatch( blockEditorStore );\n\tconst templatePartArea = useSelect(\n\t\t( select ) => {\n\t\t\tconst defaultAreas =\n\t\t\t\tselect(\n\t\t\t\t\teditorStore\n\t\t\t\t).__experimentalGetDefaultTemplatePartAreas();\n\n\t\t\treturn defaultAreas.find(\n\t\t\t\t( defaultArea ) => defaultArea.area === area\n\t\t\t);\n\t\t},\n\t\t[ area ]\n\t);\n\n\tconst highlightBlock = () => toggleBlockHighlight( clientId, true );\n\tconst cancelHighlightBlock = () => toggleBlockHighlight( clientId, false );\n\n\treturn (\n\t\t<Button\n\t\t\tclassName=\"edit-site-template-card__template-areas-item\"\n\t\t\ticon={ templatePartArea?.icon }\n\t\t\tonMouseOver={ highlightBlock }\n\t\t\tonMouseLeave={ cancelHighlightBlock }\n\t\t\tonFocus={ highlightBlock }\n\t\t\tonBlur={ cancelHighlightBlock }\n\t\t\tonClick={ () => {\n\t\t\t\tselectBlock( clientId );\n\t\t\t} }\n\t\t>\n\t\t\t{ templatePartArea?.label }\n\t\t</Button>\n\t);\n}\n\nexport default function TemplateAreas() {\n\tconst templateParts = useSelect(\n\t\t( select ) => select( editSiteStore ).getCurrentTemplateTemplateParts(),\n\t\t[]\n\t);\n\n\tif ( ! templateParts.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<section className=\"edit-site-template-card__template-areas\">\n\t\t\t<Heading\n\t\t\t\tlevel={ 3 }\n\t\t\t\tclassName=\"edit-site-template-card__template-areas-title\"\n\t\t\t>\n\t\t\t\t{ __( 'Areas' ) }\n\t\t\t</Heading>\n\n\t\t\t<ul className=\"edit-site-template-card__template-areas-list\">\n\t\t\t\t{ templateParts.map( ( { templatePart, block } ) => (\n\t\t\t\t\t<li key={ templatePart.slug }>\n\t\t\t\t\t\t<TemplateAreaItem\n\t\t\t\t\t\t\tarea={ templatePart.area }\n\t\t\t\t\t\t\tclientId={ block.clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</li>\n\t\t\t\t) ) }\n\t\t\t</ul>\n\t\t</section>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SACCC,MAAM,EACNC,qBAAqB,IAAIC,OAAO,QAC1B,uBAAuB;AAC9B,SAASC,KAAK,IAAIC,WAAW,QAAQ,mBAAmB;AACxD,SAASD,KAAK,IAAIE,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASH,KAAK,IAAII,aAAa,QAAQ,gBAAgB;AAEvD,SAASC,gBAAgBA,CAAE;EAAEC,IAAI;EAAEC;AAAS,CAAC,EAAG;EAC/C,MAAM;IAAEC,WAAW;IAAEC;EAAqB,CAAC,GAC1Cb,WAAW,CAAEM,gBAAiB,CAAC;EAChC,MAAMQ,gBAAgB,GAAGf,SAAS,CAC/BgB,MAAM,IAAM;IACb,MAAMC,YAAY,GACjBD,MAAM,CACLV,WACD,CAAC,CAACY,yCAAyC,CAAC,CAAC;IAE9C,OAAOD,YAAY,CAACE,IAAI,CACrBC,WAAW,IAAMA,WAAW,CAACT,IAAI,KAAKA,IACzC,CAAC;EACF,CAAC,EACD,CAAEA,IAAI,CACP,CAAC;EAED,MAAMU,cAAc,GAAGA,CAAA,KAAMP,oBAAoB,CAAEF,QAAQ,EAAE,IAAK,CAAC;EACnE,MAAMU,oBAAoB,GAAGA,CAAA,KAAMR,oBAAoB,CAAEF,QAAQ,EAAE,KAAM,CAAC;EAE1E,OACCW,aAAA,CAACrB,MAAM;IACNsB,SAAS,EAAC,8CAA8C;IACxDC,IAAI,EAAGV,gBAAgB,EAAEU,IAAM;IAC/BC,WAAW,EAAGL,cAAgB;IAC9BM,YAAY,EAAGL,oBAAsB;IACrCM,OAAO,EAAGP,cAAgB;IAC1BQ,MAAM,EAAGP,oBAAsB;IAC/BQ,OAAO,EAAGA,CAAA,KAAM;MACfjB,WAAW,CAAED,QAAS,CAAC;IACxB;EAAG,GAEDG,gBAAgB,EAAEgB,KACb,CAAC;AAEX;AAEA,eAAe,SAASC,aAAaA,CAAA,EAAG;EACvC,MAAMC,aAAa,GAAGjC,SAAS,CAC5BgB,MAAM,IAAMA,MAAM,CAAEP,aAAc,CAAC,CAACyB,+BAA+B,CAAC,CAAC,EACvE,EACD,CAAC;EAED,IAAK,CAAED,aAAa,CAACE,MAAM,EAAG;IAC7B,OAAO,IAAI;EACZ;EAEA,OACCZ,aAAA;IAASC,SAAS,EAAC;EAAyC,GAC3DD,aAAA,CAACnB,OAAO;IACPgC,KAAK,EAAG,CAAG;IACXZ,SAAS,EAAC;EAA+C,GAEvDhB,EAAE,CAAE,OAAQ,CACN,CAAC,EAEVe,aAAA;IAAIC,SAAS,EAAC;EAA8C,GACzDS,aAAa,CAACI,GAAG,CAAE,CAAE;IAAEC,YAAY;IAAEC;EAAM,CAAC,KAC7ChB,aAAA;IAAIiB,GAAG,EAAGF,YAAY,CAACG;EAAM,GAC5BlB,aAAA,CAACb,gBAAgB;IAChBC,IAAI,EAAG2B,YAAY,CAAC3B,IAAM;IAC1BC,QAAQ,EAAG2B,KAAK,CAAC3B;EAAU,CAC3B,CACE,CACH,CACC,CACI,CAAC;AAEZ"}
1
+ {"version":3,"names":["useSelect","useDispatch","Button","__experimentalHeading","Heading","store","editorStore","blockEditorStore","__","editSiteStore","TemplateAreaItem","area","clientId","selectBlock","toggleBlockHighlight","templatePartArea","select","defaultAreas","__experimentalGetDefaultTemplatePartAreas","find","defaultArea","highlightBlock","cancelHighlightBlock","createElement","className","icon","onMouseOver","onMouseLeave","onFocus","onBlur","onClick","label","TemplateAreas","templateParts","getCurrentTemplateTemplateParts","length","level","map","templatePart","block","key"],"sources":["@wordpress/edit-site/src/components/sidebar-edit-mode/template-panel/template-areas.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tButton,\n\t__experimentalHeading as Heading,\n} from '@wordpress/components';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../../store';\n\nfunction TemplateAreaItem( { area, clientId } ) {\n\tconst { selectBlock, toggleBlockHighlight } =\n\t\tuseDispatch( blockEditorStore );\n\tconst templatePartArea = useSelect(\n\t\t( select ) => {\n\t\t\tconst defaultAreas =\n\t\t\t\tselect(\n\t\t\t\t\teditorStore\n\t\t\t\t).__experimentalGetDefaultTemplatePartAreas();\n\n\t\t\treturn defaultAreas.find(\n\t\t\t\t( defaultArea ) => defaultArea.area === area\n\t\t\t);\n\t\t},\n\t\t[ area ]\n\t);\n\n\tconst highlightBlock = () => toggleBlockHighlight( clientId, true );\n\tconst cancelHighlightBlock = () => toggleBlockHighlight( clientId, false );\n\n\treturn (\n\t\t<Button\n\t\t\tclassName=\"edit-site-template-card__template-areas-item\"\n\t\t\ticon={ templatePartArea?.icon }\n\t\t\tonMouseOver={ highlightBlock }\n\t\t\tonMouseLeave={ cancelHighlightBlock }\n\t\t\tonFocus={ highlightBlock }\n\t\t\tonBlur={ cancelHighlightBlock }\n\t\t\tonClick={ () => {\n\t\t\t\tselectBlock( clientId );\n\t\t\t} }\n\t\t>\n\t\t\t{ templatePartArea?.label }\n\t\t</Button>\n\t);\n}\n\nexport default function TemplateAreas() {\n\tconst templateParts = useSelect(\n\t\t( select ) => select( editSiteStore ).getCurrentTemplateTemplateParts(),\n\t\t[]\n\t);\n\n\tif ( ! templateParts.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<section className=\"edit-site-template-card__template-areas\">\n\t\t\t<Heading\n\t\t\t\tlevel={ 3 }\n\t\t\t\tclassName=\"edit-site-template-card__template-areas-title\"\n\t\t\t>\n\t\t\t\t{ __( 'Areas' ) }\n\t\t\t</Heading>\n\n\t\t\t<ul className=\"edit-site-template-card__template-areas-list\">\n\t\t\t\t{ templateParts.map( ( { templatePart, block } ) => (\n\t\t\t\t\t<li key={ block.clientId }>\n\t\t\t\t\t\t<TemplateAreaItem\n\t\t\t\t\t\t\tarea={ templatePart.area }\n\t\t\t\t\t\t\tclientId={ block.clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</li>\n\t\t\t\t) ) }\n\t\t\t</ul>\n\t\t</section>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SACCC,MAAM,EACNC,qBAAqB,IAAIC,OAAO,QAC1B,uBAAuB;AAC9B,SAASC,KAAK,IAAIC,WAAW,QAAQ,mBAAmB;AACxD,SAASD,KAAK,IAAIE,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASH,KAAK,IAAII,aAAa,QAAQ,gBAAgB;AAEvD,SAASC,gBAAgBA,CAAE;EAAEC,IAAI;EAAEC;AAAS,CAAC,EAAG;EAC/C,MAAM;IAAEC,WAAW;IAAEC;EAAqB,CAAC,GAC1Cb,WAAW,CAAEM,gBAAiB,CAAC;EAChC,MAAMQ,gBAAgB,GAAGf,SAAS,CAC/BgB,MAAM,IAAM;IACb,MAAMC,YAAY,GACjBD,MAAM,CACLV,WACD,CAAC,CAACY,yCAAyC,CAAC,CAAC;IAE9C,OAAOD,YAAY,CAACE,IAAI,CACrBC,WAAW,IAAMA,WAAW,CAACT,IAAI,KAAKA,IACzC,CAAC;EACF,CAAC,EACD,CAAEA,IAAI,CACP,CAAC;EAED,MAAMU,cAAc,GAAGA,CAAA,KAAMP,oBAAoB,CAAEF,QAAQ,EAAE,IAAK,CAAC;EACnE,MAAMU,oBAAoB,GAAGA,CAAA,KAAMR,oBAAoB,CAAEF,QAAQ,EAAE,KAAM,CAAC;EAE1E,OACCW,aAAA,CAACrB,MAAM;IACNsB,SAAS,EAAC,8CAA8C;IACxDC,IAAI,EAAGV,gBAAgB,EAAEU,IAAM;IAC/BC,WAAW,EAAGL,cAAgB;IAC9BM,YAAY,EAAGL,oBAAsB;IACrCM,OAAO,EAAGP,cAAgB;IAC1BQ,MAAM,EAAGP,oBAAsB;IAC/BQ,OAAO,EAAGA,CAAA,KAAM;MACfjB,WAAW,CAAED,QAAS,CAAC;IACxB;EAAG,GAEDG,gBAAgB,EAAEgB,KACb,CAAC;AAEX;AAEA,eAAe,SAASC,aAAaA,CAAA,EAAG;EACvC,MAAMC,aAAa,GAAGjC,SAAS,CAC5BgB,MAAM,IAAMA,MAAM,CAAEP,aAAc,CAAC,CAACyB,+BAA+B,CAAC,CAAC,EACvE,EACD,CAAC;EAED,IAAK,CAAED,aAAa,CAACE,MAAM,EAAG;IAC7B,OAAO,IAAI;EACZ;EAEA,OACCZ,aAAA;IAASC,SAAS,EAAC;EAAyC,GAC3DD,aAAA,CAACnB,OAAO;IACPgC,KAAK,EAAG,CAAG;IACXZ,SAAS,EAAC;EAA+C,GAEvDhB,EAAE,CAAE,OAAQ,CACN,CAAC,EAEVe,aAAA;IAAIC,SAAS,EAAC;EAA8C,GACzDS,aAAa,CAACI,GAAG,CAAE,CAAE;IAAEC,YAAY;IAAEC;EAAM,CAAC,KAC7ChB,aAAA;IAAIiB,GAAG,EAAGD,KAAK,CAAC3B;EAAU,GACzBW,aAAA,CAACb,gBAAgB;IAChBC,IAAI,EAAG2B,YAAY,CAAC3B,IAAM;IAC1BC,QAAQ,EAAG2B,KAAK,CAAC3B;EAAU,CAC3B,CACE,CACH,CACC,CACI,CAAC;AAEZ"}
@@ -2,24 +2,26 @@ import { createElement } from "@wordpress/element";
2
2
  /**
3
3
  * WordPress dependencies
4
4
  */
5
- import { useEntityProp } from '@wordpress/core-data';
6
5
  import { __ } from '@wordpress/i18n';
7
6
 
8
7
  /**
9
8
  * Internal dependencies
10
9
  */
11
10
  import SidebarNavigationItem from '../sidebar-navigation-item';
11
+ import useNavigationMenuTitle from './use-navigation-menu-title';
12
12
  import { useLink } from '../routes/link';
13
13
  import { NAVIGATION_POST_TYPE } from '../../utils/constants';
14
14
  export default function TemplatePartNavigationMenuListItem({
15
15
  id
16
16
  }) {
17
- const [title] = useEntityProp('postType', NAVIGATION_POST_TYPE, 'title', id);
17
+ const title = useNavigationMenuTitle(id);
18
18
  const linkInfo = useLink({
19
19
  postId: id,
20
20
  postType: NAVIGATION_POST_TYPE
21
21
  });
22
- if (!id) return null;
22
+ if (!id || title === undefined) {
23
+ return null;
24
+ }
23
25
  return createElement(SidebarNavigationItem, {
24
26
  withChevron: true,
25
27
  ...linkInfo
@@ -1 +1 @@
1
- {"version":3,"names":["useEntityProp","__","SidebarNavigationItem","useLink","NAVIGATION_POST_TYPE","TemplatePartNavigationMenuListItem","id","title","linkInfo","postId","postType","createElement","withChevron"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEntityProp } from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport SidebarNavigationItem from '../sidebar-navigation-item';\nimport { useLink } from '../routes/link';\nimport { NAVIGATION_POST_TYPE } from '../../utils/constants';\n\nexport default function TemplatePartNavigationMenuListItem( { id } ) {\n\tconst [ title ] = useEntityProp(\n\t\t'postType',\n\t\tNAVIGATION_POST_TYPE,\n\t\t'title',\n\t\tid\n\t);\n\n\tconst linkInfo = useLink( {\n\t\tpostId: id,\n\t\tpostType: NAVIGATION_POST_TYPE,\n\t} );\n\n\tif ( ! id ) return null;\n\n\treturn (\n\t\t<SidebarNavigationItem withChevron { ...linkInfo }>\n\t\t\t{ title || __( '(no title)' ) }\n\t\t</SidebarNavigationItem>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,aAAa,QAAQ,sBAAsB;AACpD,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,SAASC,OAAO,QAAQ,gBAAgB;AACxC,SAASC,oBAAoB,QAAQ,uBAAuB;AAE5D,eAAe,SAASC,kCAAkCA,CAAE;EAAEC;AAAG,CAAC,EAAG;EACpE,MAAM,CAAEC,KAAK,CAAE,GAAGP,aAAa,CAC9B,UAAU,EACVI,oBAAoB,EACpB,OAAO,EACPE,EACD,CAAC;EAED,MAAME,QAAQ,GAAGL,OAAO,CAAE;IACzBM,MAAM,EAAEH,EAAE;IACVI,QAAQ,EAAEN;EACX,CAAE,CAAC;EAEH,IAAK,CAAEE,EAAE,EAAG,OAAO,IAAI;EAEvB,OACCK,aAAA,CAACT,qBAAqB;IAACU,WAAW;IAAA,GAAMJ;EAAQ,GAC7CD,KAAK,IAAIN,EAAE,CAAE,YAAa,CACN,CAAC;AAE1B"}
1
+ {"version":3,"names":["__","SidebarNavigationItem","useNavigationMenuTitle","useLink","NAVIGATION_POST_TYPE","TemplatePartNavigationMenuListItem","id","title","linkInfo","postId","postType","undefined","createElement","withChevron"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu-list-item.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport SidebarNavigationItem from '../sidebar-navigation-item';\nimport useNavigationMenuTitle from './use-navigation-menu-title';\nimport { useLink } from '../routes/link';\nimport { NAVIGATION_POST_TYPE } from '../../utils/constants';\n\nexport default function TemplatePartNavigationMenuListItem( { id } ) {\n\tconst title = useNavigationMenuTitle( id );\n\n\tconst linkInfo = useLink( {\n\t\tpostId: id,\n\t\tpostType: NAVIGATION_POST_TYPE,\n\t} );\n\n\tif ( ! id || title === undefined ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SidebarNavigationItem withChevron { ...linkInfo }>\n\t\t\t{ title || __( '(no title)' ) }\n\t\t</SidebarNavigationItem>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,OAAOC,sBAAsB,MAAM,6BAA6B;AAChE,SAASC,OAAO,QAAQ,gBAAgB;AACxC,SAASC,oBAAoB,QAAQ,uBAAuB;AAE5D,eAAe,SAASC,kCAAkCA,CAAE;EAAEC;AAAG,CAAC,EAAG;EACpE,MAAMC,KAAK,GAAGL,sBAAsB,CAAEI,EAAG,CAAC;EAE1C,MAAME,QAAQ,GAAGL,OAAO,CAAE;IACzBM,MAAM,EAAEH,EAAE;IACVI,QAAQ,EAAEN;EACX,CAAE,CAAC;EAEH,IAAK,CAAEE,EAAE,IAAIC,KAAK,KAAKI,SAAS,EAAG;IAClC,OAAO,IAAI;EACZ;EAEA,OACCC,aAAA,CAACX,qBAAqB;IAACY,WAAW;IAAA,GAAML;EAAQ,GAC7CD,KAAK,IAAIP,EAAE,CAAE,YAAa,CACN,CAAC;AAE1B"}
@@ -4,18 +4,19 @@ import { createElement, Fragment } from "@wordpress/element";
4
4
  */
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import { __experimentalHeading as Heading } from '@wordpress/components';
7
- import { useEntityProp } from '@wordpress/core-data';
8
7
 
9
8
  /**
10
9
  * Internal dependencies
11
10
  */
12
11
  import NavigationMenuEditor from '../sidebar-navigation-screen-navigation-menu/navigation-menu-editor';
13
- import { NAVIGATION_POST_TYPE } from '../../utils/constants';
12
+ import useNavigationMenuTitle from './use-navigation-menu-title';
14
13
  export default function TemplatePartNavigationMenu({
15
14
  id
16
15
  }) {
17
- const [title] = useEntityProp('postType', NAVIGATION_POST_TYPE, 'title', id);
18
- if (!id) return null;
16
+ const title = useNavigationMenuTitle(id);
17
+ if (!id || title === undefined) {
18
+ return null;
19
+ }
19
20
  return createElement(Fragment, null, createElement(Heading, {
20
21
  className: "edit-site-sidebar-navigation-screen-template-part-navigation-menu__title",
21
22
  size: "11",
@@ -1 +1 @@
1
- {"version":3,"names":["__","__experimentalHeading","Heading","useEntityProp","NavigationMenuEditor","NAVIGATION_POST_TYPE","TemplatePartNavigationMenu","id","title","createElement","Fragment","className","size","upperCase","weight","navigationMenuId"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { useEntityProp } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport NavigationMenuEditor from '../sidebar-navigation-screen-navigation-menu/navigation-menu-editor';\nimport { NAVIGATION_POST_TYPE } from '../../utils/constants';\n\nexport default function TemplatePartNavigationMenu( { id } ) {\n\tconst [ title ] = useEntityProp(\n\t\t'postType',\n\t\tNAVIGATION_POST_TYPE,\n\t\t'title',\n\t\tid\n\t);\n\n\tif ( ! id ) return null;\n\n\treturn (\n\t\t<>\n\t\t\t<Heading\n\t\t\t\tclassName=\"edit-site-sidebar-navigation-screen-template-part-navigation-menu__title\"\n\t\t\t\tsize=\"11\"\n\t\t\t\tupperCase={ true }\n\t\t\t\tweight={ 500 }\n\t\t\t>\n\t\t\t\t{ title || __( 'Navigation' ) }\n\t\t\t</Heading>\n\t\t\t<NavigationMenuEditor navigationMenuId={ id } />\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,qBAAqB,IAAIC,OAAO,QAAQ,uBAAuB;AACxE,SAASC,aAAa,QAAQ,sBAAsB;;AAEpD;AACA;AACA;AACA,OAAOC,oBAAoB,MAAM,qEAAqE;AACtG,SAASC,oBAAoB,QAAQ,uBAAuB;AAE5D,eAAe,SAASC,0BAA0BA,CAAE;EAAEC;AAAG,CAAC,EAAG;EAC5D,MAAM,CAAEC,KAAK,CAAE,GAAGL,aAAa,CAC9B,UAAU,EACVE,oBAAoB,EACpB,OAAO,EACPE,EACD,CAAC;EAED,IAAK,CAAEA,EAAE,EAAG,OAAO,IAAI;EAEvB,OACCE,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACP,OAAO;IACPS,SAAS,EAAC,0EAA0E;IACpFC,IAAI,EAAC,IAAI;IACTC,SAAS,EAAG,IAAM;IAClBC,MAAM,EAAG;EAAK,GAEZN,KAAK,IAAIR,EAAE,CAAE,YAAa,CACpB,CAAC,EACVS,aAAA,CAACL,oBAAoB;IAACW,gBAAgB,EAAGR;EAAI,CAAE,CAC9C,CAAC;AAEL"}
1
+ {"version":3,"names":["__","__experimentalHeading","Heading","NavigationMenuEditor","useNavigationMenuTitle","TemplatePartNavigationMenu","id","title","undefined","createElement","Fragment","className","size","upperCase","weight","navigationMenuId"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport NavigationMenuEditor from '../sidebar-navigation-screen-navigation-menu/navigation-menu-editor';\nimport useNavigationMenuTitle from './use-navigation-menu-title';\n\nexport default function TemplatePartNavigationMenu( { id } ) {\n\tconst title = useNavigationMenuTitle( id );\n\n\tif ( ! id || title === undefined ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Heading\n\t\t\t\tclassName=\"edit-site-sidebar-navigation-screen-template-part-navigation-menu__title\"\n\t\t\t\tsize=\"11\"\n\t\t\t\tupperCase={ true }\n\t\t\t\tweight={ 500 }\n\t\t\t>\n\t\t\t\t{ title || __( 'Navigation' ) }\n\t\t\t</Heading>\n\t\t\t<NavigationMenuEditor navigationMenuId={ id } />\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,qBAAqB,IAAIC,OAAO,QAAQ,uBAAuB;;AAExE;AACA;AACA;AACA,OAAOC,oBAAoB,MAAM,qEAAqE;AACtG,OAAOC,sBAAsB,MAAM,6BAA6B;AAEhE,eAAe,SAASC,0BAA0BA,CAAE;EAAEC;AAAG,CAAC,EAAG;EAC5D,MAAMC,KAAK,GAAGH,sBAAsB,CAAEE,EAAG,CAAC;EAE1C,IAAK,CAAEA,EAAE,IAAIC,KAAK,KAAKC,SAAS,EAAG;IAClC,OAAO,IAAI;EACZ;EAEA,OACCC,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACP,OAAO;IACPS,SAAS,EAAC,0EAA0E;IACpFC,IAAI,EAAC,IAAI;IACTC,SAAS,EAAG,IAAM;IAClBC,MAAM,EAAG;EAAK,GAEZP,KAAK,IAAIP,EAAE,CAAE,YAAa,CACpB,CAAC,EACVS,aAAA,CAACN,oBAAoB;IAACY,gBAAgB,EAAGT;EAAI,CAAE,CAC9C,CAAC;AAEL"}
@@ -10,6 +10,12 @@ import { parse } from '@wordpress/blocks';
10
10
  import TemplatePartNavigationMenus from './template-part-navigation-menus';
11
11
  import useEditedEntityRecord from '../use-edited-entity-record';
12
12
  import { TEMPLATE_PART_POST_TYPE } from '../../utils/constants';
13
+ function getBlocksFromRecord(record) {
14
+ if (record?.blocks) {
15
+ return record?.blocks;
16
+ }
17
+ return record?.content && typeof record.content !== 'function' ? parse(record.content) : [];
18
+ }
13
19
 
14
20
  /**
15
21
  * Retrieves a list of specific blocks from a given tree of blocks.
@@ -54,7 +60,7 @@ export default function useNavigationMenuContent(postType, postId) {
54
60
  if (postType !== TEMPLATE_PART_POST_TYPE) {
55
61
  return;
56
62
  }
57
- const blocks = record?.content && typeof record.content !== 'function' ? parse(record.content) : [];
63
+ const blocks = getBlocksFromRecord(record);
58
64
  const navigationBlocks = getBlocksOfTypeFromBlocks('core/navigation', blocks);
59
65
  if (!navigationBlocks.length) {
60
66
  return;
@@ -1 +1 @@
1
- {"version":3,"names":["parse","TemplatePartNavigationMenus","useEditedEntityRecord","TEMPLATE_PART_POST_TYPE","getBlocksOfTypeFromBlocks","targetBlockType","blocks","length","findInBlocks","_blocks","navigationBlocks","block","name","push","innerBlocks","innerNavigationBlocks","useNavigationMenuContent","postType","postId","record","content","navigationMenuIds","map","attributes","ref","uniqueNavigationMenuIds","Set","filter","menuId","createElement","menus"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartNavigationMenus from './template-part-navigation-menus';\nimport useEditedEntityRecord from '../use-edited-entity-record';\nimport { TEMPLATE_PART_POST_TYPE } from '../../utils/constants';\n\n/**\n * Retrieves a list of specific blocks from a given tree of blocks.\n *\n * @param {string} targetBlockType The name of the block type to find.\n * @param {Array} blocks A list of blocks from a template part entity.\n *\n * @return {Array} A list of any navigation blocks found in the blocks.\n */\nfunction getBlocksOfTypeFromBlocks( targetBlockType, blocks ) {\n\tif ( ! targetBlockType || ! blocks?.length ) {\n\t\treturn [];\n\t}\n\n\tconst findInBlocks = ( _blocks ) => {\n\t\tif ( ! _blocks ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst navigationBlocks = [];\n\n\t\tfor ( const block of _blocks ) {\n\t\t\tif ( block.name === targetBlockType ) {\n\t\t\t\tnavigationBlocks.push( block );\n\t\t\t}\n\n\t\t\tif ( block?.innerBlocks ) {\n\t\t\t\tconst innerNavigationBlocks = findInBlocks( block.innerBlocks );\n\n\t\t\t\tif ( innerNavigationBlocks.length ) {\n\t\t\t\t\tnavigationBlocks.push( ...innerNavigationBlocks );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn navigationBlocks;\n\t};\n\n\treturn findInBlocks( blocks );\n}\n\nexport default function useNavigationMenuContent( postType, postId ) {\n\tconst { record } = useEditedEntityRecord( postType, postId );\n\n\t// Only managing navigation menus in template parts is supported\n\t// to match previous behaviour. This could potentially be expanded\n\t// to patterns as well.\n\tif ( postType !== TEMPLATE_PART_POST_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst blocks =\n\t\trecord?.content && typeof record.content !== 'function'\n\t\t\t? parse( record.content )\n\t\t\t: [];\n\n\tconst navigationBlocks = getBlocksOfTypeFromBlocks(\n\t\t'core/navigation',\n\t\tblocks\n\t);\n\n\tif ( ! navigationBlocks.length ) {\n\t\treturn;\n\t}\n\n\tconst navigationMenuIds = navigationBlocks?.map(\n\t\t( block ) => block.attributes.ref\n\t);\n\n\t// Dedupe the Navigation blocks, as you can have multiple navigation blocks in the template.\n\t// Also, filter out undefined values, as blocks don't have an id when initially added.\n\tconst uniqueNavigationMenuIds = [ ...new Set( navigationMenuIds ) ].filter(\n\t\t( menuId ) => menuId\n\t);\n\n\tif ( ! uniqueNavigationMenuIds?.length ) {\n\t\treturn;\n\t}\n\n\treturn <TemplatePartNavigationMenus menus={ uniqueNavigationMenuIds } />;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,KAAK,QAAQ,mBAAmB;;AAEzC;AACA;AACA;AACA,OAAOC,2BAA2B,MAAM,kCAAkC;AAC1E,OAAOC,qBAAqB,MAAM,6BAA6B;AAC/D,SAASC,uBAAuB,QAAQ,uBAAuB;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,yBAAyBA,CAAEC,eAAe,EAAEC,MAAM,EAAG;EAC7D,IAAK,CAAED,eAAe,IAAI,CAAEC,MAAM,EAAEC,MAAM,EAAG;IAC5C,OAAO,EAAE;EACV;EAEA,MAAMC,YAAY,GAAKC,OAAO,IAAM;IACnC,IAAK,CAAEA,OAAO,EAAG;MAChB,OAAO,EAAE;IACV;IAEA,MAAMC,gBAAgB,GAAG,EAAE;IAE3B,KAAM,MAAMC,KAAK,IAAIF,OAAO,EAAG;MAC9B,IAAKE,KAAK,CAACC,IAAI,KAAKP,eAAe,EAAG;QACrCK,gBAAgB,CAACG,IAAI,CAAEF,KAAM,CAAC;MAC/B;MAEA,IAAKA,KAAK,EAAEG,WAAW,EAAG;QACzB,MAAMC,qBAAqB,GAAGP,YAAY,CAAEG,KAAK,CAACG,WAAY,CAAC;QAE/D,IAAKC,qBAAqB,CAACR,MAAM,EAAG;UACnCG,gBAAgB,CAACG,IAAI,CAAE,GAAGE,qBAAsB,CAAC;QAClD;MACD;IACD;IAEA,OAAOL,gBAAgB;EACxB,CAAC;EAED,OAAOF,YAAY,CAAEF,MAAO,CAAC;AAC9B;AAEA,eAAe,SAASU,wBAAwBA,CAAEC,QAAQ,EAAEC,MAAM,EAAG;EACpE,MAAM;IAAEC;EAAO,CAAC,GAAGjB,qBAAqB,CAAEe,QAAQ,EAAEC,MAAO,CAAC;;EAE5D;EACA;EACA;EACA,IAAKD,QAAQ,KAAKd,uBAAuB,EAAG;IAC3C;EACD;EAEA,MAAMG,MAAM,GACXa,MAAM,EAAEC,OAAO,IAAI,OAAOD,MAAM,CAACC,OAAO,KAAK,UAAU,GACpDpB,KAAK,CAAEmB,MAAM,CAACC,OAAQ,CAAC,GACvB,EAAE;EAEN,MAAMV,gBAAgB,GAAGN,yBAAyB,CACjD,iBAAiB,EACjBE,MACD,CAAC;EAED,IAAK,CAAEI,gBAAgB,CAACH,MAAM,EAAG;IAChC;EACD;EAEA,MAAMc,iBAAiB,GAAGX,gBAAgB,EAAEY,GAAG,CAC5CX,KAAK,IAAMA,KAAK,CAACY,UAAU,CAACC,GAC/B,CAAC;;EAED;EACA;EACA,MAAMC,uBAAuB,GAAG,CAAE,GAAG,IAAIC,GAAG,CAAEL,iBAAkB,CAAC,CAAE,CAACM,MAAM,CACvEC,MAAM,IAAMA,MACf,CAAC;EAED,IAAK,CAAEH,uBAAuB,EAAElB,MAAM,EAAG;IACxC;EACD;EAEA,OAAOsB,aAAA,CAAC5B,2BAA2B;IAAC6B,KAAK,EAAGL;EAAyB,CAAE,CAAC;AACzE"}
1
+ {"version":3,"names":["parse","TemplatePartNavigationMenus","useEditedEntityRecord","TEMPLATE_PART_POST_TYPE","getBlocksFromRecord","record","blocks","content","getBlocksOfTypeFromBlocks","targetBlockType","length","findInBlocks","_blocks","navigationBlocks","block","name","push","innerBlocks","innerNavigationBlocks","useNavigationMenuContent","postType","postId","navigationMenuIds","map","attributes","ref","uniqueNavigationMenuIds","Set","filter","menuId","createElement","menus"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartNavigationMenus from './template-part-navigation-menus';\nimport useEditedEntityRecord from '../use-edited-entity-record';\nimport { TEMPLATE_PART_POST_TYPE } from '../../utils/constants';\n\nfunction getBlocksFromRecord( record ) {\n\tif ( record?.blocks ) {\n\t\treturn record?.blocks;\n\t}\n\n\treturn record?.content && typeof record.content !== 'function'\n\t\t? parse( record.content )\n\t\t: [];\n}\n\n/**\n * Retrieves a list of specific blocks from a given tree of blocks.\n *\n * @param {string} targetBlockType The name of the block type to find.\n * @param {Array} blocks A list of blocks from a template part entity.\n *\n * @return {Array} A list of any navigation blocks found in the blocks.\n */\nfunction getBlocksOfTypeFromBlocks( targetBlockType, blocks ) {\n\tif ( ! targetBlockType || ! blocks?.length ) {\n\t\treturn [];\n\t}\n\n\tconst findInBlocks = ( _blocks ) => {\n\t\tif ( ! _blocks ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst navigationBlocks = [];\n\n\t\tfor ( const block of _blocks ) {\n\t\t\tif ( block.name === targetBlockType ) {\n\t\t\t\tnavigationBlocks.push( block );\n\t\t\t}\n\n\t\t\tif ( block?.innerBlocks ) {\n\t\t\t\tconst innerNavigationBlocks = findInBlocks( block.innerBlocks );\n\n\t\t\t\tif ( innerNavigationBlocks.length ) {\n\t\t\t\t\tnavigationBlocks.push( ...innerNavigationBlocks );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn navigationBlocks;\n\t};\n\n\treturn findInBlocks( blocks );\n}\n\nexport default function useNavigationMenuContent( postType, postId ) {\n\tconst { record } = useEditedEntityRecord( postType, postId );\n\n\t// Only managing navigation menus in template parts is supported\n\t// to match previous behaviour. This could potentially be expanded\n\t// to patterns as well.\n\tif ( postType !== TEMPLATE_PART_POST_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst blocks = getBlocksFromRecord( record );\n\tconst navigationBlocks = getBlocksOfTypeFromBlocks(\n\t\t'core/navigation',\n\t\tblocks\n\t);\n\n\tif ( ! navigationBlocks.length ) {\n\t\treturn;\n\t}\n\n\tconst navigationMenuIds = navigationBlocks?.map(\n\t\t( block ) => block.attributes.ref\n\t);\n\n\t// Dedupe the Navigation blocks, as you can have multiple navigation blocks in the template.\n\t// Also, filter out undefined values, as blocks don't have an id when initially added.\n\tconst uniqueNavigationMenuIds = [ ...new Set( navigationMenuIds ) ].filter(\n\t\t( menuId ) => menuId\n\t);\n\n\tif ( ! uniqueNavigationMenuIds?.length ) {\n\t\treturn;\n\t}\n\n\treturn <TemplatePartNavigationMenus menus={ uniqueNavigationMenuIds } />;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,KAAK,QAAQ,mBAAmB;;AAEzC;AACA;AACA;AACA,OAAOC,2BAA2B,MAAM,kCAAkC;AAC1E,OAAOC,qBAAqB,MAAM,6BAA6B;AAC/D,SAASC,uBAAuB,QAAQ,uBAAuB;AAE/D,SAASC,mBAAmBA,CAAEC,MAAM,EAAG;EACtC,IAAKA,MAAM,EAAEC,MAAM,EAAG;IACrB,OAAOD,MAAM,EAAEC,MAAM;EACtB;EAEA,OAAOD,MAAM,EAAEE,OAAO,IAAI,OAAOF,MAAM,CAACE,OAAO,KAAK,UAAU,GAC3DP,KAAK,CAAEK,MAAM,CAACE,OAAQ,CAAC,GACvB,EAAE;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,yBAAyBA,CAAEC,eAAe,EAAEH,MAAM,EAAG;EAC7D,IAAK,CAAEG,eAAe,IAAI,CAAEH,MAAM,EAAEI,MAAM,EAAG;IAC5C,OAAO,EAAE;EACV;EAEA,MAAMC,YAAY,GAAKC,OAAO,IAAM;IACnC,IAAK,CAAEA,OAAO,EAAG;MAChB,OAAO,EAAE;IACV;IAEA,MAAMC,gBAAgB,GAAG,EAAE;IAE3B,KAAM,MAAMC,KAAK,IAAIF,OAAO,EAAG;MAC9B,IAAKE,KAAK,CAACC,IAAI,KAAKN,eAAe,EAAG;QACrCI,gBAAgB,CAACG,IAAI,CAAEF,KAAM,CAAC;MAC/B;MAEA,IAAKA,KAAK,EAAEG,WAAW,EAAG;QACzB,MAAMC,qBAAqB,GAAGP,YAAY,CAAEG,KAAK,CAACG,WAAY,CAAC;QAE/D,IAAKC,qBAAqB,CAACR,MAAM,EAAG;UACnCG,gBAAgB,CAACG,IAAI,CAAE,GAAGE,qBAAsB,CAAC;QAClD;MACD;IACD;IAEA,OAAOL,gBAAgB;EACxB,CAAC;EAED,OAAOF,YAAY,CAAEL,MAAO,CAAC;AAC9B;AAEA,eAAe,SAASa,wBAAwBA,CAAEC,QAAQ,EAAEC,MAAM,EAAG;EACpE,MAAM;IAAEhB;EAAO,CAAC,GAAGH,qBAAqB,CAAEkB,QAAQ,EAAEC,MAAO,CAAC;;EAE5D;EACA;EACA;EACA,IAAKD,QAAQ,KAAKjB,uBAAuB,EAAG;IAC3C;EACD;EAEA,MAAMG,MAAM,GAAGF,mBAAmB,CAAEC,MAAO,CAAC;EAC5C,MAAMQ,gBAAgB,GAAGL,yBAAyB,CACjD,iBAAiB,EACjBF,MACD,CAAC;EAED,IAAK,CAAEO,gBAAgB,CAACH,MAAM,EAAG;IAChC;EACD;EAEA,MAAMY,iBAAiB,GAAGT,gBAAgB,EAAEU,GAAG,CAC5CT,KAAK,IAAMA,KAAK,CAACU,UAAU,CAACC,GAC/B,CAAC;;EAED;EACA;EACA,MAAMC,uBAAuB,GAAG,CAAE,GAAG,IAAIC,GAAG,CAAEL,iBAAkB,CAAC,CAAE,CAACM,MAAM,CACvEC,MAAM,IAAMA,MACf,CAAC;EAED,IAAK,CAAEH,uBAAuB,EAAEhB,MAAM,EAAG;IACxC;EACD;EAEA,OAAOoB,aAAA,CAAC7B,2BAA2B;IAAC8B,KAAK,EAAGL;EAAyB,CAAE,CAAC;AACzE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { store as coreStore } from '@wordpress/core-data';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { NAVIGATION_POST_TYPE } from '../../utils/constants';
11
+ export default function useNavigationMenuTitle(id) {
12
+ return useSelect(select => {
13
+ if (!id) {
14
+ return undefined;
15
+ }
16
+ const editedRecord = select(coreStore).getEditedEntityRecord('postType', NAVIGATION_POST_TYPE, id);
17
+
18
+ // Do not display a 'trashed' navigation menu.
19
+ return editedRecord.status === 'trash' ? undefined : editedRecord.title;
20
+ }, [id]);
21
+ }
22
+ //# sourceMappingURL=use-navigation-menu-title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useSelect","store","coreStore","NAVIGATION_POST_TYPE","useNavigationMenuTitle","id","select","undefined","editedRecord","getEditedEntityRecord","status","title"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-title.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { NAVIGATION_POST_TYPE } from '../../utils/constants';\n\nexport default function useNavigationMenuTitle( id ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! id ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst editedRecord = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tNAVIGATION_POST_TYPE,\n\t\t\t\tid\n\t\t\t);\n\n\t\t\t// Do not display a 'trashed' navigation menu.\n\t\t\treturn editedRecord.status === 'trash'\n\t\t\t\t? undefined\n\t\t\t\t: editedRecord.title;\n\t\t},\n\t\t[ id ]\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASC,oBAAoB,QAAQ,uBAAuB;AAE5D,eAAe,SAASC,sBAAsBA,CAAEC,EAAE,EAAG;EACpD,OAAOL,SAAS,CACbM,MAAM,IAAM;IACb,IAAK,CAAED,EAAE,EAAG;MACX,OAAOE,SAAS;IACjB;IAEA,MAAMC,YAAY,GAAGF,MAAM,CAAEJ,SAAU,CAAC,CAACO,qBAAqB,CAC7D,UAAU,EACVN,oBAAoB,EACpBE,EACD,CAAC;;IAED;IACA,OAAOG,YAAY,CAACE,MAAM,KAAK,OAAO,GACnCH,SAAS,GACTC,YAAY,CAACG,KAAK;EACtB,CAAC,EACD,CAAEN,EAAE,CACL,CAAC;AACF"}
@@ -7,6 +7,8 @@ import { useViewportMatch } from '@wordpress/compose';
7
7
  import { getTemplatePartIcon } from '@wordpress/editor';
8
8
  import { __ } from '@wordpress/i18n';
9
9
  import { getQueryArgs } from '@wordpress/url';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
+ import { useSelect } from '@wordpress/data';
10
12
  import { file } from '@wordpress/icons';
11
13
 
12
14
  /**
@@ -20,6 +22,7 @@ import { PATTERN_DEFAULT_CATEGORY, PATTERN_TYPES, TEMPLATE_PART_POST_TYPE } from
20
22
  import { useLink } from '../routes/link';
21
23
  import usePatternCategories from './use-pattern-categories';
22
24
  import useTemplatePartAreas from './use-template-part-areas';
25
+ import { store as editSiteStore } from '../../store';
23
26
  function TemplatePartGroup({
24
27
  areas,
25
28
  currentArea,
@@ -78,18 +81,27 @@ export default function SidebarNavigationScreenPatterns() {
78
81
  patternCategories,
79
82
  hasPatterns
80
83
  } = usePatternCategories();
84
+ const isBlockBasedTheme = useSelect(select => select(coreStore).getCurrentTheme()?.is_block_theme, []);
85
+ const isTemplatePartsMode = useSelect(select => {
86
+ const settings = select(editSiteStore).getSettings();
87
+ return !!settings.supportsTemplatePartsMode;
88
+ }, []);
81
89
  const templatePartsLink = useLink({
82
- path: '/wp_template_part/all'
90
+ path: '/wp_template_part/all',
91
+ // If a classic theme that supports template parts accessed
92
+ // the Patterns page directly, preserve that state in the URL.
93
+ didAccessPatternsPage: !isBlockBasedTheme && isTemplatePartsMode ? 1 : undefined
83
94
  });
84
95
  const footer = !isMobileViewport ? createElement(ItemGroup, null, createElement(SidebarNavigationItem, {
85
96
  as: "a",
86
97
  href: "edit.php?post_type=wp_block",
87
98
  withChevron: true
88
- }, __('Manage all of my patterns')), createElement(SidebarNavigationItem, {
99
+ }, __('Manage all of my patterns')), (isBlockBasedTheme || isTemplatePartsMode) && createElement(SidebarNavigationItem, {
89
100
  withChevron: true,
90
101
  ...templatePartsLink
91
102
  }, __('Manage all template parts'))) : undefined;
92
103
  return createElement(SidebarNavigationScreen, {
104
+ isRoot: !isBlockBasedTheme,
93
105
  title: __('Patterns'),
94
106
  description: __('Manage what patterns are available when editing the site.'),
95
107
  actions: createElement(AddNewPattern, null),
@@ -1 +1 @@
1
- {"version":3,"names":["__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalHeading","Heading","useViewportMatch","getTemplatePartIcon","__","getQueryArgs","file","AddNewPattern","SidebarNavigationItem","SidebarNavigationScreen","CategoryItem","PATTERN_DEFAULT_CATEGORY","PATTERN_TYPES","TEMPLATE_PART_POST_TYPE","useLink","usePatternCategories","useTemplatePartAreas","TemplatePartGroup","areas","currentArea","currentType","createElement","Fragment","className","level","Object","entries","map","area","label","templateParts","key","count","length","icon","id","type","isActive","PatternCategoriesGroup","categories","currentCategory","category","name","theme","user","SidebarNavigationScreenPatterns","isMobileViewport","categoryType","categoryId","window","location","href","templatePartAreas","hasTemplateParts","isLoading","patternCategories","hasPatterns","templatePartsLink","path","footer","as","withChevron","undefined","title","description","actions","content"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-patterns/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHeading as Heading,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { getTemplatePartIcon } from '@wordpress/editor';\nimport { __ } from '@wordpress/i18n';\nimport { getQueryArgs } from '@wordpress/url';\nimport { file } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport AddNewPattern from '../add-new-pattern';\nimport SidebarNavigationItem from '../sidebar-navigation-item';\nimport SidebarNavigationScreen from '../sidebar-navigation-screen';\nimport CategoryItem from './category-item';\nimport {\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_TYPES,\n\tTEMPLATE_PART_POST_TYPE,\n} from '../../utils/constants';\nimport { useLink } from '../routes/link';\nimport usePatternCategories from './use-pattern-categories';\nimport useTemplatePartAreas from './use-template-part-areas';\n\nfunction TemplatePartGroup( { areas, currentArea, currentType } ) {\n\treturn (\n\t\t<>\n\t\t\t<div className=\"edit-site-sidebar-navigation-screen-patterns__group-header\">\n\t\t\t\t<Heading level={ 2 }>{ __( 'Template parts' ) }</Heading>\n\t\t\t</div>\n\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t{ Object.entries( areas ).map(\n\t\t\t\t\t( [ area, { label, templateParts } ] ) => (\n\t\t\t\t\t\t<CategoryItem\n\t\t\t\t\t\t\tkey={ area }\n\t\t\t\t\t\t\tcount={ templateParts?.length }\n\t\t\t\t\t\t\ticon={ getTemplatePartIcon( area ) }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tid={ area }\n\t\t\t\t\t\t\ttype={ TEMPLATE_PART_POST_TYPE }\n\t\t\t\t\t\t\tisActive={\n\t\t\t\t\t\t\t\tcurrentArea === area &&\n\t\t\t\t\t\t\t\tcurrentType === TEMPLATE_PART_POST_TYPE\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t) }\n\t\t\t</ItemGroup>\n\t\t</>\n\t);\n}\n\nfunction PatternCategoriesGroup( {\n\tcategories,\n\tcurrentCategory,\n\tcurrentType,\n} ) {\n\treturn (\n\t\t<>\n\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t<CategoryItem\n\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\tcount={ category.count }\n\t\t\t\t\t\tlabel={ category.label }\n\t\t\t\t\t\ticon={ file }\n\t\t\t\t\t\tid={ category.name }\n\t\t\t\t\t\ttype=\"pattern\"\n\t\t\t\t\t\tisActive={\n\t\t\t\t\t\t\tcurrentCategory === `${ category.name }` &&\n\t\t\t\t\t\t\t( currentType === PATTERN_TYPES.theme ||\n\t\t\t\t\t\t\t\tcurrentType === PATTERN_TYPES.user )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</ItemGroup>\n\t\t</>\n\t);\n}\n\nexport default function SidebarNavigationScreenPatterns() {\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst { categoryType, categoryId } = getQueryArgs( window.location.href );\n\tconst currentCategory = categoryId || PATTERN_DEFAULT_CATEGORY;\n\tconst currentType = categoryType || PATTERN_TYPES.theme;\n\n\tconst { templatePartAreas, hasTemplateParts, isLoading } =\n\t\tuseTemplatePartAreas();\n\tconst { patternCategories, hasPatterns } = usePatternCategories();\n\n\tconst templatePartsLink = useLink( { path: '/wp_template_part/all' } );\n\tconst footer = ! isMobileViewport ? (\n\t\t<ItemGroup>\n\t\t\t<SidebarNavigationItem\n\t\t\t\tas=\"a\"\n\t\t\t\thref=\"edit.php?post_type=wp_block\"\n\t\t\t\twithChevron\n\t\t\t>\n\t\t\t\t{ __( 'Manage all of my patterns' ) }\n\t\t\t</SidebarNavigationItem>\n\t\t\t<SidebarNavigationItem withChevron { ...templatePartsLink }>\n\t\t\t\t{ __( 'Manage all template parts' ) }\n\t\t\t</SidebarNavigationItem>\n\t\t</ItemGroup>\n\t) : undefined;\n\n\treturn (\n\t\t<SidebarNavigationScreen\n\t\t\ttitle={ __( 'Patterns' ) }\n\t\t\tdescription={ __(\n\t\t\t\t'Manage what patterns are available when editing the site.'\n\t\t\t) }\n\t\t\tactions={ <AddNewPattern /> }\n\t\t\tfooter={ footer }\n\t\t\tcontent={\n\t\t\t\t<>\n\t\t\t\t\t{ isLoading && __( 'Loading patterns…' ) }\n\t\t\t\t\t{ ! isLoading && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! hasTemplateParts && ! hasPatterns && (\n\t\t\t\t\t\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t\t\t\t\t\t<Item>\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'No template parts or patterns found'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ hasPatterns && (\n\t\t\t\t\t\t\t\t<PatternCategoriesGroup\n\t\t\t\t\t\t\t\t\tcategories={ patternCategories }\n\t\t\t\t\t\t\t\t\tcurrentCategory={ currentCategory }\n\t\t\t\t\t\t\t\t\tcurrentType={ currentType }\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{ hasTemplateParts && (\n\t\t\t\t\t\t\t\t<TemplatePartGroup\n\t\t\t\t\t\t\t\t\tareas={ templatePartAreas }\n\t\t\t\t\t\t\t\t\tcurrentArea={ currentCategory }\n\t\t\t\t\t\t\t\t\tcurrentType={ currentType }\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) }\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,uBAAuB,IAAIC,SAAS,EACpCC,kBAAkB,IAAIC,IAAI,EAC1BC,qBAAqB,IAAIC,OAAO,QAC1B,uBAAuB;AAC9B,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,mBAAmB,QAAQ,mBAAmB;AACvD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,IAAI,QAAQ,kBAAkB;;AAEvC;AACA;AACA;AACA,OAAOC,aAAa,MAAM,oBAAoB;AAC9C,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,OAAOC,uBAAuB,MAAM,8BAA8B;AAClE,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,SACCC,wBAAwB,EACxBC,aAAa,EACbC,uBAAuB,QACjB,uBAAuB;AAC9B,SAASC,OAAO,QAAQ,gBAAgB;AACxC,OAAOC,oBAAoB,MAAM,0BAA0B;AAC3D,OAAOC,oBAAoB,MAAM,2BAA2B;AAE5D,SAASC,iBAAiBA,CAAE;EAAEC,KAAK;EAAEC,WAAW;EAAEC;AAAY,CAAC,EAAG;EACjE,OACCC,aAAA,CAAAC,QAAA,QACCD,aAAA;IAAKE,SAAS,EAAC;EAA4D,GAC1EF,aAAA,CAACpB,OAAO;IAACuB,KAAK,EAAG;EAAG,GAAGpB,EAAE,CAAE,gBAAiB,CAAY,CACpD,CAAC,EACNiB,aAAA,CAACxB,SAAS;IAAC0B,SAAS,EAAC;EAAqD,GACvEE,MAAM,CAACC,OAAO,CAAER,KAAM,CAAC,CAACS,GAAG,CAC5B,CAAE,CAAEC,IAAI,EAAE;IAAEC,KAAK;IAAEC;EAAc,CAAC,CAAE,KACnCT,aAAA,CAACX,YAAY;IACZqB,GAAG,EAAGH,IAAM;IACZI,KAAK,EAAGF,aAAa,EAAEG,MAAQ;IAC/BC,IAAI,EAAG/B,mBAAmB,CAAEyB,IAAK,CAAG;IACpCC,KAAK,EAAGA,KAAO;IACfM,EAAE,EAAGP,IAAM;IACXQ,IAAI,EAAGvB,uBAAyB;IAChCwB,QAAQ,EACPlB,WAAW,KAAKS,IAAI,IACpBR,WAAW,KAAKP;EAChB,CACD,CAEH,CACU,CACV,CAAC;AAEL;AAEA,SAASyB,sBAAsBA,CAAE;EAChCC,UAAU;EACVC,eAAe;EACfpB;AACD,CAAC,EAAG;EACH,OACCC,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACxB,SAAS;IAAC0B,SAAS,EAAC;EAAqD,GACvEgB,UAAU,CAACZ,GAAG,CAAIc,QAAQ,IAC3BpB,aAAA,CAACX,YAAY;IACZqB,GAAG,EAAGU,QAAQ,CAACC,IAAM;IACrBV,KAAK,EAAGS,QAAQ,CAACT,KAAO;IACxBH,KAAK,EAAGY,QAAQ,CAACZ,KAAO;IACxBK,IAAI,EAAG5B,IAAM;IACb6B,EAAE,EAAGM,QAAQ,CAACC,IAAM;IACpBN,IAAI,EAAC,SAAS;IACdC,QAAQ,EACPG,eAAe,KAAM,GAAGC,QAAQ,CAACC,IAAM,EAAC,KACtCtB,WAAW,KAAKR,aAAa,CAAC+B,KAAK,IACpCvB,WAAW,KAAKR,aAAa,CAACgC,IAAI;EACnC,CACD,CACA,CACQ,CACV,CAAC;AAEL;AAEA,eAAe,SAASC,+BAA+BA,CAAA,EAAG;EACzD,MAAMC,gBAAgB,GAAG5C,gBAAgB,CAAE,QAAQ,EAAE,GAAI,CAAC;EAC1D,MAAM;IAAE6C,YAAY;IAAEC;EAAW,CAAC,GAAG3C,YAAY,CAAE4C,MAAM,CAACC,QAAQ,CAACC,IAAK,CAAC;EACzE,MAAMX,eAAe,GAAGQ,UAAU,IAAIrC,wBAAwB;EAC9D,MAAMS,WAAW,GAAG2B,YAAY,IAAInC,aAAa,CAAC+B,KAAK;EAEvD,MAAM;IAAES,iBAAiB;IAAEC,gBAAgB;IAAEC;EAAU,CAAC,GACvDtC,oBAAoB,CAAC,CAAC;EACvB,MAAM;IAAEuC,iBAAiB;IAAEC;EAAY,CAAC,GAAGzC,oBAAoB,CAAC,CAAC;EAEjE,MAAM0C,iBAAiB,GAAG3C,OAAO,CAAE;IAAE4C,IAAI,EAAE;EAAwB,CAAE,CAAC;EACtE,MAAMC,MAAM,GAAG,CAAEb,gBAAgB,GAChCzB,aAAA,CAACxB,SAAS,QACTwB,aAAA,CAACb,qBAAqB;IACrBoD,EAAE,EAAC,GAAG;IACNT,IAAI,EAAC,6BAA6B;IAClCU,WAAW;EAAA,GAETzD,EAAE,CAAE,2BAA4B,CACZ,CAAC,EACxBiB,aAAA,CAACb,qBAAqB;IAACqD,WAAW;IAAA,GAAMJ;EAAiB,GACtDrD,EAAE,CAAE,2BAA4B,CACZ,CACb,CAAC,GACT0D,SAAS;EAEb,OACCzC,aAAA,CAACZ,uBAAuB;IACvBsD,KAAK,EAAG3D,EAAE,CAAE,UAAW,CAAG;IAC1B4D,WAAW,EAAG5D,EAAE,CACf,2DACD,CAAG;IACH6D,OAAO,EAAG5C,aAAA,CAACd,aAAa,MAAE,CAAG;IAC7BoD,MAAM,EAAGA,MAAQ;IACjBO,OAAO,EACN7C,aAAA,CAAAC,QAAA,QACGgC,SAAS,IAAIlD,EAAE,CAAE,mBAAoB,CAAC,EACtC,CAAEkD,SAAS,IACZjC,aAAA,CAAAC,QAAA,QACG,CAAE+B,gBAAgB,IAAI,CAAEG,WAAW,IACpCnC,aAAA,CAACxB,SAAS;MAAC0B,SAAS,EAAC;IAAqD,GACzEF,aAAA,CAACtB,IAAI,QACFK,EAAE,CACH,qCACD,CACK,CACI,CACX,EACCoD,WAAW,IACZnC,aAAA,CAACiB,sBAAsB;MACtBC,UAAU,EAAGgB,iBAAmB;MAChCf,eAAe,EAAGA,eAAiB;MACnCpB,WAAW,EAAGA;IAAa,CAC3B,CACD,EACCiC,gBAAgB,IACjBhC,aAAA,CAACJ,iBAAiB;MACjBC,KAAK,EAAGkC,iBAAmB;MAC3BjC,WAAW,EAAGqB,eAAiB;MAC/BpB,WAAW,EAAGA;IAAa,CAC3B,CAED,CAEF;EACF,CACD,CAAC;AAEJ"}
1
+ {"version":3,"names":["__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalHeading","Heading","useViewportMatch","getTemplatePartIcon","__","getQueryArgs","store","coreStore","useSelect","file","AddNewPattern","SidebarNavigationItem","SidebarNavigationScreen","CategoryItem","PATTERN_DEFAULT_CATEGORY","PATTERN_TYPES","TEMPLATE_PART_POST_TYPE","useLink","usePatternCategories","useTemplatePartAreas","editSiteStore","TemplatePartGroup","areas","currentArea","currentType","createElement","Fragment","className","level","Object","entries","map","area","label","templateParts","key","count","length","icon","id","type","isActive","PatternCategoriesGroup","categories","currentCategory","category","name","theme","user","SidebarNavigationScreenPatterns","isMobileViewport","categoryType","categoryId","window","location","href","templatePartAreas","hasTemplateParts","isLoading","patternCategories","hasPatterns","isBlockBasedTheme","select","getCurrentTheme","is_block_theme","isTemplatePartsMode","settings","getSettings","supportsTemplatePartsMode","templatePartsLink","path","didAccessPatternsPage","undefined","footer","as","withChevron","isRoot","title","description","actions","content"],"sources":["@wordpress/edit-site/src/components/sidebar-navigation-screen-patterns/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHeading as Heading,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { getTemplatePartIcon } from '@wordpress/editor';\nimport { __ } from '@wordpress/i18n';\nimport { getQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\nimport { file } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport AddNewPattern from '../add-new-pattern';\nimport SidebarNavigationItem from '../sidebar-navigation-item';\nimport SidebarNavigationScreen from '../sidebar-navigation-screen';\nimport CategoryItem from './category-item';\nimport {\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_TYPES,\n\tTEMPLATE_PART_POST_TYPE,\n} from '../../utils/constants';\nimport { useLink } from '../routes/link';\nimport usePatternCategories from './use-pattern-categories';\nimport useTemplatePartAreas from './use-template-part-areas';\nimport { store as editSiteStore } from '../../store';\n\nfunction TemplatePartGroup( { areas, currentArea, currentType } ) {\n\treturn (\n\t\t<>\n\t\t\t<div className=\"edit-site-sidebar-navigation-screen-patterns__group-header\">\n\t\t\t\t<Heading level={ 2 }>{ __( 'Template parts' ) }</Heading>\n\t\t\t</div>\n\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t{ Object.entries( areas ).map(\n\t\t\t\t\t( [ area, { label, templateParts } ] ) => (\n\t\t\t\t\t\t<CategoryItem\n\t\t\t\t\t\t\tkey={ area }\n\t\t\t\t\t\t\tcount={ templateParts?.length }\n\t\t\t\t\t\t\ticon={ getTemplatePartIcon( area ) }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tid={ area }\n\t\t\t\t\t\t\ttype={ TEMPLATE_PART_POST_TYPE }\n\t\t\t\t\t\t\tisActive={\n\t\t\t\t\t\t\t\tcurrentArea === area &&\n\t\t\t\t\t\t\t\tcurrentType === TEMPLATE_PART_POST_TYPE\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t) }\n\t\t\t</ItemGroup>\n\t\t</>\n\t);\n}\n\nfunction PatternCategoriesGroup( {\n\tcategories,\n\tcurrentCategory,\n\tcurrentType,\n} ) {\n\treturn (\n\t\t<>\n\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t<CategoryItem\n\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\tcount={ category.count }\n\t\t\t\t\t\tlabel={ category.label }\n\t\t\t\t\t\ticon={ file }\n\t\t\t\t\t\tid={ category.name }\n\t\t\t\t\t\ttype=\"pattern\"\n\t\t\t\t\t\tisActive={\n\t\t\t\t\t\t\tcurrentCategory === `${ category.name }` &&\n\t\t\t\t\t\t\t( currentType === PATTERN_TYPES.theme ||\n\t\t\t\t\t\t\t\tcurrentType === PATTERN_TYPES.user )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</ItemGroup>\n\t\t</>\n\t);\n}\n\nexport default function SidebarNavigationScreenPatterns() {\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst { categoryType, categoryId } = getQueryArgs( window.location.href );\n\tconst currentCategory = categoryId || PATTERN_DEFAULT_CATEGORY;\n\tconst currentType = categoryType || PATTERN_TYPES.theme;\n\n\tconst { templatePartAreas, hasTemplateParts, isLoading } =\n\t\tuseTemplatePartAreas();\n\tconst { patternCategories, hasPatterns } = usePatternCategories();\n\tconst isBlockBasedTheme = useSelect(\n\t\t( select ) => select( coreStore ).getCurrentTheme()?.is_block_theme,\n\t\t[]\n\t);\n\tconst isTemplatePartsMode = useSelect( ( select ) => {\n\t\tconst settings = select( editSiteStore ).getSettings();\n\t\treturn !! settings.supportsTemplatePartsMode;\n\t}, [] );\n\n\tconst templatePartsLink = useLink( {\n\t\tpath: '/wp_template_part/all',\n\t\t// If a classic theme that supports template parts accessed\n\t\t// the Patterns page directly, preserve that state in the URL.\n\t\tdidAccessPatternsPage:\n\t\t\t! isBlockBasedTheme && isTemplatePartsMode ? 1 : undefined,\n\t} );\n\n\tconst footer = ! isMobileViewport ? (\n\t\t<ItemGroup>\n\t\t\t<SidebarNavigationItem\n\t\t\t\tas=\"a\"\n\t\t\t\thref=\"edit.php?post_type=wp_block\"\n\t\t\t\twithChevron\n\t\t\t>\n\t\t\t\t{ __( 'Manage all of my patterns' ) }\n\t\t\t</SidebarNavigationItem>\n\t\t\t{ ( isBlockBasedTheme || isTemplatePartsMode ) && (\n\t\t\t\t<SidebarNavigationItem withChevron { ...templatePartsLink }>\n\t\t\t\t\t{ __( 'Manage all template parts' ) }\n\t\t\t\t</SidebarNavigationItem>\n\t\t\t) }\n\t\t</ItemGroup>\n\t) : undefined;\n\n\treturn (\n\t\t<SidebarNavigationScreen\n\t\t\tisRoot={ ! isBlockBasedTheme }\n\t\t\ttitle={ __( 'Patterns' ) }\n\t\t\tdescription={ __(\n\t\t\t\t'Manage what patterns are available when editing the site.'\n\t\t\t) }\n\t\t\tactions={ <AddNewPattern /> }\n\t\t\tfooter={ footer }\n\t\t\tcontent={\n\t\t\t\t<>\n\t\t\t\t\t{ isLoading && __( 'Loading patterns…' ) }\n\t\t\t\t\t{ ! isLoading && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! hasTemplateParts && ! hasPatterns && (\n\t\t\t\t\t\t\t\t<ItemGroup className=\"edit-site-sidebar-navigation-screen-patterns__group\">\n\t\t\t\t\t\t\t\t\t<Item>\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'No template parts or patterns found'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ hasPatterns && (\n\t\t\t\t\t\t\t\t<PatternCategoriesGroup\n\t\t\t\t\t\t\t\t\tcategories={ patternCategories }\n\t\t\t\t\t\t\t\t\tcurrentCategory={ currentCategory }\n\t\t\t\t\t\t\t\t\tcurrentType={ currentType }\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{ hasTemplateParts && (\n\t\t\t\t\t\t\t\t<TemplatePartGroup\n\t\t\t\t\t\t\t\t\tareas={ templatePartAreas }\n\t\t\t\t\t\t\t\t\tcurrentArea={ currentCategory }\n\t\t\t\t\t\t\t\t\tcurrentType={ currentType }\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) }\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}