@wordpress/patterns 1.12.1 → 1.12.3
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.
- package/build/components/create-pattern-modal.js +6 -79
- package/build/components/create-pattern-modal.js.map +1 -1
- package/build/constants.js +1 -0
- package/build/constants.js.map +1 -1
- package/build/private-apis.js +2 -0
- package/build/private-apis.js.map +1 -1
- package/build/private-hooks.js +100 -0
- package/build/private-hooks.js.map +1 -0
- package/build-module/components/create-pattern-modal.js +7 -79
- package/build-module/components/create-pattern-modal.js.map +1 -1
- package/build-module/constants.js +1 -0
- package/build-module/constants.js.map +1 -1
- package/build-module/private-apis.js +2 -0
- package/build-module/private-apis.js.map +1 -1
- package/build-module/private-hooks.js +94 -0
- package/build-module/private-hooks.js.map +1 -0
- package/package.json +16 -16
- package/src/components/create-pattern-modal.js +5 -79
- package/src/constants.js +1 -0
- package/src/private-apis.js +2 -0
- 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 =
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
} = (0,
|
|
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":";;;;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AAQA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAKA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAC,sBAAA,CAAAR,OAAA;AACA,IAAAS,aAAA,GAAAT,OAAA;AACA,IAAAU,WAAA,GAAAV,OAAA;AAvBA;AACA;AACA;;AAcA;AACA;AACA;;AAOe,SAASW,kBAAkBA,CAAE;EAC3CC,SAAS,GAAG,oCAAoC;EAChDC,UAAU,GAAG,IAAAC,QAAE,EAAE,gBAAiB,CAAC;EACnC,GAAGC;AACJ,CAAC,EAAG;EACH,OACC,IAAAC,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAmB,KAAK;IACLC,KAAK,EAAGN,UAAY;IACpBO,cAAc,EAAGL,SAAS,CAACM,OAAS;IACpCC,gBAAgB,EAAGV;EAAW,GAE9B,IAAAI,MAAA,CAAAC,aAAA,EAACM,0BAA0B;IAAA,GAAMR;EAAS,CAAI,CACxC,CAAC;AAEV;AAEO,SAASQ,0BAA0BA,CAAE;EAC3CC,YAAY,GAAG,IAAAV,QAAE,EAAE,QAAS,CAAC;EAC7BW,iBAAiB,GAAG,EAAE;EACtBC,OAAO;EACPL,OAAO;EACPM,OAAO;EACPC,SAAS;EACTC,eAAe,GAAGC,6BAAkB,CAACC,IAAI;EACzCC,YAAY,GAAG;AAChB,CAAC,EAAG;EACH,MAAM,CAAEC,QAAQ,EAAEC,WAAW,CAAE,GAAG,IAAAC,iBAAQ,EAAEN,eAAgB,CAAC;EAC7D,MAAM,CAAEO,aAAa,EAAEC,gBAAgB,CAAE,GAAG,IAAAF,iBAAQ,EAAEV,iBAAkB,CAAC;EACzE,MAAM,CAAEN,KAAK,EAAEmB,QAAQ,CAAE,GAAG,IAAAH,iBAAQ,EAAEH,YAAa,CAAC;EAEpD,MAAM,CAAEO,QAAQ,EAAEC,WAAW,CAAE,GAAG,IAAAL,iBAAQ,EAAE,KAAM,CAAC;EACnD,MAAM;IAAEM;EAAc,CAAC,GAAG,IAAAC,kBAAM,EAAE,IAAAC,iBAAW,EAAEC,YAAc,CAAE,CAAC;EAChE,MAAM;IAAEC;EAAkB,CAAC,GAAG,IAAAF,iBAAW,EAAEG,cAAa,CAAC;EAEzD,MAAM;IAAEC,WAAW;IAAEC;EAAiB,CAAC,GAAG,IAAAC,mCAAqB,EAAC,CAAC;EAEjE,eAAeC,QAAQA,CAAEC,YAAY,EAAEC,IAAI,EAAG;IAC7C,IAAK,CAAEjC,KAAK,IAAIoB,QAAQ,EAAG;MAC1B;IACD;IAEA,IAAI;MACHC,WAAW,CAAE,IAAK,CAAC;MACnB,MAAMa,UAAU,GAAG,MAAMC,OAAO,CAACC,GAAG,CACnCnB,aAAa,CAACoB,GAAG,CAAIC,QAAQ,IAC5BT,gBAAgB,CAAES,QAAS,CAC5B,CACD,CAAC;MAED,MAAMC,UAAU,GAAG,MAAMjB,aAAa,CACrCU,YAAY,EACZC,IAAI,EACJ,OAAO1B,OAAO,KAAK,UAAU,GAAGA,OAAO,CAAC,CAAC,GAAGA,OAAO,EACnD2B,UACD,CAAC;MACDzB,SAAS,CAAE;QACV+B,OAAO,EAAED,UAAU;QACnBE,UAAU,EAAEC;MACb,CAAE,CAAC;IACJ,CAAC,CAAC,OAAQC,KAAK,EAAG;MACjBjB,iBAAiB,CAAEiB,KAAK,CAACC,OAAO,EAAE;QACjCC,IAAI,EAAE,UAAU;QAChBC,EAAE,EAAE;MACL,CAAE,CAAC;MACHtC,OAAO,GAAG,CAAC;IACZ,CAAC,SAAS;MACTa,WAAW,CAAE,KAAM,CAAC;MACpBH,gBAAgB,CAAE,EAAG,CAAC;MACtBC,QAAQ,CAAE,EAAG,CAAC;IACf;EACD;EAEA,OACC,IAAAtB,MAAA,CAAAC,aAAA;IACCiD,QAAQ,EAAKC,KAAK,IAAM;MACvBA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBlB,QAAQ,CAAE/B,KAAK,EAAEc,QAAS,CAAC;IAC5B;EAAG,GAEH,IAAAjB,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAsE,oBAAM;IAACC,OAAO,EAAC;EAAG,GAClB,IAAAtD,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAwE,WAAW;IACXC,KAAK,EAAG,IAAA1D,QAAE,EAAE,MAAO,CAAG;IACtB2D,KAAK,EAAGtD,KAAO;IACfuD,QAAQ,EAAGpC,QAAU;IACrBqC,WAAW,EAAG,IAAA7D,QAAE,EAAE,YAAa,CAAG;IAClCF,SAAS,EAAC,mCAAmC;IAC7CgE,uBAAuB;IACvBC,qBAAqB;EAAA,CACrB,CAAC,EACF,IAAA7D,MAAA,CAAAC,aAAA,EAACV,iBAAA,CAAAuE,OAAgB;IAChB1C,aAAa,EAAGA,aAAe;IAC/BsC,QAAQ,EAAGrC,gBAAkB;IAC7BU,WAAW,EAAGA;EAAa,CAC3B,CAAC,EACF,IAAA/B,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAgF,aAAa;IACbP,KAAK,EAAG,IAAAQ,QAAE,EACT,QAAQ,EACR,sDACD,CAAG;IACHC,IAAI,EAAG,IAAAnE,QAAE,EACR,8CACD,CAAG;IACHoE,OAAO,EAAGjD,QAAQ,KAAKH,6BAAkB,CAACC,IAAM;IAChD2C,QAAQ,EAAGA,CAAA,KAAM;MAChBxC,WAAW,CACVD,QAAQ,KAAKH,6BAAkB,CAACC,IAAI,GACjCD,6BAAkB,CAACqD,QAAQ,GAC3BrD,6BAAkB,CAACC,IACvB,CAAC;IACF;EAAG,CACH,CAAC,EACF,IAAAf,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAqF,oBAAM;IAACC,OAAO,EAAC;EAAO,GACtB,IAAArE,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAuF,MAAM;IACNT,qBAAqB;IACrBU,OAAO,EAAC,UAAU;IAClBC,OAAO,EAAGA,CAAA,KAAM;MACfnE,OAAO,CAAC,CAAC;MACTiB,QAAQ,CAAE,EAAG,CAAC;IACf;EAAG,GAED,IAAAxB,QAAE,EAAE,QAAS,CACR,CAAC,EAET,IAAAE,MAAA,CAAAC,aAAA,EAAClB,WAAA,CAAAuF,MAAM;IACNT,qBAAqB;IACrBU,OAAO,EAAC,SAAS;IACjBvB,IAAI,EAAC,QAAQ;IACb,iBAAgB,CAAE7C,KAAK,IAAIoB,QAAU;IACrCkD,MAAM,EAAGlD;EAAU,GAEjBf,YACK,CACD,CACD,CACH,CAAC;AAET"}
|
package/build/constants.js
CHANGED
|
@@ -36,6 +36,7 @@ const PARTIAL_SYNCING_SUPPORTED_BLOCKS = exports.PARTIAL_SYNCING_SUPPORTED_BLOCK
|
|
|
36
36
|
rel: (0, _i18n.__)('Link Relationship')
|
|
37
37
|
},
|
|
38
38
|
'core/image': {
|
|
39
|
+
id: (0, _i18n.__)('Image ID'),
|
|
39
40
|
url: (0, _i18n.__)('URL'),
|
|
40
41
|
title: (0, _i18n.__)('Title'),
|
|
41
42
|
alt: (0, _i18n.__)('Alt Text')
|
package/build/constants.js.map
CHANGED
|
@@ -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","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\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;
|
|
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"}
|
package/build/private-apis.js
CHANGED
|
@@ -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,
|
|
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
|
|
8
|
-
import { useDispatch
|
|
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
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
} =
|
|
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();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","__","_x","useState","useMemo","useDispatch","useSelect","store","noticesStore","coreStore","PATTERN_DEFAULT_CATEGORY","PATTERN_SYNC_TYPES","patternsStore","CategorySelector","CATEGORY_SLUG","unlock","CreatePatternModal","className","modalTitle","restProps","createElement","title","onRequestClose","onClose","overlayClassName","CreatePatternModalContents","confirmLabel","defaultCategories","content","onError","onSuccess","defaultSyncType","full","defaultTitle","syncType","setSyncType","categoryTerms","setCategoryTerms","setTitle","isSaving","setIsSaving","createPattern","saveEntityRecord","invalidateResolution","createErrorNotice","corePatternCategories","userPatternCategories","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","uniqueCategories","Map","forEach","category","set","label","toLowerCase","name","id","has","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","error","message","type","term","existingTerm","get","termData","slug","newTerm","throwOnError","code","data","term_id","onSubmit","event","preventDefault","spacing","value","onChange","placeholder","__nextHasNoMarginBottom","__next40pxDefaultSize","help","checked","unsynced","justify","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":["Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","__","_x","useState","useDispatch","store","noticesStore","PATTERN_DEFAULT_CATEGORY","PATTERN_SYNC_TYPES","patternsStore","CategorySelector","useAddPatternCategory","unlock","CreatePatternModal","className","modalTitle","restProps","createElement","title","onRequestClose","onClose","overlayClassName","CreatePatternModalContents","confirmLabel","defaultCategories","content","onError","onSuccess","defaultSyncType","full","defaultTitle","syncType","setSyncType","categoryTerms","setCategoryTerms","setTitle","isSaving","setIsSaving","createPattern","createErrorNotice","categoryMap","findOrCreateTerm","onCreate","patternTitle","sync","categories","Promise","all","map","termName","newPattern","pattern","categoryId","error","message","type","id","onSubmit","event","preventDefault","spacing","label","value","onChange","placeholder","__nextHasNoMarginBottom","__next40pxDefaultSize","help","checked","unsynced","justify","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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","PATTERN_TYPES","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","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\turl: __( 'URL' ),\n\t\ttitle: __( 'Title' ),\n\t\talt: __( 'Alt Text' ),\n\t},\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AAEpC,OAAO,MAAMC,aAAa,GAAG;EAC5BC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACP,CAAC;AAED,OAAO,MAAMC,wBAAwB,GAAG,cAAc;AACtD,OAAO,MAAMC,qBAAqB,GAAG,aAAa;AAClD,OAAO,MAAMC,wBAAwB,GAAG,CACvC,MAAM,EACN,wBAAwB,EACxB,4BAA4B,CAC5B;AACD,OAAO,MAAMC,kBAAkB,GAAG;EACjCC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;;AAED;AACA,OAAO,MAAMC,gCAAgC,GAAG;EAC/C,gBAAgB,EAAE;IAAEC,OAAO,EAAEX,EAAE,CAAE,SAAU;EAAE,CAAC;EAC9C,cAAc,EAAE;IAAEW,OAAO,EAAEX,EAAE,CAAE,SAAU;EAAE,CAAC;EAC5C,aAAa,EAAE;IACdY,IAAI,EAAEZ,EAAE,CAAE,MAAO,CAAC;IAClBa,GAAG,EAAEb,EAAE,CAAE,KAAM,CAAC;IAChBc,UAAU,EAAEd,EAAE,CAAE,aAAc,CAAC;IAC/Be,GAAG,EAAEf,EAAE,CAAE,mBAAoB;EAC9B,CAAC;EACD,YAAY,EAAE;
|
|
1
|
+
{"version":3,"names":["__","PATTERN_TYPES","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":"AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AAEpC,OAAO,MAAMC,aAAa,GAAG;EAC5BC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACP,CAAC;AAED,OAAO,MAAMC,wBAAwB,GAAG,cAAc;AACtD,OAAO,MAAMC,qBAAqB,GAAG,aAAa;AAClD,OAAO,MAAMC,wBAAwB,GAAG,CACvC,MAAM,EACN,wBAAwB,EACxB,4BAA4B,CAC5B;AACD,OAAO,MAAMC,kBAAkB,GAAG;EACjCC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;;AAED;AACA,OAAO,MAAMC,gCAAgC,GAAG;EAC/C,gBAAgB,EAAE;IAAEC,OAAO,EAAEX,EAAE,CAAE,SAAU;EAAE,CAAC;EAC9C,cAAc,EAAE;IAAEW,OAAO,EAAEX,EAAE,CAAE,SAAU;EAAE,CAAC;EAC5C,aAAa,EAAE;IACdY,IAAI,EAAEZ,EAAE,CAAE,MAAO,CAAC;IAClBa,GAAG,EAAEb,EAAE,CAAE,KAAM,CAAC;IAChBc,UAAU,EAAEd,EAAE,CAAE,aAAc,CAAC;IAC/Be,GAAG,EAAEf,EAAE,CAAE,mBAAoB;EAC9B,CAAC;EACD,YAAY,EAAE;IACbgB,EAAE,EAAEhB,EAAE,CAAE,UAAW,CAAC;IACpBa,GAAG,EAAEb,EAAE,CAAE,KAAM,CAAC;IAChBiB,KAAK,EAAEjB,EAAE,CAAE,OAAQ,CAAC;IACpBkB,GAAG,EAAElB,EAAE,CAAE,UAAW;EACrB;AACD,CAAC"}
|
|
@@ -9,6 +9,7 @@ import PatternsMenuItems from './components';
|
|
|
9
9
|
import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
|
|
10
10
|
import PartialSyncingControls from './components/partial-syncing-controls';
|
|
11
11
|
import ResetOverridesControl from './components/reset-overrides-control';
|
|
12
|
+
import { useAddPatternCategory } from './private-hooks';
|
|
12
13
|
import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY, PATTERN_USER_CATEGORY, EXCLUDED_PATTERN_SOURCES, PATTERN_SYNC_TYPES, PARTIAL_SYNCING_SUPPORTED_BLOCKS } from './constants';
|
|
13
14
|
export const privateApis = {};
|
|
14
15
|
lock(privateApis, {
|
|
@@ -21,6 +22,7 @@ lock(privateApis, {
|
|
|
21
22
|
RenamePatternCategoryModal,
|
|
22
23
|
PartialSyncingControls,
|
|
23
24
|
ResetOverridesControl,
|
|
25
|
+
useAddPatternCategory,
|
|
24
26
|
PATTERN_TYPES,
|
|
25
27
|
PATTERN_DEFAULT_CATEGORY,
|
|
26
28
|
PATTERN_USER_CATEGORY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["lock","default","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","privateApis"],"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":"AAAA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,eAAe;AACpC,SACCC,OAAO,IAAIC,kBAAkB,EAC7BC,0BAA0B,QACpB,mCAAmC;AAC1C,SACCF,OAAO,IAAIG,qBAAqB,EAChCC,wBAAwB,QAClB,sCAAsC;AAC7C,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,0BAA0B,MAAM,4CAA4C;AACnF,OAAOC,sBAAsB,MAAM,uCAAuC;AAC1E,OAAOC,qBAAqB,MAAM,sCAAsC;AACxE,SACCC,aAAa,EACbC,wBAAwB,EACxBC,qBAAqB,EACrBC,wBAAwB,EACxBC,kBAAkB,EAClBC,gCAAgC,QAC1B,aAAa;AAEpB,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"names":["lock","default","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","privateApis"],"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":"AAAA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,eAAe;AACpC,SACCC,OAAO,IAAIC,kBAAkB,EAC7BC,0BAA0B,QACpB,mCAAmC;AAC1C,SACCF,OAAO,IAAIG,qBAAqB,EAChCC,wBAAwB,QAClB,sCAAsC;AAC7C,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,0BAA0B,MAAM,4CAA4C;AACnF,OAAOC,sBAAsB,MAAM,uCAAuC;AAC1E,OAAOC,qBAAqB,MAAM,sCAAsC;AACxE,SAASC,qBAAqB,QAAQ,iBAAiB;AACvD,SACCC,aAAa,EACbC,wBAAwB,EACxBC,qBAAqB,EACrBC,wBAAwB,EACxBC,kBAAkB,EAClBC,gCAAgC,QAC1B,aAAa;AAEpB,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BlB,IAAI,CAAEkB,WAAW,EAAE;EAClBhB,kBAAkB;EAClBC,0BAA0B;EAC1BC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC,iBAAiB;EACjBC,0BAA0B;EAC1BC,sBAAsB;EACtBC,qBAAqB;EACrBC,qBAAqB;EACrBC,aAAa;EACbC,wBAAwB;EACxBC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC;AACD,CAAE,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
5
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
6
|
+
import { useMemo } from '@wordpress/element';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { CATEGORY_SLUG } from './components/category-selector';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Helper hook that creates a Map with the core and user patterns categories
|
|
15
|
+
* and removes any duplicates. It's used when we need to create new user
|
|
16
|
+
* categories when creating or importing patterns.
|
|
17
|
+
* This hook also provides a function to find or create a pattern category.
|
|
18
|
+
*
|
|
19
|
+
* @return {Object} The merged categories map and the callback function to find or create a category.
|
|
20
|
+
*/
|
|
21
|
+
export function useAddPatternCategory() {
|
|
22
|
+
const {
|
|
23
|
+
saveEntityRecord,
|
|
24
|
+
invalidateResolution
|
|
25
|
+
} = useDispatch(coreStore);
|
|
26
|
+
const {
|
|
27
|
+
corePatternCategories,
|
|
28
|
+
userPatternCategories
|
|
29
|
+
} = useSelect(select => {
|
|
30
|
+
const {
|
|
31
|
+
getUserPatternCategories,
|
|
32
|
+
getBlockPatternCategories
|
|
33
|
+
} = select(coreStore);
|
|
34
|
+
return {
|
|
35
|
+
corePatternCategories: getBlockPatternCategories(),
|
|
36
|
+
userPatternCategories: getUserPatternCategories()
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
const categoryMap = useMemo(() => {
|
|
40
|
+
// Merge the user and core pattern categories and remove any duplicates.
|
|
41
|
+
const uniqueCategories = new Map();
|
|
42
|
+
userPatternCategories.forEach(category => {
|
|
43
|
+
uniqueCategories.set(category.label.toLowerCase(), {
|
|
44
|
+
label: category.label,
|
|
45
|
+
name: category.name,
|
|
46
|
+
id: category.id
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
corePatternCategories.forEach(category => {
|
|
50
|
+
if (!uniqueCategories.has(category.label.toLowerCase()) &&
|
|
51
|
+
// There are two core categories with `Post` label so explicitly remove the one with
|
|
52
|
+
// the `query` slug to avoid any confusion.
|
|
53
|
+
category.name !== 'query') {
|
|
54
|
+
uniqueCategories.set(category.label.toLowerCase(), {
|
|
55
|
+
label: category.label,
|
|
56
|
+
name: category.name
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return uniqueCategories;
|
|
61
|
+
}, [userPatternCategories, corePatternCategories]);
|
|
62
|
+
async function findOrCreateTerm(term) {
|
|
63
|
+
try {
|
|
64
|
+
const existingTerm = categoryMap.get(term.toLowerCase());
|
|
65
|
+
if (existingTerm?.id) {
|
|
66
|
+
return existingTerm.id;
|
|
67
|
+
}
|
|
68
|
+
// If we have an existing core category we need to match the new user category to the
|
|
69
|
+
// correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
|
|
70
|
+
// category uses the singular `header` as the slug.
|
|
71
|
+
const termData = existingTerm ? {
|
|
72
|
+
name: existingTerm.label,
|
|
73
|
+
slug: existingTerm.name
|
|
74
|
+
} : {
|
|
75
|
+
name: term
|
|
76
|
+
};
|
|
77
|
+
const newTerm = await saveEntityRecord('taxonomy', CATEGORY_SLUG, termData, {
|
|
78
|
+
throwOnError: true
|
|
79
|
+
});
|
|
80
|
+
invalidateResolution('getUserPatternCategories');
|
|
81
|
+
return newTerm.id;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
if (error.code !== 'term_exists') {
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
return error.data.term_id;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
categoryMap,
|
|
91
|
+
findOrCreateTerm
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=private-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useSelect","useDispatch","store","coreStore","useMemo","CATEGORY_SLUG","useAddPatternCategory","saveEntityRecord","invalidateResolution","corePatternCategories","userPatternCategories","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","uniqueCategories","Map","forEach","category","set","label","toLowerCase","name","id","has","findOrCreateTerm","term","existingTerm","get","termData","slug","newTerm","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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/patterns",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.3",
|
|
4
4
|
"description": "Management of user pattern editing.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -31,20 +31,20 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.16.0",
|
|
34
|
-
"@wordpress/a11y": "^3.51.
|
|
35
|
-
"@wordpress/block-editor": "^12.19.
|
|
36
|
-
"@wordpress/blocks": "^12.28.
|
|
37
|
-
"@wordpress/components": "^26.0.
|
|
38
|
-
"@wordpress/compose": "^6.28.
|
|
39
|
-
"@wordpress/core-data": "^6.28.
|
|
40
|
-
"@wordpress/data": "^9.21.
|
|
41
|
-
"@wordpress/element": "^5.28.
|
|
42
|
-
"@wordpress/html-entities": "^3.51.
|
|
43
|
-
"@wordpress/i18n": "^4.51.
|
|
44
|
-
"@wordpress/icons": "^9.42.
|
|
45
|
-
"@wordpress/notices": "^4.19.
|
|
46
|
-
"@wordpress/private-apis": "^0.33.
|
|
47
|
-
"@wordpress/url": "^3.52.
|
|
34
|
+
"@wordpress/a11y": "^3.51.1",
|
|
35
|
+
"@wordpress/block-editor": "^12.19.3",
|
|
36
|
+
"@wordpress/blocks": "^12.28.3",
|
|
37
|
+
"@wordpress/components": "^26.0.2",
|
|
38
|
+
"@wordpress/compose": "^6.28.1",
|
|
39
|
+
"@wordpress/core-data": "^6.28.3",
|
|
40
|
+
"@wordpress/data": "^9.21.1",
|
|
41
|
+
"@wordpress/element": "^5.28.1",
|
|
42
|
+
"@wordpress/html-entities": "^3.51.1",
|
|
43
|
+
"@wordpress/i18n": "^4.51.1",
|
|
44
|
+
"@wordpress/icons": "^9.42.1",
|
|
45
|
+
"@wordpress/notices": "^4.19.1",
|
|
46
|
+
"@wordpress/private-apis": "^0.33.1",
|
|
47
|
+
"@wordpress/url": "^3.52.1",
|
|
48
48
|
"nanoid": "^3.3.4"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"access": "public"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "b12d75c5c5256fda2a0509bb432e20ddd3354d5e"
|
|
58
58
|
}
|
|
@@ -10,21 +10,17 @@ import {
|
|
|
10
10
|
ToggleControl,
|
|
11
11
|
} from '@wordpress/components';
|
|
12
12
|
import { __, _x } from '@wordpress/i18n';
|
|
13
|
-
import { useState
|
|
14
|
-
import { useDispatch
|
|
13
|
+
import { useState } from '@wordpress/element';
|
|
14
|
+
import { useDispatch } from '@wordpress/data';
|
|
15
15
|
import { store as noticesStore } from '@wordpress/notices';
|
|
16
|
-
import { store as coreStore } from '@wordpress/core-data';
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* Internal dependencies
|
|
20
19
|
*/
|
|
21
20
|
import { PATTERN_DEFAULT_CATEGORY, PATTERN_SYNC_TYPES } from '../constants';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Internal dependencies
|
|
25
|
-
*/
|
|
26
21
|
import { store as patternsStore } from '../store';
|
|
27
|
-
import CategorySelector
|
|
22
|
+
import CategorySelector from './category-selector';
|
|
23
|
+
import { useAddPatternCategory } from '../private-hooks';
|
|
28
24
|
import { unlock } from '../lock-unlock';
|
|
29
25
|
|
|
30
26
|
export default function CreatePatternModal( {
|
|
@@ -59,47 +55,9 @@ export function CreatePatternModalContents( {
|
|
|
59
55
|
|
|
60
56
|
const [ isSaving, setIsSaving ] = useState( false );
|
|
61
57
|
const { createPattern } = unlock( useDispatch( patternsStore ) );
|
|
62
|
-
const { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );
|
|
63
58
|
const { createErrorNotice } = useDispatch( noticesStore );
|
|
64
59
|
|
|
65
|
-
const {
|
|
66
|
-
( select ) => {
|
|
67
|
-
const { getUserPatternCategories, getBlockPatternCategories } =
|
|
68
|
-
select( coreStore );
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
corePatternCategories: getBlockPatternCategories(),
|
|
72
|
-
userPatternCategories: getUserPatternCategories(),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
const categoryMap = useMemo( () => {
|
|
78
|
-
// Merge the user and core pattern categories and remove any duplicates.
|
|
79
|
-
const uniqueCategories = new Map();
|
|
80
|
-
userPatternCategories.forEach( ( category ) => {
|
|
81
|
-
uniqueCategories.set( category.label.toLowerCase(), {
|
|
82
|
-
label: category.label,
|
|
83
|
-
name: category.name,
|
|
84
|
-
id: category.id,
|
|
85
|
-
} );
|
|
86
|
-
} );
|
|
87
|
-
|
|
88
|
-
corePatternCategories.forEach( ( category ) => {
|
|
89
|
-
if (
|
|
90
|
-
! uniqueCategories.has( category.label.toLowerCase() ) &&
|
|
91
|
-
// There are two core categories with `Post` label so explicitly remove the one with
|
|
92
|
-
// the `query` slug to avoid any confusion.
|
|
93
|
-
category.name !== 'query'
|
|
94
|
-
) {
|
|
95
|
-
uniqueCategories.set( category.label.toLowerCase(), {
|
|
96
|
-
label: category.label,
|
|
97
|
-
name: category.name,
|
|
98
|
-
} );
|
|
99
|
-
}
|
|
100
|
-
} );
|
|
101
|
-
return uniqueCategories;
|
|
102
|
-
}, [ userPatternCategories, corePatternCategories ] );
|
|
60
|
+
const { categoryMap, findOrCreateTerm } = useAddPatternCategory();
|
|
103
61
|
|
|
104
62
|
async function onCreate( patternTitle, sync ) {
|
|
105
63
|
if ( ! title || isSaving ) {
|
|
@@ -137,38 +95,6 @@ export function CreatePatternModalContents( {
|
|
|
137
95
|
}
|
|
138
96
|
}
|
|
139
97
|
|
|
140
|
-
/**
|
|
141
|
-
* @param {string} term
|
|
142
|
-
* @return {Promise<number>} The pattern category id.
|
|
143
|
-
*/
|
|
144
|
-
async function findOrCreateTerm( term ) {
|
|
145
|
-
try {
|
|
146
|
-
const existingTerm = categoryMap.get( term.toLowerCase() );
|
|
147
|
-
if ( existingTerm && existingTerm.id ) {
|
|
148
|
-
return existingTerm.id;
|
|
149
|
-
}
|
|
150
|
-
// If we have an existing core category we need to match the new user category to the
|
|
151
|
-
// correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
|
|
152
|
-
// category uses the singular `header` as the slug.
|
|
153
|
-
const termData = existingTerm
|
|
154
|
-
? { name: existingTerm.label, slug: existingTerm.name }
|
|
155
|
-
: { name: term };
|
|
156
|
-
const newTerm = await saveEntityRecord(
|
|
157
|
-
'taxonomy',
|
|
158
|
-
CATEGORY_SLUG,
|
|
159
|
-
termData,
|
|
160
|
-
{ throwOnError: true }
|
|
161
|
-
);
|
|
162
|
-
invalidateResolution( 'getUserPatternCategories' );
|
|
163
|
-
return newTerm.id;
|
|
164
|
-
} catch ( error ) {
|
|
165
|
-
if ( error.code !== 'term_exists' ) {
|
|
166
|
-
throw error;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return error.data.term_id;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
98
|
return (
|
|
173
99
|
<form
|
|
174
100
|
onSubmit={ ( event ) => {
|
package/src/constants.js
CHANGED
package/src/private-apis.js
CHANGED
|
@@ -15,6 +15,7 @@ import PatternsMenuItems from './components';
|
|
|
15
15
|
import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
|
|
16
16
|
import PartialSyncingControls from './components/partial-syncing-controls';
|
|
17
17
|
import ResetOverridesControl from './components/reset-overrides-control';
|
|
18
|
+
import { useAddPatternCategory } from './private-hooks';
|
|
18
19
|
import {
|
|
19
20
|
PATTERN_TYPES,
|
|
20
21
|
PATTERN_DEFAULT_CATEGORY,
|
|
@@ -35,6 +36,7 @@ lock( privateApis, {
|
|
|
35
36
|
RenamePatternCategoryModal,
|
|
36
37
|
PartialSyncingControls,
|
|
37
38
|
ResetOverridesControl,
|
|
39
|
+
useAddPatternCategory,
|
|
38
40
|
PATTERN_TYPES,
|
|
39
41
|
PATTERN_DEFAULT_CATEGORY,
|
|
40
42
|
PATTERN_USER_CATEGORY,
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
5
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
6
|
+
import { useMemo } from '@wordpress/element';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import { CATEGORY_SLUG } from './components/category-selector';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Helper hook that creates a Map with the core and user patterns categories
|
|
15
|
+
* and removes any duplicates. It's used when we need to create new user
|
|
16
|
+
* categories when creating or importing patterns.
|
|
17
|
+
* This hook also provides a function to find or create a pattern category.
|
|
18
|
+
*
|
|
19
|
+
* @return {Object} The merged categories map and the callback function to find or create a category.
|
|
20
|
+
*/
|
|
21
|
+
export function useAddPatternCategory() {
|
|
22
|
+
const { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );
|
|
23
|
+
const { corePatternCategories, userPatternCategories } = useSelect(
|
|
24
|
+
( select ) => {
|
|
25
|
+
const { getUserPatternCategories, getBlockPatternCategories } =
|
|
26
|
+
select( coreStore );
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
corePatternCategories: getBlockPatternCategories(),
|
|
30
|
+
userPatternCategories: getUserPatternCategories(),
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
[]
|
|
34
|
+
);
|
|
35
|
+
const categoryMap = useMemo( () => {
|
|
36
|
+
// Merge the user and core pattern categories and remove any duplicates.
|
|
37
|
+
const uniqueCategories = new Map();
|
|
38
|
+
userPatternCategories.forEach( ( category ) => {
|
|
39
|
+
uniqueCategories.set( category.label.toLowerCase(), {
|
|
40
|
+
label: category.label,
|
|
41
|
+
name: category.name,
|
|
42
|
+
id: category.id,
|
|
43
|
+
} );
|
|
44
|
+
} );
|
|
45
|
+
|
|
46
|
+
corePatternCategories.forEach( ( category ) => {
|
|
47
|
+
if (
|
|
48
|
+
! uniqueCategories.has( category.label.toLowerCase() ) &&
|
|
49
|
+
// There are two core categories with `Post` label so explicitly remove the one with
|
|
50
|
+
// the `query` slug to avoid any confusion.
|
|
51
|
+
category.name !== 'query'
|
|
52
|
+
) {
|
|
53
|
+
uniqueCategories.set( category.label.toLowerCase(), {
|
|
54
|
+
label: category.label,
|
|
55
|
+
name: category.name,
|
|
56
|
+
} );
|
|
57
|
+
}
|
|
58
|
+
} );
|
|
59
|
+
return uniqueCategories;
|
|
60
|
+
}, [ userPatternCategories, corePatternCategories ] );
|
|
61
|
+
|
|
62
|
+
async function findOrCreateTerm( term ) {
|
|
63
|
+
try {
|
|
64
|
+
const existingTerm = categoryMap.get( term.toLowerCase() );
|
|
65
|
+
if ( existingTerm?.id ) {
|
|
66
|
+
return existingTerm.id;
|
|
67
|
+
}
|
|
68
|
+
// If we have an existing core category we need to match the new user category to the
|
|
69
|
+
// correct slug rather than autogenerating it to prevent duplicates, eg. the core `Headers`
|
|
70
|
+
// category uses the singular `header` as the slug.
|
|
71
|
+
const termData = existingTerm
|
|
72
|
+
? { name: existingTerm.label, slug: existingTerm.name }
|
|
73
|
+
: { name: term };
|
|
74
|
+
const newTerm = await saveEntityRecord(
|
|
75
|
+
'taxonomy',
|
|
76
|
+
CATEGORY_SLUG,
|
|
77
|
+
termData,
|
|
78
|
+
{ throwOnError: true }
|
|
79
|
+
);
|
|
80
|
+
invalidateResolution( 'getUserPatternCategories' );
|
|
81
|
+
return newTerm.id;
|
|
82
|
+
} catch ( error ) {
|
|
83
|
+
if ( error.code !== 'term_exists' ) {
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
return error.data.term_id;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return { categoryMap, findOrCreateTerm };
|
|
91
|
+
}
|