@wordpress/patterns 1.12.2 → 1.12.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 (31) hide show
  1. package/build/components/create-pattern-modal.js +6 -79
  2. package/build/components/create-pattern-modal.js.map +1 -1
  3. package/build/components/partial-syncing-controls.js +3 -3
  4. package/build/components/partial-syncing-controls.js.map +1 -1
  5. package/build/components/reset-overrides-control.js +6 -1
  6. package/build/components/reset-overrides-control.js.map +1 -1
  7. package/build/constants.js +4 -23
  8. package/build/constants.js.map +1 -1
  9. package/build/private-apis.js +2 -0
  10. package/build/private-apis.js.map +1 -1
  11. package/build/private-hooks.js +100 -0
  12. package/build/private-hooks.js.map +1 -0
  13. package/build-module/components/create-pattern-modal.js +7 -79
  14. package/build-module/components/create-pattern-modal.js.map +1 -1
  15. package/build-module/components/partial-syncing-controls.js +3 -3
  16. package/build-module/components/partial-syncing-controls.js.map +1 -1
  17. package/build-module/components/reset-overrides-control.js +6 -1
  18. package/build-module/components/reset-overrides-control.js.map +1 -1
  19. package/build-module/constants.js +4 -22
  20. package/build-module/constants.js.map +1 -1
  21. package/build-module/private-apis.js +2 -0
  22. package/build-module/private-apis.js.map +1 -1
  23. package/build-module/private-hooks.js +94 -0
  24. package/build-module/private-hooks.js.map +1 -0
  25. package/package.json +7 -7
  26. package/src/components/create-pattern-modal.js +5 -79
  27. package/src/components/partial-syncing-controls.js +3 -3
  28. package/src/components/reset-overrides-control.js +13 -1
  29. package/src/constants.js +4 -19
  30. package/src/private-apis.js +2 -0
  31. package/src/private-hooks.js +91 -0
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -11,13 +12,11 @@ var _i18n = require("@wordpress/i18n");
11
12
  var _element = require("@wordpress/element");
12
13
  var _data = require("@wordpress/data");
13
14
  var _notices = require("@wordpress/notices");
14
- var _coreData = require("@wordpress/core-data");
15
15
  var _constants = require("../constants");
16
16
  var _store = require("../store");
17
- var _categorySelector = _interopRequireWildcard(require("./category-selector"));
17
+ var _categorySelector = _interopRequireDefault(require("./category-selector"));
18
+ var _privateHooks = require("../private-hooks");
18
19
  var _lockUnlock = require("../lock-unlock");
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
20
  /**
22
21
  * WordPress dependencies
23
22
  */
@@ -26,10 +25,6 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
26
25
  * Internal dependencies
27
26
  */
28
27
 
29
- /**
30
- * Internal dependencies
31
- */
32
-
33
28
  function CreatePatternModal({
34
29
  className = 'patterns-menu-items__convert-modal',
35
30
  modalTitle = (0, _i18n.__)('Create pattern'),
@@ -60,49 +55,13 @@ function CreatePatternModalContents({
60
55
  const {
61
56
  createPattern
62
57
  } = (0, _lockUnlock.unlock)((0, _data.useDispatch)(_store.store));
63
- const {
64
- saveEntityRecord,
65
- invalidateResolution
66
- } = (0, _data.useDispatch)(_coreData.store);
67
58
  const {
68
59
  createErrorNotice
69
60
  } = (0, _data.useDispatch)(_notices.store);
70
61
  const {
71
- corePatternCategories,
72
- userPatternCategories
73
- } = (0, _data.useSelect)(select => {
74
- const {
75
- getUserPatternCategories,
76
- getBlockPatternCategories
77
- } = select(_coreData.store);
78
- return {
79
- corePatternCategories: getBlockPatternCategories(),
80
- userPatternCategories: getUserPatternCategories()
81
- };
82
- });
83
- const categoryMap = (0, _element.useMemo)(() => {
84
- // Merge the user and core pattern categories and remove any duplicates.
85
- const uniqueCategories = new Map();
86
- userPatternCategories.forEach(category => {
87
- uniqueCategories.set(category.label.toLowerCase(), {
88
- label: category.label,
89
- name: category.name,
90
- id: category.id
91
- });
92
- });
93
- corePatternCategories.forEach(category => {
94
- if (!uniqueCategories.has(category.label.toLowerCase()) &&
95
- // There are two core categories with `Post` label so explicitly remove the one with
96
- // the `query` slug to avoid any confusion.
97
- category.name !== 'query') {
98
- uniqueCategories.set(category.label.toLowerCase(), {
99
- label: category.label,
100
- name: category.name
101
- });
102
- }
103
- });
104
- return uniqueCategories;
105
- }, [userPatternCategories, corePatternCategories]);
62
+ categoryMap,
63
+ findOrCreateTerm
64
+ } = (0, _privateHooks.useAddPatternCategory)();
106
65
  async function onCreate(patternTitle, sync) {
107
66
  if (!title || isSaving) {
108
67
  return;
@@ -127,38 +86,6 @@ function CreatePatternModalContents({
127
86
  setTitle('');
128
87
  }
129
88
  }
130
-
131
- /**
132
- * @param {string} term
133
- * @return {Promise<number>} The pattern category id.
134
- */
135
- async function findOrCreateTerm(term) {
136
- try {
137
- const existingTerm = categoryMap.get(term.toLowerCase());
138
- if (existingTerm && existingTerm.id) {
139
- return existingTerm.id;
140
- }
141
- // If we have an existing core category we need to match the new user category to the
142
- // correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
143
- // category uses the singular `header` as the slug.
144
- const termData = existingTerm ? {
145
- name: existingTerm.label,
146
- slug: existingTerm.name
147
- } : {
148
- name: term
149
- };
150
- const newTerm = await saveEntityRecord('taxonomy', _categorySelector.CATEGORY_SLUG, termData, {
151
- throwOnError: true
152
- });
153
- invalidateResolution('getUserPatternCategories');
154
- return newTerm.id;
155
- } catch (error) {
156
- if (error.code !== 'term_exists') {
157
- throw error;
158
- }
159
- return error.data.term_id;
160
- }
161
- }
162
89
  return (0, _react.createElement)("form", {
163
90
  onSubmit: event => {
164
91
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_i18n","_element","_data","_notices","_coreData","_constants","_store","_categorySelector","_interopRequireWildcard","_lockUnlock","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","CreatePatternModal","className","modalTitle","__","restProps","_react","createElement","Modal","title","onRequestClose","onClose","overlayClassName","CreatePatternModalContents","confirmLabel","defaultCategories","content","onError","onSuccess","defaultSyncType","PATTERN_SYNC_TYPES","full","defaultTitle","syncType","setSyncType","useState","categoryTerms","setCategoryTerms","setTitle","isSaving","setIsSaving","createPattern","unlock","useDispatch","patternsStore","saveEntityRecord","invalidateResolution","coreStore","createErrorNotice","noticesStore","corePatternCategories","userPatternCategories","useSelect","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","useMemo","uniqueCategories","Map","forEach","category","label","toLowerCase","name","id","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","PATTERN_DEFAULT_CATEGORY","error","message","type","term","existingTerm","termData","slug","newTerm","CATEGORY_SLUG","throwOnError","code","data","term_id","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","value","onChange","placeholder","__nextHasNoMarginBottom","__next40pxDefaultSize","ToggleControl","_x","help","checked","unsynced","__experimentalHStack","justify","Button","variant","onClick","isBusy"],"sources":["@wordpress/patterns/src/components/create-pattern-modal.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useState, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { PATTERN_DEFAULT_CATEGORY, PATTERN_SYNC_TYPES } from '../constants';\n\n/**\n * Internal dependencies\n */\nimport { store as patternsStore } from '../store';\nimport CategorySelector, { CATEGORY_SLUG } from './category-selector';\nimport { unlock } from '../lock-unlock';\n\nexport default function CreatePatternModal( {\n\tclassName = 'patterns-menu-items__convert-modal',\n\tmodalTitle = __( 'Create pattern' ),\n\t...restProps\n} ) {\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ restProps.onClose }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<CreatePatternModalContents { ...restProps } />\n\t\t</Modal>\n\t);\n}\n\nexport function CreatePatternModalContents( {\n\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tcontent,\n\tonClose,\n\tonError,\n\tonSuccess,\n\tdefaultSyncType = PATTERN_SYNC_TYPES.full,\n\tdefaultTitle = '',\n} ) {\n\tconst [ syncType, setSyncType ] = useState( defaultSyncType );\n\tconst [ categoryTerms, setCategoryTerms ] = useState( defaultCategories );\n\tconst [ title, setTitle ] = useState( defaultTitle );\n\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst { createPattern } = unlock( useDispatch( patternsStore ) );\n\tconst { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tconst { corePatternCategories, userPatternCategories } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getUserPatternCategories, getBlockPatternCategories } =\n\t\t\t\tselect( coreStore );\n\n\t\t\treturn {\n\t\t\t\tcorePatternCategories: getBlockPatternCategories(),\n\t\t\t\tuserPatternCategories: getUserPatternCategories(),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst categoryMap = useMemo( () => {\n\t\t// Merge the user and core pattern categories and remove any duplicates.\n\t\tconst uniqueCategories = new Map();\n\t\tuserPatternCategories.forEach( ( category ) => {\n\t\t\tuniqueCategories.set( category.label.toLowerCase(), {\n\t\t\t\tlabel: category.label,\n\t\t\t\tname: category.name,\n\t\t\t\tid: category.id,\n\t\t\t} );\n\t\t} );\n\n\t\tcorePatternCategories.forEach( ( category ) => {\n\t\t\tif (\n\t\t\t\t! uniqueCategories.has( category.label.toLowerCase() ) &&\n\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\tcategory.name !== 'query'\n\t\t\t) {\n\t\t\t\tuniqueCategories.set( category.label.toLowerCase(), {\n\t\t\t\t\tlabel: category.label,\n\t\t\t\t\tname: category.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t\treturn uniqueCategories;\n\t}, [ userPatternCategories, corePatternCategories ] );\n\n\tasync function onCreate( patternTitle, sync ) {\n\t\tif ( ! title || isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSaving( true );\n\t\t\tconst categories = await Promise.all(\n\t\t\t\tcategoryTerms.map( ( termName ) =>\n\t\t\t\t\tfindOrCreateTerm( termName )\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tconst newPattern = await createPattern(\n\t\t\t\tpatternTitle,\n\t\t\t\tsync,\n\t\t\t\ttypeof content === 'function' ? content() : content,\n\t\t\t\tcategories\n\t\t\t);\n\t\t\tonSuccess( {\n\t\t\t\tpattern: newPattern,\n\t\t\t\tcategoryId: PATTERN_DEFAULT_CATEGORY,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-create',\n\t\t\t} );\n\t\t\tonError?.();\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t\tsetCategoryTerms( [] );\n\t\t\tsetTitle( '' );\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} term\n\t * @return {Promise<number>} The pattern category id.\n\t */\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst existingTerm = categoryMap.get( term.toLowerCase() );\n\t\t\tif ( existingTerm && existingTerm.id ) {\n\t\t\t\treturn existingTerm.id;\n\t\t\t}\n\t\t\t// If we have an existing core category we need to match the new user category to the\n\t\t\t// correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`\n\t\t\t// category uses the singular `header` as the slug.\n\t\t\tconst termData = existingTerm\n\t\t\t\t? { name: existingTerm.label, slug: existingTerm.name }\n\t\t\t\t: { name: term };\n\t\t\tconst newTerm = await saveEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\tCATEGORY_SLUG,\n\t\t\t\ttermData,\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\treturn newTerm.id;\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 error.data.term_id;\n\t\t}\n\t}\n\treturn (\n\t\t<form\n\t\t\tonSubmit={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonCreate( title, syncType );\n\t\t\t} }\n\t\t>\n\t\t\t<VStack spacing=\"5\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\tvalue={ title }\n\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t/>\n\t\t\t\t<CategorySelector\n\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t) }\n\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t) }\n\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t</Button>\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</form>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_components","require","_i18n","_element","_data","_notices","_constants","_store","_categorySelector","_interopRequireDefault","_privateHooks","_lockUnlock","CreatePatternModal","className","modalTitle","__","restProps","_react","createElement","Modal","title","onRequestClose","onClose","overlayClassName","CreatePatternModalContents","confirmLabel","defaultCategories","content","onError","onSuccess","defaultSyncType","PATTERN_SYNC_TYPES","full","defaultTitle","syncType","setSyncType","useState","categoryTerms","setCategoryTerms","setTitle","isSaving","setIsSaving","createPattern","unlock","useDispatch","patternsStore","createErrorNotice","noticesStore","categoryMap","findOrCreateTerm","useAddPatternCategory","onCreate","patternTitle","sync","categories","Promise","all","map","termName","newPattern","pattern","categoryId","PATTERN_DEFAULT_CATEGORY","error","message","type","id","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","label","value","onChange","placeholder","__nextHasNoMarginBottom","__next40pxDefaultSize","default","ToggleControl","_x","help","checked","unsynced","__experimentalHStack","justify","Button","variant","onClick","isBusy"],"sources":["@wordpress/patterns/src/components/create-pattern-modal.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tModal,\n\tButton,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tToggleControl,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { PATTERN_DEFAULT_CATEGORY, PATTERN_SYNC_TYPES } from '../constants';\nimport { store as patternsStore } from '../store';\nimport CategorySelector from './category-selector';\nimport { useAddPatternCategory } from '../private-hooks';\nimport { unlock } from '../lock-unlock';\n\nexport default function CreatePatternModal( {\n\tclassName = 'patterns-menu-items__convert-modal',\n\tmodalTitle = __( 'Create pattern' ),\n\t...restProps\n} ) {\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ restProps.onClose }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<CreatePatternModalContents { ...restProps } />\n\t\t</Modal>\n\t);\n}\n\nexport function CreatePatternModalContents( {\n\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tcontent,\n\tonClose,\n\tonError,\n\tonSuccess,\n\tdefaultSyncType = PATTERN_SYNC_TYPES.full,\n\tdefaultTitle = '',\n} ) {\n\tconst [ syncType, setSyncType ] = useState( defaultSyncType );\n\tconst [ categoryTerms, setCategoryTerms ] = useState( defaultCategories );\n\tconst [ title, setTitle ] = useState( defaultTitle );\n\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst { createPattern } = unlock( useDispatch( patternsStore ) );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tconst { categoryMap, findOrCreateTerm } = useAddPatternCategory();\n\n\tasync function onCreate( patternTitle, sync ) {\n\t\tif ( ! title || isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSaving( true );\n\t\t\tconst categories = await Promise.all(\n\t\t\t\tcategoryTerms.map( ( termName ) =>\n\t\t\t\t\tfindOrCreateTerm( termName )\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tconst newPattern = await createPattern(\n\t\t\t\tpatternTitle,\n\t\t\t\tsync,\n\t\t\t\ttypeof content === 'function' ? content() : content,\n\t\t\t\tcategories\n\t\t\t);\n\t\t\tonSuccess( {\n\t\t\t\tpattern: newPattern,\n\t\t\t\tcategoryId: PATTERN_DEFAULT_CATEGORY,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-create',\n\t\t\t} );\n\t\t\tonError?.();\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t\tsetCategoryTerms( [] );\n\t\t\tsetTitle( '' );\n\t\t}\n\t}\n\n\treturn (\n\t\t<form\n\t\t\tonSubmit={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonCreate( title, syncType );\n\t\t\t} }\n\t\t>\n\t\t\t<VStack spacing=\"5\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\tvalue={ title }\n\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t/>\n\t\t\t\t<CategorySelector\n\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t) }\n\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t'Sync this pattern across multiple locations.'\n\t\t\t\t\t) }\n\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t</Button>\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</form>\n\t);\n}\n"],"mappings":"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"}
@@ -28,7 +28,7 @@ function PartialSyncingControls({
28
28
  setAttributes
29
29
  }) {
30
30
  const syncedAttributes = _constants.PARTIAL_SYNCING_SUPPORTED_BLOCKS[name];
31
- const attributeSources = Object.keys(syncedAttributes).map(attributeName => attributes.metadata?.bindings?.[attributeName]?.source);
31
+ const attributeSources = syncedAttributes.map(attributeName => attributes.metadata?.bindings?.[attributeName]?.source);
32
32
  const isConnectedToOtherSources = attributeSources.every(source => source && source !== 'core/pattern-overrides');
33
33
 
34
34
  // Render nothing if all supported attributes are connected to other sources.
@@ -40,7 +40,7 @@ function PartialSyncingControls({
40
40
  ...attributes?.metadata?.bindings
41
41
  };
42
42
  if (!isChecked) {
43
- for (const attributeName of Object.keys(syncedAttributes)) {
43
+ for (const attributeName of syncedAttributes) {
44
44
  if (updatedBindings[attributeName]?.source === 'core/pattern-overrides') {
45
45
  delete updatedBindings[attributeName];
46
46
  }
@@ -56,7 +56,7 @@ function PartialSyncingControls({
56
56
  });
57
57
  return;
58
58
  }
59
- for (const attributeName of Object.keys(syncedAttributes)) {
59
+ for (const attributeName of syncedAttributes) {
60
60
  if (!updatedBindings[attributeName]) {
61
61
  updatedBindings[attributeName] = {
62
62
  source: 'core/pattern-overrides'
@@ -1 +1 @@
1
- {"version":3,"names":["_nanoid","require","_blockEditor","_components","_i18n","_constants","PartialSyncingControls","name","attributes","setAttributes","syncedAttributes","PARTIAL_SYNCING_SUPPORTED_BLOCKS","attributeSources","Object","keys","map","attributeName","metadata","bindings","source","isConnectedToOtherSources","every","updateBindings","isChecked","updatedBindings","length","undefined","id","nanoid","_react","createElement","InspectorControls","group","BaseControl","__nextHasNoMarginBottom","VisualLabel","__","CheckboxControl","label","checked","some","onChange","_default","exports","default"],"sources":["@wordpress/patterns/src/components/partial-syncing-controls.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { nanoid } from 'nanoid';\n\n/**\n * WordPress dependencies\n */\nimport { InspectorControls } from '@wordpress/block-editor';\nimport { BaseControl, CheckboxControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nfunction PartialSyncingControls( { name, attributes, setAttributes } ) {\n\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\tconst attributeSources = Object.keys( syncedAttributes ).map(\n\t\t( attributeName ) =>\n\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t);\n\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t);\n\n\t// Render nothing if all supported attributes are connected to other sources.\n\tif ( isConnectedToOtherSources ) {\n\t\treturn null;\n\t}\n\n\tfunction updateBindings( isChecked ) {\n\t\tlet updatedBindings = {\n\t\t\t...attributes?.metadata?.bindings,\n\t\t};\n\n\t\tif ( ! isChecked ) {\n\t\t\tfor ( const attributeName of Object.keys( syncedAttributes ) ) {\n\t\t\t\tif (\n\t\t\t\t\tupdatedBindings[ attributeName ]?.source ===\n\t\t\t\t\t'core/pattern-overrides'\n\t\t\t\t) {\n\t\t\t\t\tdelete updatedBindings[ attributeName ];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\t\t\tupdatedBindings = undefined;\n\t\t\t}\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( const attributeName of Object.keys( syncedAttributes ) ) {\n\t\t\tif ( ! updatedBindings[ attributeName ] ) {\n\t\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( typeof attributes.metadata?.id === 'string' ) {\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = nanoid( 6 );\n\t\tsetAttributes( {\n\t\t\tmetadata: {\n\t\t\t\t...attributes.metadata,\n\t\t\t\tid,\n\t\t\t\tbindings: updatedBindings,\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<BaseControl __nextHasNoMarginBottom>\n\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t{ __( 'Pattern overrides' ) }\n\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t<CheckboxControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Allow instance overrides' ) }\n\t\t\t\t\tchecked={ attributeSources.some(\n\t\t\t\t\t\t( source ) => source === 'core/pattern-overrides'\n\t\t\t\t\t) }\n\t\t\t\t\tonChange={ ( isChecked ) => {\n\t\t\t\t\t\tupdateBindings( isChecked );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BaseControl>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default PartialSyncingControls;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_nanoid","require","_blockEditor","_components","_i18n","_constants","PartialSyncingControls","name","attributes","setAttributes","syncedAttributes","PARTIAL_SYNCING_SUPPORTED_BLOCKS","attributeSources","map","attributeName","metadata","bindings","source","isConnectedToOtherSources","every","updateBindings","isChecked","updatedBindings","Object","keys","length","undefined","id","nanoid","_react","createElement","InspectorControls","group","BaseControl","__nextHasNoMarginBottom","VisualLabel","__","CheckboxControl","label","checked","some","onChange","_default","exports","default"],"sources":["@wordpress/patterns/src/components/partial-syncing-controls.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { nanoid } from 'nanoid';\n\n/**\n * WordPress dependencies\n */\nimport { InspectorControls } from '@wordpress/block-editor';\nimport { BaseControl, CheckboxControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nfunction PartialSyncingControls( { name, attributes, setAttributes } ) {\n\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\tconst attributeSources = syncedAttributes.map(\n\t\t( attributeName ) =>\n\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t);\n\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t);\n\n\t// Render nothing if all supported attributes are connected to other sources.\n\tif ( isConnectedToOtherSources ) {\n\t\treturn null;\n\t}\n\n\tfunction updateBindings( isChecked ) {\n\t\tlet updatedBindings = {\n\t\t\t...attributes?.metadata?.bindings,\n\t\t};\n\n\t\tif ( ! isChecked ) {\n\t\t\tfor ( const attributeName of syncedAttributes ) {\n\t\t\t\tif (\n\t\t\t\t\tupdatedBindings[ attributeName ]?.source ===\n\t\t\t\t\t'core/pattern-overrides'\n\t\t\t\t) {\n\t\t\t\t\tdelete updatedBindings[ attributeName ];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\t\t\tupdatedBindings = undefined;\n\t\t\t}\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( const attributeName of syncedAttributes ) {\n\t\t\tif ( ! updatedBindings[ attributeName ] ) {\n\t\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( typeof attributes.metadata?.id === 'string' ) {\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = nanoid( 6 );\n\t\tsetAttributes( {\n\t\t\tmetadata: {\n\t\t\t\t...attributes.metadata,\n\t\t\t\tid,\n\t\t\t\tbindings: updatedBindings,\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<BaseControl __nextHasNoMarginBottom>\n\t\t\t\t<BaseControl.VisualLabel>\n\t\t\t\t\t{ __( 'Pattern overrides' ) }\n\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t<CheckboxControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Allow instance overrides' ) }\n\t\t\t\t\tchecked={ attributeSources.some(\n\t\t\t\t\t\t( source ) => source === 'core/pattern-overrides'\n\t\t\t\t\t) }\n\t\t\t\t\tonChange={ ( isChecked ) => {\n\t\t\t\t\t\tupdateBindings( isChecked );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BaseControl>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default PartialSyncingControls;\n"],"mappings":"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"}
@@ -48,7 +48,12 @@ function ResetOverridesControl(props) {
48
48
  const editedRecord = await registry.resolveSelect(_coreData.store).getEditedEntityRecord('postType', 'wp_block', patternWithOverrides.attributes.ref);
49
49
  const blocks = (_editedRecord$blocks = editedRecord.blocks) !== null && _editedRecord$blocks !== void 0 ? _editedRecord$blocks : (0, _blocks.parse)(editedRecord.content);
50
50
  const block = recursivelyFindBlockWithId(blocks, id);
51
- props.setAttributes(block.attributes);
51
+ const newAttributes = Object.assign(
52
+ // Reset every existing attribute to undefined.
53
+ Object.fromEntries(Object.keys(props.attributes).map(key => [key, undefined])),
54
+ // Then assign the original attributes.
55
+ block.attributes);
56
+ props.setAttributes(newAttributes);
52
57
  };
53
58
  return (0, _react.createElement)(_blockEditor.BlockControls, {
54
59
  group: "other"
@@ -1 +1 @@
1
- {"version":3,"names":["_blockEditor","require","_components","_data","_coreData","_blocks","_i18n","recursivelyFindBlockWithId","blocks","id","block","attributes","metadata","found","innerBlocks","ResetOverridesControl","props","registry","useRegistry","patternWithOverrides","useSelect","select","undefined","getBlockParentsByBlockName","getBlocksByClientId","blockEditorStore","patternBlock","clientId","content","resetOverrides","_editedRecord$blocks","editedRecord","resolveSelect","coreStore","getEditedEntityRecord","ref","parse","setAttributes","_react","createElement","BlockControls","group","ToolbarGroup","ToolbarButton","onClick","disabled","__experimentalIsFocusable","__"],"sources":["@wordpress/patterns/src/components/reset-overrides-control.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tstore as blockEditorStore,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { parse } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\nfunction recursivelyFindBlockWithId( blocks, id ) {\n\tfor ( const block of blocks ) {\n\t\tif ( block.attributes.metadata?.id === id ) {\n\t\t\treturn block;\n\t\t}\n\n\t\tconst found = recursivelyFindBlockWithId( block.innerBlocks, id );\n\t\tif ( found ) {\n\t\t\treturn found;\n\t\t}\n\t}\n}\n\nexport default function ResetOverridesControl( props ) {\n\tconst registry = useRegistry();\n\tconst id = props.attributes.metadata?.id;\n\tconst patternWithOverrides = 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 { getBlockParentsByBlockName, getBlocksByClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst patternBlock = getBlocksByClientId(\n\t\t\t\tgetBlockParentsByBlockName( props.clientId, 'core/block' )\n\t\t\t)[ 0 ];\n\n\t\t\tif ( ! patternBlock?.attributes.content?.[ id ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn patternBlock;\n\t\t},\n\t\t[ props.clientId, id ]\n\t);\n\n\tconst resetOverrides = async () => {\n\t\tconst editedRecord = await registry\n\t\t\t.resolveSelect( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\tpatternWithOverrides.attributes.ref\n\t\t\t);\n\t\tconst blocks = editedRecord.blocks ?? parse( editedRecord.content );\n\t\tconst block = recursivelyFindBlockWithId( blocks, id );\n\n\t\tprops.setAttributes( block.attributes );\n\t};\n\n\treturn (\n\t\t<BlockControls group=\"other\">\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tonClick={ resetOverrides }\n\t\t\t\t\tdisabled={ ! patternWithOverrides }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AAXA;AACA;AACA;;AAWA,SAASM,0BAA0BA,CAAEC,MAAM,EAAEC,EAAE,EAAG;EACjD,KAAM,MAAMC,KAAK,IAAIF,MAAM,EAAG;IAC7B,IAAKE,KAAK,CAACC,UAAU,CAACC,QAAQ,EAAEH,EAAE,KAAKA,EAAE,EAAG;MAC3C,OAAOC,KAAK;IACb;IAEA,MAAMG,KAAK,GAAGN,0BAA0B,CAAEG,KAAK,CAACI,WAAW,EAAEL,EAAG,CAAC;IACjE,IAAKI,KAAK,EAAG;MACZ,OAAOA,KAAK;IACb;EACD;AACD;AAEe,SAASE,qBAAqBA,CAAEC,KAAK,EAAG;EACtD,MAAMC,QAAQ,GAAG,IAAAC,iBAAW,EAAC,CAAC;EAC9B,MAAMT,EAAE,GAAGO,KAAK,CAACL,UAAU,CAACC,QAAQ,EAAEH,EAAE;EACxC,MAAMU,oBAAoB,GAAG,IAAAC,eAAS,EACnCC,MAAM,IAAM;IACb,IAAK,CAAEZ,EAAE,EAAG;MACX,OAAOa,SAAS;IACjB;IAEA,MAAM;MAAEC,0BAA0B;MAAEC;IAAoB,CAAC,GACxDH,MAAM,CAAEI,kBAAiB,CAAC;IAC3B,MAAMC,YAAY,GAAGF,mBAAmB,CACvCD,0BAA0B,CAAEP,KAAK,CAACW,QAAQ,EAAE,YAAa,CAC1D,CAAC,CAAE,CAAC,CAAE;IAEN,IAAK,CAAED,YAAY,EAAEf,UAAU,CAACiB,OAAO,GAAInB,EAAE,CAAE,EAAG;MACjD,OAAOa,SAAS;IACjB;IAEA,OAAOI,YAAY;EACpB,CAAC,EACD,CAAEV,KAAK,CAACW,QAAQ,EAAElB,EAAE,CACrB,CAAC;EAED,MAAMoB,cAAc,GAAG,MAAAA,CAAA,KAAY;IAAA,IAAAC,oBAAA;IAClC,MAAMC,YAAY,GAAG,MAAMd,QAAQ,CACjCe,aAAa,CAAEC,eAAU,CAAC,CAC1BC,qBAAqB,CACrB,UAAU,EACV,UAAU,EACVf,oBAAoB,CAACR,UAAU,CAACwB,GACjC,CAAC;IACF,MAAM3B,MAAM,IAAAsB,oBAAA,GAAGC,YAAY,CAACvB,MAAM,cAAAsB,oBAAA,cAAAA,oBAAA,GAAI,IAAAM,aAAK,EAAEL,YAAY,CAACH,OAAQ,CAAC;IACnE,MAAMlB,KAAK,GAAGH,0BAA0B,CAAEC,MAAM,EAAEC,EAAG,CAAC;IAEtDO,KAAK,CAACqB,aAAa,CAAE3B,KAAK,CAACC,UAAW,CAAC;EACxC,CAAC;EAED,OACC,IAAA2B,MAAA,CAAAC,aAAA,EAACvC,YAAA,CAAAwC,aAAa;IAACC,KAAK,EAAC;EAAO,GAC3B,IAAAH,MAAA,CAAAC,aAAA,EAACrC,WAAA,CAAAwC,YAAY,QACZ,IAAAJ,MAAA,CAAAC,aAAA,EAACrC,WAAA,CAAAyC,aAAa;IACbC,OAAO,EAAGf,cAAgB;IAC1BgB,QAAQ,EAAG,CAAE1B,oBAAsB;IACnC2B,yBAAyB;EAAA,GAEvB,IAAAC,QAAE,EAAE,OAAQ,CACA,CACF,CACA,CAAC;AAElB"}
1
+ {"version":3,"names":["_blockEditor","require","_components","_data","_coreData","_blocks","_i18n","recursivelyFindBlockWithId","blocks","id","block","attributes","metadata","found","innerBlocks","ResetOverridesControl","props","registry","useRegistry","patternWithOverrides","useSelect","select","undefined","getBlockParentsByBlockName","getBlocksByClientId","blockEditorStore","patternBlock","clientId","content","resetOverrides","_editedRecord$blocks","editedRecord","resolveSelect","coreStore","getEditedEntityRecord","ref","parse","newAttributes","Object","assign","fromEntries","keys","map","key","setAttributes","_react","createElement","BlockControls","group","ToolbarGroup","ToolbarButton","onClick","disabled","__experimentalIsFocusable","__"],"sources":["@wordpress/patterns/src/components/reset-overrides-control.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tstore as blockEditorStore,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { parse } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\nfunction recursivelyFindBlockWithId( blocks, id ) {\n\tfor ( const block of blocks ) {\n\t\tif ( block.attributes.metadata?.id === id ) {\n\t\t\treturn block;\n\t\t}\n\n\t\tconst found = recursivelyFindBlockWithId( block.innerBlocks, id );\n\t\tif ( found ) {\n\t\t\treturn found;\n\t\t}\n\t}\n}\n\nexport default function ResetOverridesControl( props ) {\n\tconst registry = useRegistry();\n\tconst id = props.attributes.metadata?.id;\n\tconst patternWithOverrides = 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 { getBlockParentsByBlockName, getBlocksByClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst patternBlock = getBlocksByClientId(\n\t\t\t\tgetBlockParentsByBlockName( props.clientId, 'core/block' )\n\t\t\t)[ 0 ];\n\n\t\t\tif ( ! patternBlock?.attributes.content?.[ id ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn patternBlock;\n\t\t},\n\t\t[ props.clientId, id ]\n\t);\n\n\tconst resetOverrides = async () => {\n\t\tconst editedRecord = await registry\n\t\t\t.resolveSelect( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\tpatternWithOverrides.attributes.ref\n\t\t\t);\n\t\tconst blocks = editedRecord.blocks ?? parse( editedRecord.content );\n\t\tconst block = recursivelyFindBlockWithId( blocks, id );\n\n\t\tconst newAttributes = Object.assign(\n\t\t\t// Reset every existing attribute to undefined.\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys( props.attributes ).map( ( key ) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tundefined,\n\t\t\t\t] )\n\t\t\t),\n\t\t\t// Then assign the original attributes.\n\t\t\tblock.attributes\n\t\t);\n\n\t\tprops.setAttributes( newAttributes );\n\t};\n\n\treturn (\n\t\t<BlockControls group=\"other\">\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tonClick={ resetOverrides }\n\t\t\t\t\tdisabled={ ! patternWithOverrides }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n"],"mappings":"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"}
@@ -4,11 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PATTERN_USER_CATEGORY = exports.PATTERN_TYPES = exports.PATTERN_SYNC_TYPES = exports.PATTERN_DEFAULT_CATEGORY = exports.PARTIAL_SYNCING_SUPPORTED_BLOCKS = exports.EXCLUDED_PATTERN_SOURCES = void 0;
7
- var _i18n = require("@wordpress/i18n");
8
- /**
9
- * WordPress dependencies
10
- */
11
-
12
7
  const PATTERN_TYPES = exports.PATTERN_TYPES = {
13
8
  theme: 'pattern',
14
9
  user: 'wp_block'
@@ -23,23 +18,9 @@ const PATTERN_SYNC_TYPES = exports.PATTERN_SYNC_TYPES = {
23
18
 
24
19
  // TODO: This should not be hardcoded. Maybe there should be a config and/or an UI.
25
20
  const PARTIAL_SYNCING_SUPPORTED_BLOCKS = exports.PARTIAL_SYNCING_SUPPORTED_BLOCKS = {
26
- 'core/paragraph': {
27
- content: (0, _i18n.__)('Content')
28
- },
29
- 'core/heading': {
30
- content: (0, _i18n.__)('Content')
31
- },
32
- 'core/button': {
33
- text: (0, _i18n.__)('Text'),
34
- url: (0, _i18n.__)('URL'),
35
- linkTarget: (0, _i18n.__)('Link Target'),
36
- rel: (0, _i18n.__)('Link Relationship')
37
- },
38
- 'core/image': {
39
- id: (0, _i18n.__)('Image ID'),
40
- url: (0, _i18n.__)('URL'),
41
- title: (0, _i18n.__)('Title'),
42
- alt: (0, _i18n.__)('Alt Text')
43
- }
21
+ 'core/paragraph': ['content'],
22
+ 'core/heading': ['content'],
23
+ 'core/button': ['text', 'url', 'linkTarget', 'rel'],
24
+ 'core/image': ['id', 'url', 'title', 'alt']
44
25
  };
45
26
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_i18n","require","PATTERN_TYPES","exports","theme","user","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","full","unsynced","PARTIAL_SYNCING_SUPPORTED_BLOCKS","content","__","text","url","linkTarget","rel","id","title","alt"],"sources":["@wordpress/patterns/src/constants.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\nexport const PATTERN_TYPES = {\n\ttheme: 'pattern',\n\tuser: 'wp_block',\n};\n\nexport const PATTERN_DEFAULT_CATEGORY = 'all-patterns';\nexport const PATTERN_USER_CATEGORY = 'my-patterns';\nexport const EXCLUDED_PATTERN_SOURCES = [\n\t'core',\n\t'pattern-directory/core',\n\t'pattern-directory/featured',\n];\nexport const PATTERN_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\n// TODO: This should not be hardcoded. Maybe there should be a config and/or an UI.\nexport const PARTIAL_SYNCING_SUPPORTED_BLOCKS = {\n\t'core/paragraph': { content: __( 'Content' ) },\n\t'core/heading': { content: __( 'Content' ) },\n\t'core/button': {\n\t\ttext: __( 'Text' ),\n\t\turl: __( 'URL' ),\n\t\tlinkTarget: __( 'Link Target' ),\n\t\trel: __( 'Link Relationship' ),\n\t},\n\t'core/image': {\n\t\tid: __( 'Image ID' ),\n\t\turl: __( 'URL' ),\n\t\ttitle: __( 'Title' ),\n\t\talt: __( 'Alt Text' ),\n\t},\n};\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGO,MAAMC,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG;EAC5BE,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACP,CAAC;AAEM,MAAMC,wBAAwB,GAAAH,OAAA,CAAAG,wBAAA,GAAG,cAAc;AAC/C,MAAMC,qBAAqB,GAAAJ,OAAA,CAAAI,qBAAA,GAAG,aAAa;AAC3C,MAAMC,wBAAwB,GAAAL,OAAA,CAAAK,wBAAA,GAAG,CACvC,MAAM,EACN,wBAAwB,EACxB,4BAA4B,CAC5B;AACM,MAAMC,kBAAkB,GAAAN,OAAA,CAAAM,kBAAA,GAAG;EACjCC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;;AAED;AACO,MAAMC,gCAAgC,GAAAT,OAAA,CAAAS,gCAAA,GAAG;EAC/C,gBAAgB,EAAE;IAAEC,OAAO,EAAE,IAAAC,QAAE,EAAE,SAAU;EAAE,CAAC;EAC9C,cAAc,EAAE;IAAED,OAAO,EAAE,IAAAC,QAAE,EAAE,SAAU;EAAE,CAAC;EAC5C,aAAa,EAAE;IACdC,IAAI,EAAE,IAAAD,QAAE,EAAE,MAAO,CAAC;IAClBE,GAAG,EAAE,IAAAF,QAAE,EAAE,KAAM,CAAC;IAChBG,UAAU,EAAE,IAAAH,QAAE,EAAE,aAAc,CAAC;IAC/BI,GAAG,EAAE,IAAAJ,QAAE,EAAE,mBAAoB;EAC9B,CAAC;EACD,YAAY,EAAE;IACbK,EAAE,EAAE,IAAAL,QAAE,EAAE,UAAW,CAAC;IACpBE,GAAG,EAAE,IAAAF,QAAE,EAAE,KAAM,CAAC;IAChBM,KAAK,EAAE,IAAAN,QAAE,EAAE,OAAQ,CAAC;IACpBO,GAAG,EAAE,IAAAP,QAAE,EAAE,UAAW;EACrB;AACD,CAAC"}
1
+ {"version":3,"names":["PATTERN_TYPES","exports","theme","user","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","full","unsynced","PARTIAL_SYNCING_SUPPORTED_BLOCKS"],"sources":["@wordpress/patterns/src/constants.js"],"sourcesContent":["export const PATTERN_TYPES = {\n\ttheme: 'pattern',\n\tuser: 'wp_block',\n};\n\nexport const PATTERN_DEFAULT_CATEGORY = 'all-patterns';\nexport const PATTERN_USER_CATEGORY = 'my-patterns';\nexport const EXCLUDED_PATTERN_SOURCES = [\n\t'core',\n\t'pattern-directory/core',\n\t'pattern-directory/featured',\n];\nexport const PATTERN_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\n// TODO: This should not be hardcoded. Maybe there should be a config and/or an UI.\nexport const PARTIAL_SYNCING_SUPPORTED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/button': [ 'text', 'url', 'linkTarget', 'rel' ],\n\t'core/image': [ 'id', 'url', 'title', 'alt' ],\n};\n"],"mappings":";;;;;;AAAO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG;EAC5BE,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACP,CAAC;AAEM,MAAMC,wBAAwB,GAAAH,OAAA,CAAAG,wBAAA,GAAG,cAAc;AAC/C,MAAMC,qBAAqB,GAAAJ,OAAA,CAAAI,qBAAA,GAAG,aAAa;AAC3C,MAAMC,wBAAwB,GAAAL,OAAA,CAAAK,wBAAA,GAAG,CACvC,MAAM,EACN,wBAAwB,EACxB,4BAA4B,CAC5B;AACM,MAAMC,kBAAkB,GAAAN,OAAA,CAAAM,kBAAA,GAAG;EACjCC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;;AAED;AACO,MAAMC,gCAAgC,GAAAT,OAAA,CAAAS,gCAAA,GAAG;EAC/C,gBAAgB,EAAE,CAAE,SAAS,CAAE;EAC/B,cAAc,EAAE,CAAE,SAAS,CAAE;EAC7B,aAAa,EAAE,CAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAE;EACrD,YAAY,EAAE,CAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;AAC5C,CAAC"}
@@ -13,6 +13,7 @@ var _components = _interopRequireDefault(require("./components"));
13
13
  var _renamePatternCategoryModal = _interopRequireDefault(require("./components/rename-pattern-category-modal"));
14
14
  var _partialSyncingControls = _interopRequireDefault(require("./components/partial-syncing-controls"));
15
15
  var _resetOverridesControl = _interopRequireDefault(require("./components/reset-overrides-control"));
16
+ var _privateHooks = require("./private-hooks");
16
17
  var _constants = require("./constants");
17
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -31,6 +32,7 @@ const privateApis = exports.privateApis = {};
31
32
  RenamePatternCategoryModal: _renamePatternCategoryModal.default,
32
33
  PartialSyncingControls: _partialSyncingControls.default,
33
34
  ResetOverridesControl: _resetOverridesControl.default,
35
+ useAddPatternCategory: _privateHooks.useAddPatternCategory,
34
36
  PATTERN_TYPES: _constants.PATTERN_TYPES,
35
37
  PATTERN_DEFAULT_CATEGORY: _constants.PATTERN_DEFAULT_CATEGORY,
36
38
  PATTERN_USER_CATEGORY: _constants.PATTERN_USER_CATEGORY,
@@ -1 +1 @@
1
- {"version":3,"names":["_lockUnlock","require","_createPatternModal","_interopRequireWildcard","_duplicatePatternModal","_renamePatternModal","_interopRequireDefault","_components","_renamePatternCategoryModal","_partialSyncingControls","_resetOverridesControl","_constants","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PartialSyncingControls","ResetOverridesControl","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","PARTIAL_SYNCING_SUPPORTED_BLOCKS"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport {\n\tdefault as CreatePatternModal,\n\tCreatePatternModalContents,\n} from './components/create-pattern-modal';\nimport {\n\tdefault as DuplicatePatternModal,\n\tuseDuplicatePatternProps,\n} from './components/duplicate-pattern-modal';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport PartialSyncingControls from './components/partial-syncing-controls';\nimport ResetOverridesControl from './components/reset-overrides-control';\nimport {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPartialSyncingControls,\n\tResetOverridesControl,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAIA,IAAAG,sBAAA,GAAAD,uBAAA,CAAAF,OAAA;AAIA,IAAAI,mBAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,WAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,2BAAA,GAAAF,sBAAA,CAAAL,OAAA;AACA,IAAAQ,uBAAA,GAAAH,sBAAA,CAAAL,OAAA;AACA,IAAAS,sBAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,UAAA,GAAAV,OAAA;AAOqB,SAAAW,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAV,wBAAAU,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAxBrB;AACA;AACA;;AAwBO,MAAMY,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,CAAC,CAAC;AAC7B,IAAAE,gBAAI,EAAEF,WAAW,EAAE;EAClBG,kBAAkB,EAAlBA,2BAAkB;EAClBC,0BAA0B,EAA1BA,8CAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,wBAAwB,EAAxBA,+CAAwB;EACxBC,kBAAkB,EAAlBA,2BAAkB;EAClBC,iBAAiB,EAAjBA,mBAAiB;EACjBC,0BAA0B,EAA1BA,mCAA0B;EAC1BC,sBAAsB,EAAtBA,+BAAsB;EACtBC,qBAAqB,EAArBA,8BAAqB;EACrBC,aAAa,EAAbA,wBAAa;EACbC,wBAAwB,EAAxBA,mCAAwB;EACxBC,qBAAqB,EAArBA,gCAAqB;EACrBC,wBAAwB,EAAxBA,mCAAwB;EACxBC,kBAAkB,EAAlBA,6BAAkB;EAClBC,gCAAgC,EAAhCA;AACD,CAAE,CAAC"}
1
+ {"version":3,"names":["_lockUnlock","require","_createPatternModal","_interopRequireWildcard","_duplicatePatternModal","_renamePatternModal","_interopRequireDefault","_components","_renamePatternCategoryModal","_partialSyncingControls","_resetOverridesControl","_privateHooks","_constants","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PartialSyncingControls","ResetOverridesControl","useAddPatternCategory","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","PARTIAL_SYNCING_SUPPORTED_BLOCKS"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport {\n\tdefault as CreatePatternModal,\n\tCreatePatternModalContents,\n} from './components/create-pattern-modal';\nimport {\n\tdefault as DuplicatePatternModal,\n\tuseDuplicatePatternProps,\n} from './components/duplicate-pattern-modal';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport PartialSyncingControls from './components/partial-syncing-controls';\nimport ResetOverridesControl from './components/reset-overrides-control';\nimport { useAddPatternCategory } from './private-hooks';\nimport {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPartialSyncingControls,\n\tResetOverridesControl,\n\tuseAddPatternCategory,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAIA,IAAAG,sBAAA,GAAAD,uBAAA,CAAAF,OAAA;AAIA,IAAAI,mBAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,WAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,2BAAA,GAAAF,sBAAA,CAAAL,OAAA;AACA,IAAAQ,uBAAA,GAAAH,sBAAA,CAAAL,OAAA;AACA,IAAAS,sBAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,aAAA,GAAAV,OAAA;AACA,IAAAW,UAAA,GAAAX,OAAA;AAOqB,SAAAY,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAzBrB;AACA;AACA;;AAyBO,MAAMY,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,CAAC,CAAC;AAC7B,IAAAE,gBAAI,EAAEF,WAAW,EAAE;EAClBG,kBAAkB,EAAlBA,2BAAkB;EAClBC,0BAA0B,EAA1BA,8CAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,wBAAwB,EAAxBA,+CAAwB;EACxBC,kBAAkB,EAAlBA,2BAAkB;EAClBC,iBAAiB,EAAjBA,mBAAiB;EACjBC,0BAA0B,EAA1BA,mCAA0B;EAC1BC,sBAAsB,EAAtBA,+BAAsB;EACtBC,qBAAqB,EAArBA,8BAAqB;EACrBC,qBAAqB,EAArBA,mCAAqB;EACrBC,aAAa,EAAbA,wBAAa;EACbC,wBAAwB,EAAxBA,mCAAwB;EACxBC,qBAAqB,EAArBA,gCAAqB;EACrBC,wBAAwB,EAAxBA,mCAAwB;EACxBC,kBAAkB,EAAlBA,6BAAkB;EAClBC,gCAAgC,EAAhCA;AACD,CAAE,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAddPatternCategory = useAddPatternCategory;
7
+ var _data = require("@wordpress/data");
8
+ var _coreData = require("@wordpress/core-data");
9
+ var _element = require("@wordpress/element");
10
+ var _categorySelector = require("./components/category-selector");
11
+ /**
12
+ * WordPress dependencies
13
+ */
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+
19
+ /**
20
+ * Helper hook that creates a Map with the core and user patterns categories
21
+ * and removes any duplicates. It's used when we need to create new user
22
+ * categories when creating or importing patterns.
23
+ * This hook also provides a function to find or create a pattern category.
24
+ *
25
+ * @return {Object} The merged categories map and the callback function to find or create a category.
26
+ */
27
+ function useAddPatternCategory() {
28
+ const {
29
+ saveEntityRecord,
30
+ invalidateResolution
31
+ } = (0, _data.useDispatch)(_coreData.store);
32
+ const {
33
+ corePatternCategories,
34
+ userPatternCategories
35
+ } = (0, _data.useSelect)(select => {
36
+ const {
37
+ getUserPatternCategories,
38
+ getBlockPatternCategories
39
+ } = select(_coreData.store);
40
+ return {
41
+ corePatternCategories: getBlockPatternCategories(),
42
+ userPatternCategories: getUserPatternCategories()
43
+ };
44
+ }, []);
45
+ const categoryMap = (0, _element.useMemo)(() => {
46
+ // Merge the user and core pattern categories and remove any duplicates.
47
+ const uniqueCategories = new Map();
48
+ userPatternCategories.forEach(category => {
49
+ uniqueCategories.set(category.label.toLowerCase(), {
50
+ label: category.label,
51
+ name: category.name,
52
+ id: category.id
53
+ });
54
+ });
55
+ corePatternCategories.forEach(category => {
56
+ if (!uniqueCategories.has(category.label.toLowerCase()) &&
57
+ // There are two core categories with `Post` label so explicitly remove the one with
58
+ // the `query` slug to avoid any confusion.
59
+ category.name !== 'query') {
60
+ uniqueCategories.set(category.label.toLowerCase(), {
61
+ label: category.label,
62
+ name: category.name
63
+ });
64
+ }
65
+ });
66
+ return uniqueCategories;
67
+ }, [userPatternCategories, corePatternCategories]);
68
+ async function findOrCreateTerm(term) {
69
+ try {
70
+ const existingTerm = categoryMap.get(term.toLowerCase());
71
+ if (existingTerm?.id) {
72
+ return existingTerm.id;
73
+ }
74
+ // If we have an existing core category we need to match the new user category to the
75
+ // correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
76
+ // category uses the singular `header` as the slug.
77
+ const termData = existingTerm ? {
78
+ name: existingTerm.label,
79
+ slug: existingTerm.name
80
+ } : {
81
+ name: term
82
+ };
83
+ const newTerm = await saveEntityRecord('taxonomy', _categorySelector.CATEGORY_SLUG, termData, {
84
+ throwOnError: true
85
+ });
86
+ invalidateResolution('getUserPatternCategories');
87
+ return newTerm.id;
88
+ } catch (error) {
89
+ if (error.code !== 'term_exists') {
90
+ throw error;
91
+ }
92
+ return error.data.term_id;
93
+ }
94
+ }
95
+ return {
96
+ categoryMap,
97
+ findOrCreateTerm
98
+ };
99
+ }
100
+ //# sourceMappingURL=private-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_data","require","_coreData","_element","_categorySelector","useAddPatternCategory","saveEntityRecord","invalidateResolution","useDispatch","coreStore","corePatternCategories","userPatternCategories","useSelect","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","useMemo","uniqueCategories","Map","forEach","category","set","label","toLowerCase","name","id","has","findOrCreateTerm","term","existingTerm","get","termData","slug","newTerm","CATEGORY_SLUG","throwOnError","error","code","data","term_id"],"sources":["@wordpress/patterns/src/private-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { CATEGORY_SLUG } from './components/category-selector';\n\n/**\n * Helper hook that creates a Map with the core and user patterns categories\n * and removes any duplicates. It's used when we need to create new user\n * categories when creating or importing patterns.\n * This hook also provides a function to find or create a pattern category.\n *\n * @return {Object} The merged categories map and the callback function to find or create a category.\n */\nexport function useAddPatternCategory() {\n\tconst { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );\n\tconst { corePatternCategories, userPatternCategories } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getUserPatternCategories, getBlockPatternCategories } =\n\t\t\t\tselect( coreStore );\n\n\t\t\treturn {\n\t\t\t\tcorePatternCategories: getBlockPatternCategories(),\n\t\t\t\tuserPatternCategories: getUserPatternCategories(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst categoryMap = useMemo( () => {\n\t\t// Merge the user and core pattern categories and remove any duplicates.\n\t\tconst uniqueCategories = new Map();\n\t\tuserPatternCategories.forEach( ( category ) => {\n\t\t\tuniqueCategories.set( category.label.toLowerCase(), {\n\t\t\t\tlabel: category.label,\n\t\t\t\tname: category.name,\n\t\t\t\tid: category.id,\n\t\t\t} );\n\t\t} );\n\n\t\tcorePatternCategories.forEach( ( category ) => {\n\t\t\tif (\n\t\t\t\t! uniqueCategories.has( category.label.toLowerCase() ) &&\n\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\tcategory.name !== 'query'\n\t\t\t) {\n\t\t\t\tuniqueCategories.set( category.label.toLowerCase(), {\n\t\t\t\t\tlabel: category.label,\n\t\t\t\t\tname: category.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t\treturn uniqueCategories;\n\t}, [ userPatternCategories, corePatternCategories ] );\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst existingTerm = categoryMap.get( term.toLowerCase() );\n\t\t\tif ( existingTerm?.id ) {\n\t\t\t\treturn existingTerm.id;\n\t\t\t}\n\t\t\t// If we have an existing core category we need to match the new user category to the\n\t\t\t// correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`\n\t\t\t// category uses the singular `header` as the slug.\n\t\t\tconst termData = existingTerm\n\t\t\t\t? { name: existingTerm.label, slug: existingTerm.name }\n\t\t\t\t: { name: term };\n\t\t\tconst newTerm = await saveEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\tCATEGORY_SLUG,\n\t\t\t\ttermData,\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\treturn newTerm.id;\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn error.data.term_id;\n\t\t}\n\t}\n\n\treturn { categoryMap, findOrCreateTerm };\n}\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAKA,IAAAG,iBAAA,GAAAH,OAAA;AAVA;AACA;AACA;;AAKA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,qBAAqBA,CAAA,EAAG;EACvC,MAAM;IAAEC,gBAAgB;IAAEC;EAAqB,CAAC,GAAG,IAAAC,iBAAW,EAAEC,eAAU,CAAC;EAC3E,MAAM;IAAEC,qBAAqB;IAAEC;EAAsB,CAAC,GAAG,IAAAC,eAAS,EAC/DC,MAAM,IAAM;IACb,MAAM;MAAEC,wBAAwB;MAAEC;IAA0B,CAAC,GAC5DF,MAAM,CAAEJ,eAAU,CAAC;IAEpB,OAAO;MACNC,qBAAqB,EAAEK,yBAAyB,CAAC,CAAC;MAClDJ,qBAAqB,EAAEG,wBAAwB,CAAC;IACjD,CAAC;EACF,CAAC,EACD,EACD,CAAC;EACD,MAAME,WAAW,GAAG,IAAAC,gBAAO,EAAE,MAAM;IAClC;IACA,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAAC;IAClCR,qBAAqB,CAACS,OAAO,CAAIC,QAAQ,IAAM;MAC9CH,gBAAgB,CAACI,GAAG,CAAED,QAAQ,CAACE,KAAK,CAACC,WAAW,CAAC,CAAC,EAAE;QACnDD,KAAK,EAAEF,QAAQ,CAACE,KAAK;QACrBE,IAAI,EAAEJ,QAAQ,CAACI,IAAI;QACnBC,EAAE,EAAEL,QAAQ,CAACK;MACd,CAAE,CAAC;IACJ,CAAE,CAAC;IAEHhB,qBAAqB,CAACU,OAAO,CAAIC,QAAQ,IAAM;MAC9C,IACC,CAAEH,gBAAgB,CAACS,GAAG,CAAEN,QAAQ,CAACE,KAAK,CAACC,WAAW,CAAC,CAAE,CAAC;MACtD;MACA;MACAH,QAAQ,CAACI,IAAI,KAAK,OAAO,EACxB;QACDP,gBAAgB,CAACI,GAAG,CAAED,QAAQ,CAACE,KAAK,CAACC,WAAW,CAAC,CAAC,EAAE;UACnDD,KAAK,EAAEF,QAAQ,CAACE,KAAK;UACrBE,IAAI,EAAEJ,QAAQ,CAACI;QAChB,CAAE,CAAC;MACJ;IACD,CAAE,CAAC;IACH,OAAOP,gBAAgB;EACxB,CAAC,EAAE,CAAEP,qBAAqB,EAAED,qBAAqB,CAAG,CAAC;EAErD,eAAekB,gBAAgBA,CAAEC,IAAI,EAAG;IACvC,IAAI;MACH,MAAMC,YAAY,GAAGd,WAAW,CAACe,GAAG,CAAEF,IAAI,CAACL,WAAW,CAAC,CAAE,CAAC;MAC1D,IAAKM,YAAY,EAAEJ,EAAE,EAAG;QACvB,OAAOI,YAAY,CAACJ,EAAE;MACvB;MACA;MACA;MACA;MACA,MAAMM,QAAQ,GAAGF,YAAY,GAC1B;QAAEL,IAAI,EAAEK,YAAY,CAACP,KAAK;QAAEU,IAAI,EAAEH,YAAY,CAACL;MAAK,CAAC,GACrD;QAAEA,IAAI,EAAEI;MAAK,CAAC;MACjB,MAAMK,OAAO,GAAG,MAAM5B,gBAAgB,CACrC,UAAU,EACV6B,+BAAa,EACbH,QAAQ,EACR;QAAEI,YAAY,EAAE;MAAK,CACtB,CAAC;MACD7B,oBAAoB,CAAE,0BAA2B,CAAC;MAClD,OAAO2B,OAAO,CAACR,EAAE;IAClB,CAAC,CAAC,OAAQW,KAAK,EAAG;MACjB,IAAKA,KAAK,CAACC,IAAI,KAAK,aAAa,EAAG;QACnC,MAAMD,KAAK;MACZ;MACA,OAAOA,KAAK,CAACE,IAAI,CAACC,OAAO;IAC1B;EACD;EAEA,OAAO;IAAExB,WAAW;IAAEY;EAAiB,CAAC;AACzC"}
@@ -4,21 +4,17 @@ import { createElement } from "react";
4
4
  */
5
5
  import { Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
6
6
  import { __, _x } from '@wordpress/i18n';
7
- import { useState, useMemo } from '@wordpress/element';
8
- import { useDispatch, useSelect } from '@wordpress/data';
7
+ import { useState } from '@wordpress/element';
8
+ import { useDispatch } from '@wordpress/data';
9
9
  import { store as noticesStore } from '@wordpress/notices';
10
- import { store as coreStore } from '@wordpress/core-data';
11
10
 
12
11
  /**
13
12
  * Internal dependencies
14
13
  */
15
14
  import { PATTERN_DEFAULT_CATEGORY, PATTERN_SYNC_TYPES } from '../constants';
16
-
17
- /**
18
- * Internal dependencies
19
- */
20
15
  import { store as patternsStore } from '../store';
21
- import CategorySelector, { CATEGORY_SLUG } from './category-selector';
16
+ import CategorySelector from './category-selector';
17
+ import { useAddPatternCategory } from '../private-hooks';
22
18
  import { unlock } from '../lock-unlock';
23
19
  export default function CreatePatternModal({
24
20
  className = 'patterns-menu-items__convert-modal',
@@ -50,49 +46,13 @@ export function CreatePatternModalContents({
50
46
  const {
51
47
  createPattern
52
48
  } = unlock(useDispatch(patternsStore));
53
- const {
54
- saveEntityRecord,
55
- invalidateResolution
56
- } = useDispatch(coreStore);
57
49
  const {
58
50
  createErrorNotice
59
51
  } = useDispatch(noticesStore);
60
52
  const {
61
- corePatternCategories,
62
- userPatternCategories
63
- } = useSelect(select => {
64
- const {
65
- getUserPatternCategories,
66
- getBlockPatternCategories
67
- } = select(coreStore);
68
- return {
69
- corePatternCategories: getBlockPatternCategories(),
70
- userPatternCategories: getUserPatternCategories()
71
- };
72
- });
73
- const categoryMap = useMemo(() => {
74
- // Merge the user and core pattern categories and remove any duplicates.
75
- const uniqueCategories = new Map();
76
- userPatternCategories.forEach(category => {
77
- uniqueCategories.set(category.label.toLowerCase(), {
78
- label: category.label,
79
- name: category.name,
80
- id: category.id
81
- });
82
- });
83
- corePatternCategories.forEach(category => {
84
- if (!uniqueCategories.has(category.label.toLowerCase()) &&
85
- // There are two core categories with `Post` label so explicitly remove the one with
86
- // the `query` slug to avoid any confusion.
87
- category.name !== 'query') {
88
- uniqueCategories.set(category.label.toLowerCase(), {
89
- label: category.label,
90
- name: category.name
91
- });
92
- }
93
- });
94
- return uniqueCategories;
95
- }, [userPatternCategories, corePatternCategories]);
53
+ categoryMap,
54
+ findOrCreateTerm
55
+ } = useAddPatternCategory();
96
56
  async function onCreate(patternTitle, sync) {
97
57
  if (!title || isSaving) {
98
58
  return;
@@ -117,38 +77,6 @@ export function CreatePatternModalContents({
117
77
  setTitle('');
118
78
  }
119
79
  }
120
-
121
- /**
122
- * @param {string} term
123
- * @return {Promise<number>} The pattern category id.
124
- */
125
- async function findOrCreateTerm(term) {
126
- try {
127
- const existingTerm = categoryMap.get(term.toLowerCase());
128
- if (existingTerm && existingTerm.id) {
129
- return existingTerm.id;
130
- }
131
- // If we have an existing core category we need to match the new user category to the
132
- // correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
133
- // category uses the singular `header` as the slug.
134
- const termData = existingTerm ? {
135
- name: existingTerm.label,
136
- slug: existingTerm.name
137
- } : {
138
- name: term
139
- };
140
- const newTerm = await saveEntityRecord('taxonomy', CATEGORY_SLUG, termData, {
141
- throwOnError: true
142
- });
143
- invalidateResolution('getUserPatternCategories');
144
- return newTerm.id;
145
- } catch (error) {
146
- if (error.code !== 'term_exists') {
147
- throw error;
148
- }
149
- return error.data.term_id;
150
- }
151
- }
152
80
  return createElement("form", {
153
81
  onSubmit: event => {
154
82
  event.preventDefault();