@wordpress/patterns 1.5.1-next.f8d8eceb.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/components/create-pattern-modal.js +1 -1
- package/build/components/create-pattern-modal.js.map +1 -1
- package/build/components/patterns-manage-button.js +4 -4
- package/build/components/patterns-manage-button.js.map +1 -1
- package/build/components/rename-pattern-category-modal.js +44 -5
- package/build/components/rename-pattern-category-modal.js.map +1 -1
- package/build/constants.js +3 -3
- package/build/constants.js.map +1 -1
- package/build/private-apis.js +1 -1
- package/build/private-apis.js.map +1 -1
- package/build-module/components/create-pattern-modal.js +2 -2
- package/build-module/components/create-pattern-modal.js.map +1 -1
- package/build-module/components/patterns-manage-button.js +4 -4
- package/build-module/components/patterns-manage-button.js.map +1 -1
- package/build-module/components/rename-pattern-category-modal.js +45 -6
- package/build-module/components/rename-pattern-category-modal.js.map +1 -1
- package/build-module/constants.js +1 -1
- package/build-module/constants.js.map +1 -1
- package/build-module/private-apis.js +2 -2
- package/build-module/private-apis.js.map +1 -1
- package/build-style/style-rtl.css +9 -0
- package/build-style/style.css +9 -0
- package/package.json +16 -15
- package/src/components/create-pattern-modal.js +5 -2
- package/src/components/patterns-manage-button.js +3 -3
- package/src/components/rename-pattern-category-modal.js +66 -12
- package/src/components/style.scss +9 -0
- package/src/constants.js +1 -2
- package/src/private-apis.js +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -165,7 +165,7 @@ function CreatePatternModal({
|
|
|
165
165
|
onChange: setCategoryTerms,
|
|
166
166
|
categoryMap: categoryMap
|
|
167
167
|
}), (0, _react.createElement)(_components.ToggleControl, {
|
|
168
|
-
label: (0, _i18n.
|
|
168
|
+
label: (0, _i18n._x)('Synced', 'Option that makes an individual pattern synchronized'),
|
|
169
169
|
help: (0, _i18n.__)('Editing the pattern will update it anywhere it is used.'),
|
|
170
170
|
checked: syncType === _constants.PATTERN_SYNC_TYPES.full,
|
|
171
171
|
onChange: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_components","require","_i18n","_element","_data","_notices","_coreData","_constants","_store","_categorySelector","_interopRequireWildcard","_lockUnlock","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CreatePatternModal","confirmLabel","__","defaultCategories","className","content","modalTitle","onClose","onError","onSuccess","defaultSyncType","PATTERN_SYNC_TYPES","full","defaultTitle","syncType","setSyncType","useState","categoryTerms","setCategoryTerms","title","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","name","value","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","PATTERN_DEFAULT_CATEGORY","error","message","type","id","term","existingTerm","termData","slug","newTerm","CATEGORY_SLUG","throwOnError","code","data","term_id","_react","createElement","Modal","onRequestClose","overlayClassName","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","__nextHasNoMarginBottom","onChange","placeholder","ToggleControl","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 { __ } 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\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tclassName = 'patterns-menu-items__convert-modal',\n\tcontent,\n\tmodalTitle = __( 'Create pattern' ),\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\t[ ...userPatternCategories, ...corePatternCategories ].forEach(\n\t\t\t( category ) => {\n\t\t\t\tif (\n\t\t\t\t\t! uniqueCategories.has( category.label ) &&\n\t\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\t\tcategory.name !== 'query'\n\t\t\t\t) {\n\t\t\t\t\t// We need to store the name separately as this is used as the slug in the\n\t\t\t\t\t// taxonomy and may vary from the label.\n\t\t\t\t\tuniqueCategories.set( category.label, {\n\t\t\t\t\t\tlabel: category.label,\n\t\t\t\t\t\tvalue: category.label,\n\t\t\t\t\t\tname: category.name,\n\t\t\t\t\t} );\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\t// We need to match any existing term to the correct slug to prevent duplicates, eg.\n\t\t\t// the core `Headers` category uses the singular `header` as the slug.\n\t\t\tconst existingTerm = categoryMap.get( term );\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\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ () => {\n\t\t\t\tonClose();\n\t\t\t\tsetTitle( '' );\n\t\t\t} }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonCreate( title, syncType );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CategorySelector\n\t\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_components","require","_i18n","_element","_data","_notices","_coreData","_constants","_store","_categorySelector","_interopRequireWildcard","_lockUnlock","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CreatePatternModal","confirmLabel","__","defaultCategories","className","content","modalTitle","onClose","onError","onSuccess","defaultSyncType","PATTERN_SYNC_TYPES","full","defaultTitle","syncType","setSyncType","useState","categoryTerms","setCategoryTerms","title","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","name","value","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","PATTERN_DEFAULT_CATEGORY","error","message","type","id","term","existingTerm","termData","slug","newTerm","CATEGORY_SLUG","throwOnError","code","data","term_id","_react","createElement","Modal","onRequestClose","overlayClassName","onSubmit","event","preventDefault","__experimentalVStack","spacing","TextControl","__nextHasNoMarginBottom","onChange","placeholder","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\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tclassName = 'patterns-menu-items__convert-modal',\n\tcontent,\n\tmodalTitle = __( 'Create pattern' ),\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\t[ ...userPatternCategories, ...corePatternCategories ].forEach(\n\t\t\t( category ) => {\n\t\t\t\tif (\n\t\t\t\t\t! uniqueCategories.has( category.label ) &&\n\t\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\t\tcategory.name !== 'query'\n\t\t\t\t) {\n\t\t\t\t\t// We need to store the name separately as this is used as the slug in the\n\t\t\t\t\t// taxonomy and may vary from the label.\n\t\t\t\t\tuniqueCategories.set( category.label, {\n\t\t\t\t\t\tlabel: category.label,\n\t\t\t\t\t\tvalue: category.label,\n\t\t\t\t\t\tname: category.name,\n\t\t\t\t\t} );\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\t// We need to match any existing term to the correct slug to prevent duplicates, eg.\n\t\t\t// the core `Headers` category uses the singular `header` as the slug.\n\t\t\tconst existingTerm = categoryMap.get( term );\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\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ () => {\n\t\t\t\tonClose();\n\t\t\t\tsetTitle( '' );\n\t\t\t} }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonCreate( title, syncType );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CategorySelector\n\t\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -65,11 +65,11 @@ function PatternsManageButton({
|
|
|
65
65
|
if (!isVisible) {
|
|
66
66
|
return null;
|
|
67
67
|
}
|
|
68
|
-
return (0, _react.createElement)(_react.Fragment, null, (0, _react.createElement)(_components.MenuItem, {
|
|
69
|
-
href: managePatternsUrl
|
|
70
|
-
}, (0, _i18n.__)('Manage patterns')), canRemove && (0, _react.createElement)(_components.MenuItem, {
|
|
68
|
+
return (0, _react.createElement)(_react.Fragment, null, canRemove && (0, _react.createElement)(_components.MenuItem, {
|
|
71
69
|
onClick: () => convertSyncedPatternToStatic(clientId)
|
|
72
|
-
}, innerBlockCount > 1 ? (0, _i18n.__)('Detach patterns') : (0, _i18n.__)('Detach pattern')))
|
|
70
|
+
}, innerBlockCount > 1 ? (0, _i18n.__)('Detach patterns') : (0, _i18n.__)('Detach pattern')), (0, _react.createElement)(_components.MenuItem, {
|
|
71
|
+
href: managePatternsUrl
|
|
72
|
+
}, (0, _i18n.__)('Manage patterns')));
|
|
73
73
|
}
|
|
74
74
|
var _default = PatternsManageButton;
|
|
75
75
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_components","require","_i18n","_blocks","_data","_blockEditor","_url","_coreData","_store","_lockUnlock","PatternsManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","useSelect","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","isReusableBlock","attributes","ref","addQueryArgs","path","post_type","convertSyncedPatternToStatic","unlock","useDispatch","patternsStore","_react","createElement","Fragment","MenuItem","
|
|
1
|
+
{"version":3,"names":["_components","require","_i18n","_blocks","_data","_blockEditor","_url","_coreData","_store","_lockUnlock","PatternsManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","useSelect","select","getBlock","canRemoveBlock","getBlockCount","getSettings","blockEditorStore","canUser","coreStore","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","isReusableBlock","attributes","ref","addQueryArgs","path","post_type","convertSyncedPatternToStatic","unlock","useDispatch","patternsStore","_react","createElement","Fragment","MenuItem","onClick","__","href","_default","exports","default"],"sources":["@wordpress/patterns/src/components/patterns-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as patternsStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\nfunction PatternsManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, innerBlockCount, managePatternsUrl } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst { canUser } = select( coreStore );\n\t\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\t\treturn {\n\t\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\t\tisVisible:\n\t\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t\t),\n\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t\t } ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t// Ignore reason: false positive of the lint rule.\n\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\tconst { convertSyncedPatternToStatic } = unlock(\n\t\tuseDispatch( patternsStore )\n\t);\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem\n\t\t\t\t\tonClick={ () => convertSyncedPatternToStatic( clientId ) }\n\t\t\t\t>\n\t\t\t\t\t{ innerBlockCount > 1\n\t\t\t\t\t\t? __( 'Detach patterns' )\n\t\t\t\t\t\t: __( 'Detach pattern' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t</>\n\t);\n}\n\nexport default PatternsManageButton;\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AAKA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAfA;AACA;AACA;;AASA;AACA;AACA;;AAIA,SAASS,oBAAoBA,CAAE;EAAEC;AAAS,CAAC,EAAG;EAC7C,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GACjE,IAAAC,eAAS,EACNC,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEK,kBAAiB,CAAC;IAC3B,MAAM;MAAEC;IAAQ,CAAC,GAAGN,MAAM,CAAEO,eAAU,CAAC;IACvC,MAAMC,aAAa,GAAGP,QAAQ,CAAEP,QAAS,CAAC;IAC1C,MAAMe,YAAY,GAAGL,WAAW,CAAC,CAAC,CAACM,2BAA2B;IAE9D,OAAO;MACNf,SAAS,EAAEO,cAAc,CAAER,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAEY,aAAa,IAChB,IAAAG,uBAAe,EAAEH,aAAc,CAAC,IAChC,CAAC,CAAEF,OAAO,CACT,QAAQ,EACR,QAAQ,EACRE,aAAa,CAACI,UAAU,CAACC,GAC1B,CAAC;MACFhB,eAAe,EAAEM,aAAa,CAAET,QAAS,CAAC;MAC1C;MACA;MACA;MACAI,iBAAiB,EAChBW,YAAY,IAAIH,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3C,IAAAQ,iBAAY,EAAE,iBAAiB,EAAE;QACjCC,IAAI,EAAE;MACN,CAAE,CAAC,GACH,IAAAD,iBAAY,EAAE,UAAU,EAAE;QAC1BE,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEtB,QAAQ,CACX,CAAC;;EAEF;EACA;EACA,MAAM;IAAEuB;EAA6B,CAAC,GAAG,IAAAC,kBAAM,EAC9C,IAAAC,iBAAW,EAAEC,YAAc,CAC5B,CAAC;EAED,IAAK,CAAExB,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACC,IAAAyB,MAAA,CAAAC,aAAA,EAAAD,MAAA,CAAAE,QAAA,QACG5B,SAAS,IACV,IAAA0B,MAAA,CAAAC,aAAA,EAACvC,WAAA,CAAAyC,QAAQ;IACRC,OAAO,EAAGA,CAAA,KAAMR,4BAA4B,CAAEvB,QAAS;EAAG,GAExDG,eAAe,GAAG,CAAC,GAClB,IAAA6B,QAAE,EAAE,iBAAkB,CAAC,GACvB,IAAAA,QAAE,EAAE,gBAAiB,CACf,CACV,EACD,IAAAL,MAAA,CAAAC,aAAA,EAACvC,WAAA,CAAAyC,QAAQ;IAACG,IAAI,EAAG7B;EAAmB,GACjC,IAAA4B,QAAE,EAAE,iBAAkB,CACf,CACT,CAAC;AAEL;AAAC,IAAAE,QAAA,GAEcnC,oBAAoB;AAAAoC,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -12,6 +12,7 @@ var _element = require("@wordpress/element");
|
|
|
12
12
|
var _htmlEntities = require("@wordpress/html-entities");
|
|
13
13
|
var _i18n = require("@wordpress/i18n");
|
|
14
14
|
var _notices = require("@wordpress/notices");
|
|
15
|
+
var _a11y = require("@wordpress/a11y");
|
|
15
16
|
var _categorySelector = require("./category-selector");
|
|
16
17
|
/**
|
|
17
18
|
* WordPress dependencies
|
|
@@ -23,13 +24,18 @@ var _categorySelector = require("./category-selector");
|
|
|
23
24
|
|
|
24
25
|
function RenamePatternCategoryModal({
|
|
25
26
|
category,
|
|
27
|
+
existingCategories,
|
|
26
28
|
onClose,
|
|
27
29
|
onError,
|
|
28
30
|
onSuccess,
|
|
29
31
|
...props
|
|
30
32
|
}) {
|
|
33
|
+
const id = (0, _element.useId)();
|
|
34
|
+
const textControlRef = (0, _element.useRef)();
|
|
31
35
|
const [name, setName] = (0, _element.useState)((0, _htmlEntities.decodeEntities)(category.name));
|
|
32
36
|
const [isSaving, setIsSaving] = (0, _element.useState)(false);
|
|
37
|
+
const [validationMessage, setValidationMessage] = (0, _element.useState)(false);
|
|
38
|
+
const validationMessageId = validationMessage ? `patterns-rename-pattern-category-modal__validation-message-${id}` : undefined;
|
|
33
39
|
const {
|
|
34
40
|
saveEntityRecord,
|
|
35
41
|
invalidateResolution
|
|
@@ -38,9 +44,35 @@ function RenamePatternCategoryModal({
|
|
|
38
44
|
createErrorNotice,
|
|
39
45
|
createSuccessNotice
|
|
40
46
|
} = (0, _data.useDispatch)(_notices.store);
|
|
41
|
-
const
|
|
47
|
+
const onChange = newName => {
|
|
48
|
+
if (validationMessage) {
|
|
49
|
+
setValidationMessage(undefined);
|
|
50
|
+
}
|
|
51
|
+
setName(newName);
|
|
52
|
+
};
|
|
53
|
+
const onSave = async event => {
|
|
42
54
|
event.preventDefault();
|
|
43
|
-
if (
|
|
55
|
+
if (isSaving) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (!name || name === category.name) {
|
|
59
|
+
const message = (0, _i18n.__)('Please enter a new name for this category.');
|
|
60
|
+
(0, _a11y.speak)(message, 'assertive');
|
|
61
|
+
setValidationMessage(message);
|
|
62
|
+
textControlRef.current?.focus();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check existing categories to avoid creating duplicates.
|
|
67
|
+
if (existingCategories.patternCategories.find(existingCategory => {
|
|
68
|
+
// Compare the id so that the we don't disallow the user changing the case of their current category
|
|
69
|
+
// (i.e. renaming 'test' to 'Test').
|
|
70
|
+
return existingCategory.id !== category.id && existingCategory.label.toLowerCase() === name.toLowerCase();
|
|
71
|
+
})) {
|
|
72
|
+
const message = (0, _i18n.__)('This category already exists. Please use a different name.');
|
|
73
|
+
(0, _a11y.speak)(message, 'assertive');
|
|
74
|
+
setValidationMessage(message);
|
|
75
|
+
textControlRef.current?.focus();
|
|
44
76
|
return;
|
|
45
77
|
}
|
|
46
78
|
try {
|
|
@@ -82,16 +114,23 @@ function RenamePatternCategoryModal({
|
|
|
82
114
|
onRequestClose: onRequestClose,
|
|
83
115
|
...props
|
|
84
116
|
}, (0, _react.createElement)("form", {
|
|
85
|
-
onSubmit:
|
|
117
|
+
onSubmit: onSave
|
|
86
118
|
}, (0, _react.createElement)(_components.__experimentalVStack, {
|
|
87
119
|
spacing: "5"
|
|
120
|
+
}, (0, _react.createElement)(_components.__experimentalVStack, {
|
|
121
|
+
spacing: "2"
|
|
88
122
|
}, (0, _react.createElement)(_components.TextControl, {
|
|
123
|
+
ref: textControlRef,
|
|
89
124
|
__nextHasNoMarginBottom: true,
|
|
90
125
|
label: (0, _i18n.__)('Name'),
|
|
91
126
|
value: name,
|
|
92
|
-
onChange:
|
|
127
|
+
onChange: onChange,
|
|
128
|
+
"aria-describedby": validationMessageId,
|
|
93
129
|
required: true
|
|
94
|
-
}), (0, _react.createElement)(
|
|
130
|
+
}), validationMessage && (0, _react.createElement)("span", {
|
|
131
|
+
className: "patterns-rename-pattern-category-modal__validation-message",
|
|
132
|
+
id: validationMessageId
|
|
133
|
+
}, validationMessage)), (0, _react.createElement)(_components.__experimentalHStack, {
|
|
95
134
|
justify: "right"
|
|
96
135
|
}, (0, _react.createElement)(_components.Button, {
|
|
97
136
|
variant: "tertiary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_components","require","_coreData","_data","_element","_htmlEntities","_i18n","_notices","_categorySelector","RenamePatternCategoryModal","category","onClose","onError","onSuccess","props","name","setName","useState","decodeEntities","isSaving","setIsSaving","saveEntityRecord","invalidateResolution","useDispatch","coreStore","createErrorNotice","createSuccessNotice","noticesStore","
|
|
1
|
+
{"version":3,"names":["_components","require","_coreData","_data","_element","_htmlEntities","_i18n","_notices","_a11y","_categorySelector","RenamePatternCategoryModal","category","existingCategories","onClose","onError","onSuccess","props","id","useId","textControlRef","useRef","name","setName","useState","decodeEntities","isSaving","setIsSaving","validationMessage","setValidationMessage","validationMessageId","undefined","saveEntityRecord","invalidateResolution","useDispatch","coreStore","createErrorNotice","createSuccessNotice","noticesStore","onChange","newName","onSave","event","preventDefault","message","__","speak","current","focus","patternCategories","find","existingCategory","label","toLowerCase","savedRecord","CATEGORY_SLUG","slug","type","error","onRequestClose","_react","createElement","Modal","title","onSubmit","__experimentalVStack","spacing","TextControl","ref","__nextHasNoMarginBottom","value","required","className","__experimentalHStack","justify","Button","variant","onClick","isBusy"],"sources":["@wordpress/patterns/src/components/rename-pattern-category-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} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { useId, useRef, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { CATEGORY_SLUG } from './category-selector';\n\nexport default function RenamePatternCategoryModal( {\n\tcategory,\n\texistingCategories,\n\tonClose,\n\tonError,\n\tonSuccess,\n\t...props\n} ) {\n\tconst id = useId();\n\tconst textControlRef = useRef();\n\tconst [ name, setName ] = useState( decodeEntities( category.name ) );\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst [ validationMessage, setValidationMessage ] = useState( false );\n\tconst validationMessageId = validationMessage\n\t\t? `patterns-rename-pattern-category-modal__validation-message-${ id }`\n\t\t: undefined;\n\n\tconst { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst onChange = ( newName ) => {\n\t\tif ( validationMessage ) {\n\t\t\tsetValidationMessage( undefined );\n\t\t}\n\t\tsetName( newName );\n\t};\n\n\tconst onSave = async ( event ) => {\n\t\tevent.preventDefault();\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! name || name === category.name ) {\n\t\t\tconst message = __( 'Please enter a new name for this category.' );\n\t\t\tspeak( message, 'assertive' );\n\t\t\tsetValidationMessage( message );\n\t\t\ttextControlRef.current?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\t// Check existing categories to avoid creating duplicates.\n\t\tif (\n\t\t\texistingCategories.patternCategories.find( ( existingCategory ) => {\n\t\t\t\t// Compare the id so that the we don't disallow the user changing the case of their current category\n\t\t\t\t// (i.e. renaming 'test' to 'Test').\n\t\t\t\treturn (\n\t\t\t\t\texistingCategory.id !== category.id &&\n\t\t\t\t\texistingCategory.label.toLowerCase() === name.toLowerCase()\n\t\t\t\t);\n\t\t\t} )\n\t\t) {\n\t\t\tconst message = __(\n\t\t\t\t'This category already exists. Please use a different name.'\n\t\t\t);\n\t\t\tspeak( message, 'assertive' );\n\t\t\tsetValidationMessage( message );\n\t\t\ttextControlRef.current?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSaving( true );\n\n\t\t\t// User pattern category properties may differ as they can be\n\t\t\t// normalized for use alongside template part areas, core pattern\n\t\t\t// categories etc. As a result we won't just destructure the passed\n\t\t\t// category object.\n\t\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\tCATEGORY_SLUG,\n\t\t\t\t{\n\t\t\t\t\tid: category.id,\n\t\t\t\t\tslug: category.slug,\n\t\t\t\t\tname,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\tonSuccess?.( savedRecord );\n\t\t\tonClose();\n\n\t\t\tcreateSuccessNotice( __( 'Pattern category renamed.' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-category-update',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tonError?.();\n\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-category-update',\n\t\t\t} );\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t\tsetName( '' );\n\t\t}\n\t};\n\n\tconst onRequestClose = () => {\n\t\tonClose();\n\t\tsetName( '' );\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Rename' ) }\n\t\t\tonRequestClose={ onRequestClose }\n\t\t\t{ ...props }\n\t\t>\n\t\t\t<form onSubmit={ onSave }>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<VStack spacing=\"2\">\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tref={ textControlRef }\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\tvalue={ name }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\taria-describedby={ validationMessageId }\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ validationMessage && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"patterns-rename-pattern-category-modal__validation-message\"\n\t\t\t\t\t\t\t\tid={ validationMessageId }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ validationMessage }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</VStack>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onRequestClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={\n\t\t\t\t\t\t\t\t! name || name === category.name || isSaving\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
package/build/constants.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.PATTERN_USER_CATEGORY = exports.PATTERN_TYPES = exports.PATTERN_SYNC_TYPES = exports.PATTERN_DEFAULT_CATEGORY = exports.
|
|
6
|
+
exports.PATTERN_USER_CATEGORY = exports.PATTERN_TYPES = exports.PATTERN_SYNC_TYPES = exports.PATTERN_DEFAULT_CATEGORY = exports.EXCLUDED_PATTERN_SOURCES = void 0;
|
|
7
7
|
const PATTERN_TYPES = {
|
|
8
8
|
theme: 'pattern',
|
|
9
9
|
user: 'wp_block'
|
|
@@ -13,8 +13,8 @@ const PATTERN_DEFAULT_CATEGORY = 'all-patterns';
|
|
|
13
13
|
exports.PATTERN_DEFAULT_CATEGORY = PATTERN_DEFAULT_CATEGORY;
|
|
14
14
|
const PATTERN_USER_CATEGORY = 'my-patterns';
|
|
15
15
|
exports.PATTERN_USER_CATEGORY = PATTERN_USER_CATEGORY;
|
|
16
|
-
const
|
|
17
|
-
exports.
|
|
16
|
+
const EXCLUDED_PATTERN_SOURCES = ['core', 'pattern-directory/core', 'pattern-directory/featured'];
|
|
17
|
+
exports.EXCLUDED_PATTERN_SOURCES = EXCLUDED_PATTERN_SOURCES;
|
|
18
18
|
const PATTERN_SYNC_TYPES = {
|
|
19
19
|
full: 'fully',
|
|
20
20
|
unsynced: 'unsynced'
|
package/build/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PATTERN_TYPES","theme","user","exports","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","
|
|
1
|
+
{"version":3,"names":["PATTERN_TYPES","theme","user","exports","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","full","unsynced"],"sources":["@wordpress/patterns/src/constants.js"],"sourcesContent":["export const PATTERN_TYPES = {\n\ttheme: 'pattern',\n\tuser: 'wp_block',\n};\n\nexport const PATTERN_DEFAULT_CATEGORY = 'all-patterns';\nexport const PATTERN_USER_CATEGORY = 'my-patterns';\nexport const EXCLUDED_PATTERN_SOURCES = [\n\t'core',\n\t'pattern-directory/core',\n\t'pattern-directory/featured',\n];\nexport const PATTERN_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n"],"mappings":";;;;;;AAAO,MAAMA,aAAa,GAAG;EAC5BC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACP,CAAC;AAACC,OAAA,CAAAH,aAAA,GAAAA,aAAA;AAEK,MAAMI,wBAAwB,GAAG,cAAc;AAACD,OAAA,CAAAC,wBAAA,GAAAA,wBAAA;AAChD,MAAMC,qBAAqB,GAAG,aAAa;AAACF,OAAA,CAAAE,qBAAA,GAAAA,qBAAA;AAC5C,MAAMC,wBAAwB,GAAG,CACvC,MAAM,EACN,wBAAwB,EACxB,4BAA4B,CAC5B;AAACH,OAAA,CAAAG,wBAAA,GAAAA,wBAAA;AACK,MAAMC,kBAAkB,GAAG;EACjCC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;AAACN,OAAA,CAAAI,kBAAA,GAAAA,kBAAA"}
|
package/build/private-apis.js
CHANGED
|
@@ -27,7 +27,7 @@ exports.privateApis = privateApis;
|
|
|
27
27
|
PATTERN_TYPES: _constants.PATTERN_TYPES,
|
|
28
28
|
PATTERN_DEFAULT_CATEGORY: _constants.PATTERN_DEFAULT_CATEGORY,
|
|
29
29
|
PATTERN_USER_CATEGORY: _constants.PATTERN_USER_CATEGORY,
|
|
30
|
-
|
|
30
|
+
EXCLUDED_PATTERN_SOURCES: _constants.EXCLUDED_PATTERN_SOURCES,
|
|
31
31
|
PATTERN_SYNC_TYPES: _constants.PATTERN_SYNC_TYPES
|
|
32
32
|
});
|
|
33
33
|
//# sourceMappingURL=private-apis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lockUnlock","require","_createPatternModal","_interopRequireDefault","_duplicatePatternModal","_renamePatternModal","_components","_renamePatternCategoryModal","_constants","privateApis","exports","lock","CreatePatternModal","DuplicatePatternModal","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","
|
|
1
|
+
{"version":3,"names":["_lockUnlock","require","_createPatternModal","_interopRequireDefault","_duplicatePatternModal","_renamePatternModal","_components","_renamePatternCategoryModal","_constants","privateApis","exports","lock","CreatePatternModal","DuplicatePatternModal","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport CreatePatternModal from './components/create-pattern-modal';\nimport DuplicatePatternModal 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 {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tDuplicatePatternModal,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,sBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,mBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,WAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,2BAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AATA;AACA;AACA;;AAeO,MAAMQ,WAAW,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,WAAA,GAAAA,WAAA;AAC9B,IAAAE,gBAAI,EAAEF,WAAW,EAAE;EAClBG,kBAAkB,EAAlBA,2BAAkB;EAClBC,qBAAqB,EAArBA,8BAAqB;EACrBC,kBAAkB,EAAlBA,2BAAkB;EAClBC,iBAAiB,EAAjBA,mBAAiB;EACjBC,0BAA0B,EAA1BA,mCAA0B;EAC1BC,aAAa,EAAbA,wBAAa;EACbC,wBAAwB,EAAxBA,mCAAwB;EACxBC,qBAAqB,EAArBA,gCAAqB;EACrBC,wBAAwB,EAAxBA,mCAAwB;EACxBC,kBAAkB,EAAlBA;AACD,CAAE,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { createElement } from "react";
|
|
|
3
3
|
* WordPress dependencies
|
|
4
4
|
*/
|
|
5
5
|
import { Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack, ToggleControl } from '@wordpress/components';
|
|
6
|
-
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { __, _x } from '@wordpress/i18n';
|
|
7
7
|
import { useState, useMemo } from '@wordpress/element';
|
|
8
8
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
9
9
|
import { store as noticesStore } from '@wordpress/notices';
|
|
@@ -156,7 +156,7 @@ export default function CreatePatternModal({
|
|
|
156
156
|
onChange: setCategoryTerms,
|
|
157
157
|
categoryMap: categoryMap
|
|
158
158
|
}), createElement(ToggleControl, {
|
|
159
|
-
label:
|
|
159
|
+
label: _x('Synced', 'Option that makes an individual pattern synchronized'),
|
|
160
160
|
help: __('Editing the pattern will update it anywhere it is used.'),
|
|
161
161
|
checked: syncType === PATTERN_SYNC_TYPES.full,
|
|
162
162
|
onChange: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","ToggleControl","__","useState","useMemo","useDispatch","useSelect","store","noticesStore","coreStore","PATTERN_DEFAULT_CATEGORY","PATTERN_SYNC_TYPES","patternsStore","CategorySelector","CATEGORY_SLUG","unlock","CreatePatternModal","confirmLabel","defaultCategories","className","content","modalTitle","onClose","onError","onSuccess","defaultSyncType","full","defaultTitle","syncType","setSyncType","categoryTerms","setCategoryTerms","title","setTitle","isSaving","setIsSaving","createPattern","saveEntityRecord","invalidateResolution","createErrorNotice","corePatternCategories","userPatternCategories","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","uniqueCategories","Map","forEach","category","has","label","name","set","value","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","error","message","type","id","term","existingTerm","get","termData","slug","newTerm","throwOnError","code","data","term_id","createElement","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__nextHasNoMarginBottom","onChange","placeholder","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 { __ } 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\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tclassName = 'patterns-menu-items__convert-modal',\n\tcontent,\n\tmodalTitle = __( 'Create pattern' ),\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\t[ ...userPatternCategories, ...corePatternCategories ].forEach(\n\t\t\t( category ) => {\n\t\t\t\tif (\n\t\t\t\t\t! uniqueCategories.has( category.label ) &&\n\t\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\t\tcategory.name !== 'query'\n\t\t\t\t) {\n\t\t\t\t\t// We need to store the name separately as this is used as the slug in the\n\t\t\t\t\t// taxonomy and may vary from the label.\n\t\t\t\t\tuniqueCategories.set( category.label, {\n\t\t\t\t\t\tlabel: category.label,\n\t\t\t\t\t\tvalue: category.label,\n\t\t\t\t\t\tname: category.name,\n\t\t\t\t\t} );\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\t// We need to match any existing term to the correct slug to prevent duplicates, eg.\n\t\t\t// the core `Headers` category uses the singular `header` as the slug.\n\t\t\tconst existingTerm = categoryMap.get( term );\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\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ () => {\n\t\t\t\tonClose();\n\t\t\t\tsetTitle( '' );\n\t\t\t} }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonCreate( title, syncType );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CategorySelector\n\t\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Synced' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
|
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","confirmLabel","defaultCategories","className","content","modalTitle","onClose","onError","onSuccess","defaultSyncType","full","defaultTitle","syncType","setSyncType","categoryTerms","setCategoryTerms","title","setTitle","isSaving","setIsSaving","createPattern","saveEntityRecord","invalidateResolution","createErrorNotice","corePatternCategories","userPatternCategories","select","getUserPatternCategories","getBlockPatternCategories","categoryMap","uniqueCategories","Map","forEach","category","has","label","name","set","value","onCreate","patternTitle","sync","categories","Promise","all","map","termName","findOrCreateTerm","newPattern","pattern","categoryId","error","message","type","id","term","existingTerm","get","termData","slug","newTerm","throwOnError","code","data","term_id","createElement","onRequestClose","overlayClassName","onSubmit","event","preventDefault","spacing","__nextHasNoMarginBottom","onChange","placeholder","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\tconfirmLabel = __( 'Create' ),\n\tdefaultCategories = [],\n\tclassName = 'patterns-menu-items__convert-modal',\n\tcontent,\n\tmodalTitle = __( 'Create pattern' ),\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\t[ ...userPatternCategories, ...corePatternCategories ].forEach(\n\t\t\t( category ) => {\n\t\t\t\tif (\n\t\t\t\t\t! uniqueCategories.has( category.label ) &&\n\t\t\t\t\t// There are two core categories with `Post` label so explicitly remove the one with\n\t\t\t\t\t// the `query` slug to avoid any confusion.\n\t\t\t\t\tcategory.name !== 'query'\n\t\t\t\t) {\n\t\t\t\t\t// We need to store the name separately as this is used as the slug in the\n\t\t\t\t\t// taxonomy and may vary from the label.\n\t\t\t\t\tuniqueCategories.set( category.label, {\n\t\t\t\t\t\tlabel: category.label,\n\t\t\t\t\t\tvalue: category.label,\n\t\t\t\t\t\tname: category.name,\n\t\t\t\t\t} );\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\t// We need to match any existing term to the correct slug to prevent duplicates, eg.\n\t\t\t// the core `Headers` category uses the singular `header` as the slug.\n\t\t\tconst existingTerm = categoryMap.get( term );\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\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle }\n\t\t\tonRequestClose={ () => {\n\t\t\t\tonClose();\n\t\t\t\tsetTitle( '' );\n\t\t\t} }\n\t\t\toverlayClassName={ className }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonCreate( title, syncType );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\tplaceholder={ __( 'My pattern' ) }\n\t\t\t\t\t\tclassName=\"patterns-create-modal__name-input\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CategorySelector\n\t\t\t\t\t\tcategoryTerms={ categoryTerms }\n\t\t\t\t\t\tonChange={ setCategoryTerms }\n\t\t\t\t\t\tcategoryMap={ categoryMap }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t'Synced',\n\t\t\t\t\t\t\t'Option that makes an individual pattern synchronized'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Editing the pattern will update it anywhere it is used.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tchecked={ syncType === PATTERN_SYNC_TYPES.full }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tsetSyncType(\n\t\t\t\t\t\t\t\tsyncType === PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t\t\t? PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t\t\t\t\t\t: PATTERN_SYNC_TYPES.full\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\tsetTitle( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={ ! title || isSaving }\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -58,11 +58,11 @@ function PatternsManageButton({
|
|
|
58
58
|
if (!isVisible) {
|
|
59
59
|
return null;
|
|
60
60
|
}
|
|
61
|
-
return createElement(Fragment, null, createElement(MenuItem, {
|
|
62
|
-
href: managePatternsUrl
|
|
63
|
-
}, __('Manage patterns')), canRemove && createElement(MenuItem, {
|
|
61
|
+
return createElement(Fragment, null, canRemove && createElement(MenuItem, {
|
|
64
62
|
onClick: () => convertSyncedPatternToStatic(clientId)
|
|
65
|
-
}, innerBlockCount > 1 ? __('Detach patterns') : __('Detach pattern'))
|
|
63
|
+
}, innerBlockCount > 1 ? __('Detach patterns') : __('Detach pattern')), createElement(MenuItem, {
|
|
64
|
+
href: managePatternsUrl
|
|
65
|
+
}, __('Manage patterns')));
|
|
66
66
|
}
|
|
67
67
|
export default PatternsManageButton;
|
|
68
68
|
//# sourceMappingURL=patterns-manage-button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","store","blockEditorStore","addQueryArgs","coreStore","patternsStore","unlock","PatternsManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","canUser","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","convertSyncedPatternToStatic","createElement","Fragment","
|
|
1
|
+
{"version":3,"names":["MenuItem","__","isReusableBlock","useSelect","useDispatch","store","blockEditorStore","addQueryArgs","coreStore","patternsStore","unlock","PatternsManageButton","clientId","canRemove","isVisible","innerBlockCount","managePatternsUrl","select","getBlock","canRemoveBlock","getBlockCount","getSettings","canUser","reusableBlock","isBlockTheme","__unstableIsBlockBasedTheme","attributes","ref","path","post_type","convertSyncedPatternToStatic","createElement","Fragment","onClick","href"],"sources":["@wordpress/patterns/src/components/patterns-manage-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { isReusableBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { addQueryArgs } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as patternsStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\nfunction PatternsManageButton( { clientId } ) {\n\tconst { canRemove, isVisible, innerBlockCount, managePatternsUrl } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlock, canRemoveBlock, getBlockCount, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst { canUser } = select( coreStore );\n\t\t\t\tconst reusableBlock = getBlock( clientId );\n\t\t\t\tconst isBlockTheme = getSettings().__unstableIsBlockBasedTheme;\n\n\t\t\t\treturn {\n\t\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\t\tisVisible:\n\t\t\t\t\t\t!! reusableBlock &&\n\t\t\t\t\t\tisReusableBlock( reusableBlock ) &&\n\t\t\t\t\t\t!! canUser(\n\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t'blocks',\n\t\t\t\t\t\t\treusableBlock.attributes.ref\n\t\t\t\t\t\t),\n\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t// The site editor and templates both check whether the user\n\t\t\t\t\t// has edit_theme_options capabilities. We can leverage that here\n\t\t\t\t\t// and omit the manage patterns link if the user can't access it.\n\t\t\t\t\tmanagePatternsUrl:\n\t\t\t\t\t\tisBlockTheme && canUser( 'read', 'templates' )\n\t\t\t\t\t\t\t? addQueryArgs( 'site-editor.php', {\n\t\t\t\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t: addQueryArgs( 'edit.php', {\n\t\t\t\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t\t\t } ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t// Ignore reason: false positive of the lint rule.\n\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\tconst { convertSyncedPatternToStatic } = unlock(\n\t\tuseDispatch( patternsStore )\n\t);\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ canRemove && (\n\t\t\t\t<MenuItem\n\t\t\t\t\tonClick={ () => convertSyncedPatternToStatic( clientId ) }\n\t\t\t\t>\n\t\t\t\t\t{ innerBlockCount > 1\n\t\t\t\t\t\t? __( 'Detach patterns' )\n\t\t\t\t\t\t: __( 'Detach pattern' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t\t<MenuItem href={ managePatternsUrl }>\n\t\t\t\t{ __( 'Manage patterns' ) }\n\t\t\t</MenuItem>\n\t\t</>\n\t);\n}\n\nexport default PatternsManageButton;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASF,KAAK,IAAIG,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASH,KAAK,IAAII,aAAa,QAAQ,UAAU;AACjD,SAASC,MAAM,QAAQ,gBAAgB;AAEvC,SAASC,oBAAoBA,CAAE;EAAEC;AAAS,CAAC,EAAG;EAC7C,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,eAAe;IAAEC;EAAkB,CAAC,GACjEb,SAAS,CACNc,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,cAAc;MAAEC,aAAa;MAAEC;IAAY,CAAC,GAC7DJ,MAAM,CAAEX,gBAAiB,CAAC;IAC3B,MAAM;MAAEgB;IAAQ,CAAC,GAAGL,MAAM,CAAET,SAAU,CAAC;IACvC,MAAMe,aAAa,GAAGL,QAAQ,CAAEN,QAAS,CAAC;IAC1C,MAAMY,YAAY,GAAGH,WAAW,CAAC,CAAC,CAACI,2BAA2B;IAE9D,OAAO;MACNZ,SAAS,EAAEM,cAAc,CAAEP,QAAS,CAAC;MACrCE,SAAS,EACR,CAAC,CAAES,aAAa,IAChBrB,eAAe,CAAEqB,aAAc,CAAC,IAChC,CAAC,CAAED,OAAO,CACT,QAAQ,EACR,QAAQ,EACRC,aAAa,CAACG,UAAU,CAACC,GAC1B,CAAC;MACFZ,eAAe,EAAEK,aAAa,CAAER,QAAS,CAAC;MAC1C;MACA;MACA;MACAI,iBAAiB,EAChBQ,YAAY,IAAIF,OAAO,CAAE,MAAM,EAAE,WAAY,CAAC,GAC3Cf,YAAY,CAAE,iBAAiB,EAAE;QACjCqB,IAAI,EAAE;MACN,CAAE,CAAC,GACHrB,YAAY,CAAE,UAAU,EAAE;QAC1BsB,SAAS,EAAE;MACX,CAAE;IACP,CAAC;EACF,CAAC,EACD,CAAEjB,QAAQ,CACX,CAAC;;EAEF;EACA;EACA,MAAM;IAAEkB;EAA6B,CAAC,GAAGpB,MAAM,CAC9CN,WAAW,CAAEK,aAAc,CAC5B,CAAC;EAED,IAAK,CAAEK,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,OACCiB,aAAA,CAAAC,QAAA,QACGnB,SAAS,IACVkB,aAAA,CAAC/B,QAAQ;IACRiC,OAAO,EAAGA,CAAA,KAAMH,4BAA4B,CAAElB,QAAS;EAAG,GAExDG,eAAe,GAAG,CAAC,GAClBd,EAAE,CAAE,iBAAkB,CAAC,GACvBA,EAAE,CAAE,gBAAiB,CACf,CACV,EACD8B,aAAA,CAAC/B,QAAQ;IAACkC,IAAI,EAAGlB;EAAmB,GACjCf,EAAE,CAAE,iBAAkB,CACf,CACT,CAAC;AAEL;AAEA,eAAeU,oBAAoB"}
|
|
@@ -5,10 +5,11 @@ import { createElement } from "react";
|
|
|
5
5
|
import { Modal, Button, TextControl, __experimentalHStack as HStack, __experimentalVStack as VStack } from '@wordpress/components';
|
|
6
6
|
import { store as coreStore } from '@wordpress/core-data';
|
|
7
7
|
import { useDispatch } from '@wordpress/data';
|
|
8
|
-
import { useState } from '@wordpress/element';
|
|
8
|
+
import { useId, useRef, useState } from '@wordpress/element';
|
|
9
9
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
10
10
|
import { __ } from '@wordpress/i18n';
|
|
11
11
|
import { store as noticesStore } from '@wordpress/notices';
|
|
12
|
+
import { speak } from '@wordpress/a11y';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Internal dependencies
|
|
@@ -16,13 +17,18 @@ import { store as noticesStore } from '@wordpress/notices';
|
|
|
16
17
|
import { CATEGORY_SLUG } from './category-selector';
|
|
17
18
|
export default function RenamePatternCategoryModal({
|
|
18
19
|
category,
|
|
20
|
+
existingCategories,
|
|
19
21
|
onClose,
|
|
20
22
|
onError,
|
|
21
23
|
onSuccess,
|
|
22
24
|
...props
|
|
23
25
|
}) {
|
|
26
|
+
const id = useId();
|
|
27
|
+
const textControlRef = useRef();
|
|
24
28
|
const [name, setName] = useState(decodeEntities(category.name));
|
|
25
29
|
const [isSaving, setIsSaving] = useState(false);
|
|
30
|
+
const [validationMessage, setValidationMessage] = useState(false);
|
|
31
|
+
const validationMessageId = validationMessage ? `patterns-rename-pattern-category-modal__validation-message-${id}` : undefined;
|
|
26
32
|
const {
|
|
27
33
|
saveEntityRecord,
|
|
28
34
|
invalidateResolution
|
|
@@ -31,9 +37,35 @@ export default function RenamePatternCategoryModal({
|
|
|
31
37
|
createErrorNotice,
|
|
32
38
|
createSuccessNotice
|
|
33
39
|
} = useDispatch(noticesStore);
|
|
34
|
-
const
|
|
40
|
+
const onChange = newName => {
|
|
41
|
+
if (validationMessage) {
|
|
42
|
+
setValidationMessage(undefined);
|
|
43
|
+
}
|
|
44
|
+
setName(newName);
|
|
45
|
+
};
|
|
46
|
+
const onSave = async event => {
|
|
35
47
|
event.preventDefault();
|
|
36
|
-
if (
|
|
48
|
+
if (isSaving) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!name || name === category.name) {
|
|
52
|
+
const message = __('Please enter a new name for this category.');
|
|
53
|
+
speak(message, 'assertive');
|
|
54
|
+
setValidationMessage(message);
|
|
55
|
+
textControlRef.current?.focus();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check existing categories to avoid creating duplicates.
|
|
60
|
+
if (existingCategories.patternCategories.find(existingCategory => {
|
|
61
|
+
// Compare the id so that the we don't disallow the user changing the case of their current category
|
|
62
|
+
// (i.e. renaming 'test' to 'Test').
|
|
63
|
+
return existingCategory.id !== category.id && existingCategory.label.toLowerCase() === name.toLowerCase();
|
|
64
|
+
})) {
|
|
65
|
+
const message = __('This category already exists. Please use a different name.');
|
|
66
|
+
speak(message, 'assertive');
|
|
67
|
+
setValidationMessage(message);
|
|
68
|
+
textControlRef.current?.focus();
|
|
37
69
|
return;
|
|
38
70
|
}
|
|
39
71
|
try {
|
|
@@ -75,16 +107,23 @@ export default function RenamePatternCategoryModal({
|
|
|
75
107
|
onRequestClose: onRequestClose,
|
|
76
108
|
...props
|
|
77
109
|
}, createElement("form", {
|
|
78
|
-
onSubmit:
|
|
110
|
+
onSubmit: onSave
|
|
79
111
|
}, createElement(VStack, {
|
|
80
112
|
spacing: "5"
|
|
113
|
+
}, createElement(VStack, {
|
|
114
|
+
spacing: "2"
|
|
81
115
|
}, createElement(TextControl, {
|
|
116
|
+
ref: textControlRef,
|
|
82
117
|
__nextHasNoMarginBottom: true,
|
|
83
118
|
label: __('Name'),
|
|
84
119
|
value: name,
|
|
85
|
-
onChange:
|
|
120
|
+
onChange: onChange,
|
|
121
|
+
"aria-describedby": validationMessageId,
|
|
86
122
|
required: true
|
|
87
|
-
}), createElement(
|
|
123
|
+
}), validationMessage && createElement("span", {
|
|
124
|
+
className: "patterns-rename-pattern-category-modal__validation-message",
|
|
125
|
+
id: validationMessageId
|
|
126
|
+
}, validationMessage)), createElement(HStack, {
|
|
88
127
|
justify: "right"
|
|
89
128
|
}, createElement(Button, {
|
|
90
129
|
variant: "tertiary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","store","coreStore","useDispatch","useState","decodeEntities","__","noticesStore","CATEGORY_SLUG","RenamePatternCategoryModal","category","onClose","onError","onSuccess","props","name","setName","isSaving","setIsSaving","saveEntityRecord","invalidateResolution","createErrorNotice","createSuccessNotice","
|
|
1
|
+
{"version":3,"names":["Modal","Button","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","store","coreStore","useDispatch","useId","useRef","useState","decodeEntities","__","noticesStore","speak","CATEGORY_SLUG","RenamePatternCategoryModal","category","existingCategories","onClose","onError","onSuccess","props","id","textControlRef","name","setName","isSaving","setIsSaving","validationMessage","setValidationMessage","validationMessageId","undefined","saveEntityRecord","invalidateResolution","createErrorNotice","createSuccessNotice","onChange","newName","onSave","event","preventDefault","message","current","focus","patternCategories","find","existingCategory","label","toLowerCase","savedRecord","slug","type","error","onRequestClose","createElement","title","onSubmit","spacing","ref","__nextHasNoMarginBottom","value","required","className","justify","variant","onClick","isBusy"],"sources":["@wordpress/patterns/src/components/rename-pattern-category-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} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { useId, useRef, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { CATEGORY_SLUG } from './category-selector';\n\nexport default function RenamePatternCategoryModal( {\n\tcategory,\n\texistingCategories,\n\tonClose,\n\tonError,\n\tonSuccess,\n\t...props\n} ) {\n\tconst id = useId();\n\tconst textControlRef = useRef();\n\tconst [ name, setName ] = useState( decodeEntities( category.name ) );\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst [ validationMessage, setValidationMessage ] = useState( false );\n\tconst validationMessageId = validationMessage\n\t\t? `patterns-rename-pattern-category-modal__validation-message-${ id }`\n\t\t: undefined;\n\n\tconst { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst onChange = ( newName ) => {\n\t\tif ( validationMessage ) {\n\t\t\tsetValidationMessage( undefined );\n\t\t}\n\t\tsetName( newName );\n\t};\n\n\tconst onSave = async ( event ) => {\n\t\tevent.preventDefault();\n\n\t\tif ( isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! name || name === category.name ) {\n\t\t\tconst message = __( 'Please enter a new name for this category.' );\n\t\t\tspeak( message, 'assertive' );\n\t\t\tsetValidationMessage( message );\n\t\t\ttextControlRef.current?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\t// Check existing categories to avoid creating duplicates.\n\t\tif (\n\t\t\texistingCategories.patternCategories.find( ( existingCategory ) => {\n\t\t\t\t// Compare the id so that the we don't disallow the user changing the case of their current category\n\t\t\t\t// (i.e. renaming 'test' to 'Test').\n\t\t\t\treturn (\n\t\t\t\t\texistingCategory.id !== category.id &&\n\t\t\t\t\texistingCategory.label.toLowerCase() === name.toLowerCase()\n\t\t\t\t);\n\t\t\t} )\n\t\t) {\n\t\t\tconst message = __(\n\t\t\t\t'This category already exists. Please use a different name.'\n\t\t\t);\n\t\t\tspeak( message, 'assertive' );\n\t\t\tsetValidationMessage( message );\n\t\t\ttextControlRef.current?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSaving( true );\n\n\t\t\t// User pattern category properties may differ as they can be\n\t\t\t// normalized for use alongside template part areas, core pattern\n\t\t\t// categories etc. As a result we won't just destructure the passed\n\t\t\t// category object.\n\t\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\tCATEGORY_SLUG,\n\t\t\t\t{\n\t\t\t\t\tid: category.id,\n\t\t\t\t\tslug: category.slug,\n\t\t\t\t\tname,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tinvalidateResolution( 'getUserPatternCategories' );\n\t\t\tonSuccess?.( savedRecord );\n\t\t\tonClose();\n\n\t\t\tcreateSuccessNotice( __( 'Pattern category renamed.' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-category-update',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tonError?.();\n\t\t\tcreateErrorNotice( error.message, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-category-update',\n\t\t\t} );\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t\tsetName( '' );\n\t\t}\n\t};\n\n\tconst onRequestClose = () => {\n\t\tonClose();\n\t\tsetName( '' );\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Rename' ) }\n\t\t\tonRequestClose={ onRequestClose }\n\t\t\t{ ...props }\n\t\t>\n\t\t\t<form onSubmit={ onSave }>\n\t\t\t\t<VStack spacing=\"5\">\n\t\t\t\t\t<VStack spacing=\"2\">\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tref={ textControlRef }\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\t\tvalue={ name }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\taria-describedby={ validationMessageId }\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ validationMessage && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"patterns-rename-pattern-category-modal__validation-message\"\n\t\t\t\t\t\t\t\tid={ validationMessageId }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ validationMessage }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</VStack>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onRequestClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\taria-disabled={\n\t\t\t\t\t\t\t\t! name || name === category.name || isSaving\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export const PATTERN_TYPES = {
|
|
|
4
4
|
};
|
|
5
5
|
export const PATTERN_DEFAULT_CATEGORY = 'all-patterns';
|
|
6
6
|
export const PATTERN_USER_CATEGORY = 'my-patterns';
|
|
7
|
-
export const
|
|
7
|
+
export const EXCLUDED_PATTERN_SOURCES = ['core', 'pattern-directory/core', 'pattern-directory/featured'];
|
|
8
8
|
export const PATTERN_SYNC_TYPES = {
|
|
9
9
|
full: 'fully',
|
|
10
10
|
unsynced: 'unsynced'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PATTERN_TYPES","theme","user","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","
|
|
1
|
+
{"version":3,"names":["PATTERN_TYPES","theme","user","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","full","unsynced"],"sources":["@wordpress/patterns/src/constants.js"],"sourcesContent":["export const PATTERN_TYPES = {\n\ttheme: 'pattern',\n\tuser: 'wp_block',\n};\n\nexport const PATTERN_DEFAULT_CATEGORY = 'all-patterns';\nexport const PATTERN_USER_CATEGORY = 'my-patterns';\nexport const EXCLUDED_PATTERN_SOURCES = [\n\t'core',\n\t'pattern-directory/core',\n\t'pattern-directory/featured',\n];\nexport const PATTERN_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n"],"mappings":"AAAA,OAAO,MAAMA,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"}
|
|
@@ -7,7 +7,7 @@ import DuplicatePatternModal from './components/duplicate-pattern-modal';
|
|
|
7
7
|
import RenamePatternModal from './components/rename-pattern-modal';
|
|
8
8
|
import PatternsMenuItems from './components';
|
|
9
9
|
import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
|
|
10
|
-
import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY, PATTERN_USER_CATEGORY,
|
|
10
|
+
import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY, PATTERN_USER_CATEGORY, EXCLUDED_PATTERN_SOURCES, PATTERN_SYNC_TYPES } from './constants';
|
|
11
11
|
export const privateApis = {};
|
|
12
12
|
lock(privateApis, {
|
|
13
13
|
CreatePatternModal,
|
|
@@ -18,7 +18,7 @@ lock(privateApis, {
|
|
|
18
18
|
PATTERN_TYPES,
|
|
19
19
|
PATTERN_DEFAULT_CATEGORY,
|
|
20
20
|
PATTERN_USER_CATEGORY,
|
|
21
|
-
|
|
21
|
+
EXCLUDED_PATTERN_SOURCES,
|
|
22
22
|
PATTERN_SYNC_TYPES
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=private-apis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["lock","CreatePatternModal","DuplicatePatternModal","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","
|
|
1
|
+
{"version":3,"names":["lock","CreatePatternModal","DuplicatePatternModal","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","privateApis"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport CreatePatternModal from './components/create-pattern-modal';\nimport DuplicatePatternModal 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 {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tDuplicatePatternModal,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,eAAe;AACpC,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,qBAAqB,MAAM,sCAAsC;AACxE,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,0BAA0B,MAAM,4CAA4C;AACnF,SACCC,aAAa,EACbC,wBAAwB,EACxBC,qBAAqB,EACrBC,wBAAwB,EACxBC,kBAAkB,QACZ,aAAa;AAEpB,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BX,IAAI,CAAEW,WAAW,EAAE;EAClBV,kBAAkB;EAClBC,qBAAqB;EACrBC,kBAAkB;EAClBC,iBAAiB;EACjBC,0BAA0B;EAC1BC,aAAa;EACbC,wBAAwB;EACxBC,qBAAqB;EACrBC,wBAAwB;EACxBC;AACD,CAAE,CAAC"}
|
|
@@ -132,4 +132,13 @@
|
|
|
132
132
|
.patterns-create-modal__name-input input[type=text] {
|
|
133
133
|
min-height: 40px;
|
|
134
134
|
margin: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.patterns-rename-pattern-category-modal__validation-message {
|
|
138
|
+
color: #cc1818;
|
|
139
|
+
}
|
|
140
|
+
@media (min-width: 782px) {
|
|
141
|
+
.patterns-rename-pattern-category-modal__validation-message {
|
|
142
|
+
width: 320px;
|
|
143
|
+
}
|
|
135
144
|
}
|
package/build-style/style.css
CHANGED
|
@@ -132,4 +132,13 @@
|
|
|
132
132
|
.patterns-create-modal__name-input input[type=text] {
|
|
133
133
|
min-height: 40px;
|
|
134
134
|
margin: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.patterns-rename-pattern-category-modal__validation-message {
|
|
138
|
+
color: #cc1818;
|
|
139
|
+
}
|
|
140
|
+
@media (min-width: 782px) {
|
|
141
|
+
.patterns-rename-pattern-category-modal__validation-message {
|
|
142
|
+
width: 320px;
|
|
143
|
+
}
|
|
135
144
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/patterns",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Management of user pattern editing.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -31,19 +31,20 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.16.0",
|
|
34
|
-
"@wordpress/
|
|
35
|
-
"@wordpress/
|
|
36
|
-
"@wordpress/
|
|
37
|
-
"@wordpress/
|
|
38
|
-
"@wordpress/
|
|
39
|
-
"@wordpress/data": "^
|
|
40
|
-
"@wordpress/
|
|
41
|
-
"@wordpress/
|
|
42
|
-
"@wordpress/
|
|
43
|
-
"@wordpress/
|
|
44
|
-
"@wordpress/
|
|
45
|
-
"@wordpress/
|
|
46
|
-
"@wordpress/
|
|
34
|
+
"@wordpress/a11y": "^3.46.0",
|
|
35
|
+
"@wordpress/block-editor": "^12.14.0",
|
|
36
|
+
"@wordpress/blocks": "^12.23.0",
|
|
37
|
+
"@wordpress/components": "^25.12.0",
|
|
38
|
+
"@wordpress/compose": "^6.23.0",
|
|
39
|
+
"@wordpress/core-data": "^6.23.0",
|
|
40
|
+
"@wordpress/data": "^9.16.0",
|
|
41
|
+
"@wordpress/element": "^5.23.0",
|
|
42
|
+
"@wordpress/html-entities": "^3.46.0",
|
|
43
|
+
"@wordpress/i18n": "^4.46.0",
|
|
44
|
+
"@wordpress/icons": "^9.37.0",
|
|
45
|
+
"@wordpress/notices": "^4.14.0",
|
|
46
|
+
"@wordpress/private-apis": "^0.28.0",
|
|
47
|
+
"@wordpress/url": "^3.47.0"
|
|
47
48
|
},
|
|
48
49
|
"peerDependencies": {
|
|
49
50
|
"react": "^18.0.0",
|
|
@@ -52,5 +53,5 @@
|
|
|
52
53
|
"publishConfig": {
|
|
53
54
|
"access": "public"
|
|
54
55
|
},
|
|
55
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "839018ff6029ba749780e288e08ff9cd898e50e8"
|
|
56
57
|
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
__experimentalVStack as VStack,
|
|
10
10
|
ToggleControl,
|
|
11
11
|
} from '@wordpress/components';
|
|
12
|
-
import { __ } from '@wordpress/i18n';
|
|
12
|
+
import { __, _x } from '@wordpress/i18n';
|
|
13
13
|
import { useState, useMemo } from '@wordpress/element';
|
|
14
14
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
15
15
|
import { store as noticesStore } from '@wordpress/notices';
|
|
@@ -179,7 +179,10 @@ export default function CreatePatternModal( {
|
|
|
179
179
|
categoryMap={ categoryMap }
|
|
180
180
|
/>
|
|
181
181
|
<ToggleControl
|
|
182
|
-
label={
|
|
182
|
+
label={ _x(
|
|
183
|
+
'Synced',
|
|
184
|
+
'Option that makes an individual pattern synchronized'
|
|
185
|
+
) }
|
|
183
186
|
help={ __(
|
|
184
187
|
'Editing the pattern will update it anywhere it is used.'
|
|
185
188
|
) }
|
|
@@ -64,9 +64,6 @@ function PatternsManageButton( { clientId } ) {
|
|
|
64
64
|
|
|
65
65
|
return (
|
|
66
66
|
<>
|
|
67
|
-
<MenuItem href={ managePatternsUrl }>
|
|
68
|
-
{ __( 'Manage patterns' ) }
|
|
69
|
-
</MenuItem>
|
|
70
67
|
{ canRemove && (
|
|
71
68
|
<MenuItem
|
|
72
69
|
onClick={ () => convertSyncedPatternToStatic( clientId ) }
|
|
@@ -76,6 +73,9 @@ function PatternsManageButton( { clientId } ) {
|
|
|
76
73
|
: __( 'Detach pattern' ) }
|
|
77
74
|
</MenuItem>
|
|
78
75
|
) }
|
|
76
|
+
<MenuItem href={ managePatternsUrl }>
|
|
77
|
+
{ __( 'Manage patterns' ) }
|
|
78
|
+
</MenuItem>
|
|
79
79
|
</>
|
|
80
80
|
);
|
|
81
81
|
}
|
|
@@ -10,10 +10,11 @@ import {
|
|
|
10
10
|
} from '@wordpress/components';
|
|
11
11
|
import { store as coreStore } from '@wordpress/core-data';
|
|
12
12
|
import { useDispatch } from '@wordpress/data';
|
|
13
|
-
import { useState } from '@wordpress/element';
|
|
13
|
+
import { useId, useRef, useState } from '@wordpress/element';
|
|
14
14
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
15
15
|
import { __ } from '@wordpress/i18n';
|
|
16
16
|
import { store as noticesStore } from '@wordpress/notices';
|
|
17
|
+
import { speak } from '@wordpress/a11y';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Internal dependencies
|
|
@@ -22,23 +23,64 @@ import { CATEGORY_SLUG } from './category-selector';
|
|
|
22
23
|
|
|
23
24
|
export default function RenamePatternCategoryModal( {
|
|
24
25
|
category,
|
|
26
|
+
existingCategories,
|
|
25
27
|
onClose,
|
|
26
28
|
onError,
|
|
27
29
|
onSuccess,
|
|
28
30
|
...props
|
|
29
31
|
} ) {
|
|
32
|
+
const id = useId();
|
|
33
|
+
const textControlRef = useRef();
|
|
30
34
|
const [ name, setName ] = useState( decodeEntities( category.name ) );
|
|
31
35
|
const [ isSaving, setIsSaving ] = useState( false );
|
|
36
|
+
const [ validationMessage, setValidationMessage ] = useState( false );
|
|
37
|
+
const validationMessageId = validationMessage
|
|
38
|
+
? `patterns-rename-pattern-category-modal__validation-message-${ id }`
|
|
39
|
+
: undefined;
|
|
32
40
|
|
|
33
41
|
const { saveEntityRecord, invalidateResolution } = useDispatch( coreStore );
|
|
34
|
-
|
|
35
42
|
const { createErrorNotice, createSuccessNotice } =
|
|
36
43
|
useDispatch( noticesStore );
|
|
37
44
|
|
|
38
|
-
const
|
|
45
|
+
const onChange = ( newName ) => {
|
|
46
|
+
if ( validationMessage ) {
|
|
47
|
+
setValidationMessage( undefined );
|
|
48
|
+
}
|
|
49
|
+
setName( newName );
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const onSave = async ( event ) => {
|
|
39
53
|
event.preventDefault();
|
|
40
54
|
|
|
41
|
-
if (
|
|
55
|
+
if ( isSaving ) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if ( ! name || name === category.name ) {
|
|
60
|
+
const message = __( 'Please enter a new name for this category.' );
|
|
61
|
+
speak( message, 'assertive' );
|
|
62
|
+
setValidationMessage( message );
|
|
63
|
+
textControlRef.current?.focus();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Check existing categories to avoid creating duplicates.
|
|
68
|
+
if (
|
|
69
|
+
existingCategories.patternCategories.find( ( existingCategory ) => {
|
|
70
|
+
// Compare the id so that the we don't disallow the user changing the case of their current category
|
|
71
|
+
// (i.e. renaming 'test' to 'Test').
|
|
72
|
+
return (
|
|
73
|
+
existingCategory.id !== category.id &&
|
|
74
|
+
existingCategory.label.toLowerCase() === name.toLowerCase()
|
|
75
|
+
);
|
|
76
|
+
} )
|
|
77
|
+
) {
|
|
78
|
+
const message = __(
|
|
79
|
+
'This category already exists. Please use a different name.'
|
|
80
|
+
);
|
|
81
|
+
speak( message, 'assertive' );
|
|
82
|
+
setValidationMessage( message );
|
|
83
|
+
textControlRef.current?.focus();
|
|
42
84
|
return;
|
|
43
85
|
}
|
|
44
86
|
|
|
@@ -90,15 +132,27 @@ export default function RenamePatternCategoryModal( {
|
|
|
90
132
|
onRequestClose={ onRequestClose }
|
|
91
133
|
{ ...props }
|
|
92
134
|
>
|
|
93
|
-
<form onSubmit={
|
|
135
|
+
<form onSubmit={ onSave }>
|
|
94
136
|
<VStack spacing="5">
|
|
95
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
137
|
+
<VStack spacing="2">
|
|
138
|
+
<TextControl
|
|
139
|
+
ref={ textControlRef }
|
|
140
|
+
__nextHasNoMarginBottom
|
|
141
|
+
label={ __( 'Name' ) }
|
|
142
|
+
value={ name }
|
|
143
|
+
onChange={ onChange }
|
|
144
|
+
aria-describedby={ validationMessageId }
|
|
145
|
+
required
|
|
146
|
+
/>
|
|
147
|
+
{ validationMessage && (
|
|
148
|
+
<span
|
|
149
|
+
className="patterns-rename-pattern-category-modal__validation-message"
|
|
150
|
+
id={ validationMessageId }
|
|
151
|
+
>
|
|
152
|
+
{ validationMessage }
|
|
153
|
+
</span>
|
|
154
|
+
) }
|
|
155
|
+
</VStack>
|
|
102
156
|
<HStack justify="right">
|
|
103
157
|
<Button variant="tertiary" onClick={ onRequestClose }>
|
|
104
158
|
{ __( 'Cancel' ) }
|
package/src/constants.js
CHANGED
|
@@ -5,11 +5,10 @@ export const PATTERN_TYPES = {
|
|
|
5
5
|
|
|
6
6
|
export const PATTERN_DEFAULT_CATEGORY = 'all-patterns';
|
|
7
7
|
export const PATTERN_USER_CATEGORY = 'my-patterns';
|
|
8
|
-
export const
|
|
8
|
+
export const EXCLUDED_PATTERN_SOURCES = [
|
|
9
9
|
'core',
|
|
10
10
|
'pattern-directory/core',
|
|
11
11
|
'pattern-directory/featured',
|
|
12
|
-
'pattern-directory/theme',
|
|
13
12
|
];
|
|
14
13
|
export const PATTERN_SYNC_TYPES = {
|
|
15
14
|
full: 'fully',
|
package/src/private-apis.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
PATTERN_TYPES,
|
|
12
12
|
PATTERN_DEFAULT_CATEGORY,
|
|
13
13
|
PATTERN_USER_CATEGORY,
|
|
14
|
-
|
|
14
|
+
EXCLUDED_PATTERN_SOURCES,
|
|
15
15
|
PATTERN_SYNC_TYPES,
|
|
16
16
|
} from './constants';
|
|
17
17
|
|
|
@@ -25,6 +25,6 @@ lock( privateApis, {
|
|
|
25
25
|
PATTERN_TYPES,
|
|
26
26
|
PATTERN_DEFAULT_CATEGORY,
|
|
27
27
|
PATTERN_USER_CATEGORY,
|
|
28
|
-
|
|
28
|
+
EXCLUDED_PATTERN_SOURCES,
|
|
29
29
|
PATTERN_SYNC_TYPES,
|
|
30
30
|
} );
|