@wordpress/patterns 1.18.0 → 2.0.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 +8 -0
- package/build/api/index.js +17 -0
- package/build/api/index.js.map +1 -1
- package/build/components/allow-overrides-modal.js +72 -58
- package/build/components/allow-overrides-modal.js.map +1 -1
- package/build/components/category-selector.js +2 -2
- package/build/components/category-selector.js.map +1 -1
- package/build/components/create-pattern-modal.js +56 -48
- package/build/components/create-pattern-modal.js.map +1 -1
- package/build/components/duplicate-pattern-modal.js +2 -2
- package/build/components/duplicate-pattern-modal.js.map +1 -1
- package/build/components/index.js +15 -11
- package/build/components/index.js.map +1 -1
- package/build/components/overrides-panel.js +7 -6
- package/build/components/overrides-panel.js.map +1 -1
- package/build/components/pattern-convert-button.js +22 -20
- package/build/components/pattern-convert-button.js.map +1 -1
- package/build/components/pattern-overrides-controls.js +49 -54
- package/build/components/pattern-overrides-controls.js.map +1 -1
- package/build/components/patterns-manage-button.js +11 -7
- package/build/components/patterns-manage-button.js.map +1 -1
- package/build/components/rename-pattern-category-modal.js +42 -34
- package/build/components/rename-pattern-category-modal.js.map +1 -1
- package/build/components/rename-pattern-modal.js +31 -25
- package/build/components/rename-pattern-modal.js.map +1 -1
- package/build/components/reset-overrides-control.js +55 -42
- package/build/components/reset-overrides-control.js.map +1 -1
- package/build/private-apis.js +1 -0
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +15 -1
- package/build/store/actions.js.map +1 -1
- package/build-module/api/index.js +16 -0
- package/build-module/api/index.js.map +1 -1
- package/build-module/components/allow-overrides-modal.js +73 -58
- package/build-module/components/allow-overrides-modal.js.map +1 -1
- package/build-module/components/category-selector.js +2 -2
- package/build-module/components/category-selector.js.map +1 -1
- package/build-module/components/create-pattern-modal.js +59 -50
- package/build-module/components/create-pattern-modal.js.map +1 -1
- package/build-module/components/duplicate-pattern-modal.js +2 -2
- package/build-module/components/duplicate-pattern-modal.js.map +1 -1
- package/build-module/components/index.js +17 -11
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/overrides-panel.js +7 -6
- package/build-module/components/overrides-panel.js.map +1 -1
- package/build-module/components/pattern-convert-button.js +23 -18
- package/build-module/components/pattern-convert-button.js.map +1 -1
- package/build-module/components/pattern-overrides-controls.js +52 -55
- package/build-module/components/pattern-overrides-controls.js.map +1 -1
- package/build-module/components/patterns-manage-button.js +13 -7
- package/build-module/components/patterns-manage-button.js.map +1 -1
- package/build-module/components/rename-pattern-category-modal.js +43 -34
- package/build-module/components/rename-pattern-category-modal.js.map +1 -1
- package/build-module/components/rename-pattern-modal.js +32 -25
- package/build-module/components/rename-pattern-modal.js.map +1 -1
- package/build-module/components/reset-overrides-control.js +56 -43
- package/build-module/components/reset-overrides-control.js.map +1 -1
- package/build-module/private-apis.js +2 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +16 -2
- package/build-module/store/actions.js.map +1 -1
- package/package.json +18 -17
- package/src/api/index.js +16 -0
- package/src/components/create-pattern-modal.js +16 -5
- package/src/components/pattern-overrides-controls.js +19 -44
- package/src/components/patterns-manage-button.js +1 -1
- package/src/components/reset-overrides-control.js +54 -50
- package/src/private-apis.js +2 -1
- package/src/store/actions.js +25 -2
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createElement } from "react";
|
|
2
1
|
/**
|
|
3
2
|
* WordPress dependencies
|
|
4
3
|
*/
|
|
@@ -9,6 +8,8 @@ import { useState } from '@wordpress/element';
|
|
|
9
8
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
10
9
|
import { __ } from '@wordpress/i18n';
|
|
11
10
|
import { store as noticesStore } from '@wordpress/notices';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
13
|
export default function RenamePatternModal({
|
|
13
14
|
onClose,
|
|
14
15
|
onError,
|
|
@@ -63,31 +64,37 @@ export default function RenamePatternModal({
|
|
|
63
64
|
onClose?.();
|
|
64
65
|
setName('');
|
|
65
66
|
};
|
|
66
|
-
return
|
|
67
|
+
return /*#__PURE__*/_jsx(Modal, {
|
|
67
68
|
title: __('Rename'),
|
|
68
69
|
...props,
|
|
69
|
-
onRequestClose: onClose
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
70
|
+
onRequestClose: onClose,
|
|
71
|
+
children: /*#__PURE__*/_jsx("form", {
|
|
72
|
+
onSubmit: onRename,
|
|
73
|
+
children: /*#__PURE__*/_jsxs(VStack, {
|
|
74
|
+
spacing: "5",
|
|
75
|
+
children: [/*#__PURE__*/_jsx(TextControl, {
|
|
76
|
+
__nextHasNoMarginBottom: true,
|
|
77
|
+
__next40pxDefaultSize: true,
|
|
78
|
+
label: __('Name'),
|
|
79
|
+
value: name,
|
|
80
|
+
onChange: setName,
|
|
81
|
+
required: true
|
|
82
|
+
}), /*#__PURE__*/_jsxs(HStack, {
|
|
83
|
+
justify: "right",
|
|
84
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
85
|
+
__next40pxDefaultSize: true,
|
|
86
|
+
variant: "tertiary",
|
|
87
|
+
onClick: onRequestClose,
|
|
88
|
+
children: __('Cancel')
|
|
89
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
90
|
+
__next40pxDefaultSize: true,
|
|
91
|
+
variant: "primary",
|
|
92
|
+
type: "submit",
|
|
93
|
+
children: __('Save')
|
|
94
|
+
})]
|
|
95
|
+
})]
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
});
|
|
92
99
|
}
|
|
93
100
|
//# sourceMappingURL=rename-pattern-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Button","Modal","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","store","coreStore","useDispatch","useState","decodeEntities","__","noticesStore","RenamePatternModal","onClose","onError","onSuccess","pattern","props","originalName","title","name","setName","isSaving","setIsSaving","editEntityRecord","__experimentalSaveSpecifiedEntityEdits","saveSpecifiedEntityEdits","createSuccessNotice","createErrorNotice","onRename","event","preventDefault","type","id","savedRecord","throwOnError","error","errorMessage","message","code","onRequestClose","
|
|
1
|
+
{"version":3,"names":["Button","Modal","TextControl","__experimentalHStack","HStack","__experimentalVStack","VStack","store","coreStore","useDispatch","useState","decodeEntities","__","noticesStore","jsx","_jsx","jsxs","_jsxs","RenamePatternModal","onClose","onError","onSuccess","pattern","props","originalName","title","name","setName","isSaving","setIsSaving","editEntityRecord","__experimentalSaveSpecifiedEntityEdits","saveSpecifiedEntityEdits","createSuccessNotice","createErrorNotice","onRename","event","preventDefault","type","id","savedRecord","throwOnError","error","errorMessage","message","code","onRequestClose","children","onSubmit","spacing","__nextHasNoMarginBottom","__next40pxDefaultSize","label","value","onChange","required","justify","variant","onClick"],"sources":["@wordpress/patterns/src/components/rename-pattern-modal.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tModal,\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 { useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\nexport default function RenamePatternModal( {\n\tonClose,\n\tonError,\n\tonSuccess,\n\tpattern,\n\t...props\n} ) {\n\tconst originalName = decodeEntities( pattern.title );\n\tconst [ name, setName ] = useState( originalName );\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\n\tconst {\n\t\teditEntityRecord,\n\t\t__experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits,\n\t} = useDispatch( coreStore );\n\n\tconst { createSuccessNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst onRename = async ( event ) => {\n\t\tevent.preventDefault();\n\n\t\tif ( ! name || name === pattern.title || isSaving ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait editEntityRecord( 'postType', pattern.type, pattern.id, {\n\t\t\t\ttitle: name,\n\t\t\t} );\n\n\t\t\tsetIsSaving( true );\n\t\t\tsetName( '' );\n\t\t\tonClose?.();\n\n\t\t\tconst savedRecord = await saveSpecifiedEntityEdits(\n\t\t\t\t'postType',\n\t\t\t\tpattern.type,\n\t\t\t\tpattern.id,\n\t\t\t\t[ 'title' ],\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tonSuccess?.( savedRecord );\n\n\t\t\tcreateSuccessNotice( __( 'Pattern renamed' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-update',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tonError?.();\n\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while renaming the pattern.' );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'pattern-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 title={ __( 'Rename' ) } { ...props } onRequestClose={ onClose }>\n\t\t\t<form onSubmit={ onRename }>\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\t__next40pxDefaultSize\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ name }\n\t\t\t\t\t\tonChange={ setName }\n\t\t\t\t\t\trequired\n\t\t\t\t\t/>\n\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={ onRequestClose }\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\t__next40pxDefaultSize\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>\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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","ignoreList":[]}
|
|
@@ -1,59 +1,72 @@
|
|
|
1
|
-
import { createElement } from "react";
|
|
2
1
|
/**
|
|
3
2
|
* WordPress dependencies
|
|
4
3
|
*/
|
|
5
4
|
import { store as blockEditorStore, BlockControls } from '@wordpress/block-editor';
|
|
6
5
|
import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
|
|
7
|
-
import {
|
|
8
|
-
import { store as coreStore } from '@wordpress/core-data';
|
|
9
|
-
import { parse } from '@wordpress/blocks';
|
|
6
|
+
import { useRegistry, useSelect } from '@wordpress/data';
|
|
10
7
|
import { __ } from '@wordpress/i18n';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (block.attributes.metadata?.name === name) {
|
|
14
|
-
return block;
|
|
15
|
-
}
|
|
16
|
-
const found = recursivelyFindBlockWithName(block.innerBlocks, name);
|
|
17
|
-
if (found) {
|
|
18
|
-
return found;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
const CONTENT = 'content';
|
|
22
10
|
export default function ResetOverridesControl(props) {
|
|
23
|
-
const registry = useRegistry();
|
|
24
11
|
const name = props.attributes.metadata?.name;
|
|
25
|
-
const
|
|
12
|
+
const registry = useRegistry();
|
|
13
|
+
const isOverriden = useSelect(select => {
|
|
26
14
|
if (!name) {
|
|
27
|
-
return
|
|
15
|
+
return;
|
|
28
16
|
}
|
|
29
17
|
const {
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
getBlockAttributes,
|
|
19
|
+
getBlockParentsByBlockName
|
|
32
20
|
} = select(blockEditorStore);
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
return
|
|
21
|
+
const [patternClientId] = getBlockParentsByBlockName(props.clientId, 'core/block', true);
|
|
22
|
+
if (!patternClientId) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const overrides = getBlockAttributes(patternClientId)[CONTENT];
|
|
26
|
+
if (!overrides) {
|
|
27
|
+
return;
|
|
36
28
|
}
|
|
37
|
-
return
|
|
29
|
+
return overrides.hasOwnProperty(name);
|
|
38
30
|
}, [props.clientId, name]);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
31
|
+
function onClick() {
|
|
32
|
+
const {
|
|
33
|
+
getBlockAttributes,
|
|
34
|
+
getBlockParentsByBlockName
|
|
35
|
+
} = registry.select(blockEditorStore);
|
|
36
|
+
const [patternClientId] = getBlockParentsByBlockName(props.clientId, 'core/block', true);
|
|
37
|
+
if (!patternClientId) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const overrides = getBlockAttributes(patternClientId)[CONTENT];
|
|
41
|
+
if (!overrides.hasOwnProperty(name)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const {
|
|
45
|
+
updateBlockAttributes,
|
|
46
|
+
__unstableMarkLastChangeAsPersistent
|
|
47
|
+
} = registry.dispatch(blockEditorStore);
|
|
48
|
+
__unstableMarkLastChangeAsPersistent();
|
|
49
|
+
let newOverrides = {
|
|
50
|
+
...overrides
|
|
51
|
+
};
|
|
52
|
+
delete newOverrides[name];
|
|
53
|
+
if (!Object.keys(newOverrides).length) {
|
|
54
|
+
newOverrides = undefined;
|
|
55
|
+
}
|
|
56
|
+
updateBlockAttributes(patternClientId, {
|
|
57
|
+
[CONTENT]: newOverrides
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return /*#__PURE__*/_jsx(BlockControls, {
|
|
61
|
+
group: "other",
|
|
62
|
+
children: /*#__PURE__*/_jsx(ToolbarGroup, {
|
|
63
|
+
children: /*#__PURE__*/_jsx(ToolbarButton, {
|
|
64
|
+
onClick: onClick,
|
|
65
|
+
disabled: !isOverriden,
|
|
66
|
+
__experimentalIsFocusable: true,
|
|
67
|
+
children: __('Reset')
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
});
|
|
58
71
|
}
|
|
59
72
|
//# sourceMappingURL=reset-overrides-control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["store","blockEditorStore","BlockControls","ToolbarButton","ToolbarGroup","
|
|
1
|
+
{"version":3,"names":["store","blockEditorStore","BlockControls","ToolbarButton","ToolbarGroup","useRegistry","useSelect","__","jsx","_jsx","CONTENT","ResetOverridesControl","props","name","attributes","metadata","registry","isOverriden","select","getBlockAttributes","getBlockParentsByBlockName","patternClientId","clientId","overrides","hasOwnProperty","onClick","updateBlockAttributes","__unstableMarkLastChangeAsPersistent","dispatch","newOverrides","Object","keys","length","undefined","group","children","disabled","__experimentalIsFocusable"],"sources":["@wordpress/patterns/src/components/reset-overrides-control.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tstore as blockEditorStore,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\nconst CONTENT = 'content';\n\nexport default function ResetOverridesControl( props ) {\n\tconst name = props.attributes.metadata?.name;\n\tconst registry = useRegistry();\n\tconst isOverriden = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! name ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { getBlockAttributes, getBlockParentsByBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst [ patternClientId ] = getBlockParentsByBlockName(\n\t\t\t\tprops.clientId,\n\t\t\t\t'core/block',\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif ( ! patternClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst overrides = getBlockAttributes( patternClientId )[ CONTENT ];\n\n\t\t\tif ( ! overrides ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn overrides.hasOwnProperty( name );\n\t\t},\n\t\t[ props.clientId, name ]\n\t);\n\n\tfunction onClick() {\n\t\tconst { getBlockAttributes, getBlockParentsByBlockName } =\n\t\t\tregistry.select( blockEditorStore );\n\t\tconst [ patternClientId ] = getBlockParentsByBlockName(\n\t\t\tprops.clientId,\n\t\t\t'core/block',\n\t\t\ttrue\n\t\t);\n\n\t\tif ( ! patternClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst overrides = getBlockAttributes( patternClientId )[ CONTENT ];\n\n\t\tif ( ! overrides.hasOwnProperty( name ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { updateBlockAttributes, __unstableMarkLastChangeAsPersistent } =\n\t\t\tregistry.dispatch( blockEditorStore );\n\t\t__unstableMarkLastChangeAsPersistent();\n\n\t\tlet newOverrides = { ...overrides };\n\t\tdelete newOverrides[ name ];\n\n\t\tif ( ! Object.keys( newOverrides ).length ) {\n\t\t\tnewOverrides = undefined;\n\t\t}\n\n\t\tupdateBlockAttributes( patternClientId, {\n\t\t\t[ CONTENT ]: newOverrides,\n\t\t} );\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"other\">\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\tdisabled={ ! isOverriden }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,KAAK,IAAIC,gBAAgB,EACzBC,aAAa,QACP,yBAAyB;AAChC,SAASC,aAAa,EAAEC,YAAY,QAAQ,uBAAuB;AACnE,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,EAAE,QAAQ,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAErC,MAAMC,OAAO,GAAG,SAAS;AAEzB,eAAe,SAASC,qBAAqBA,CAAEC,KAAK,EAAG;EACtD,MAAMC,IAAI,GAAGD,KAAK,CAACE,UAAU,CAACC,QAAQ,EAAEF,IAAI;EAC5C,MAAMG,QAAQ,GAAGX,WAAW,CAAC,CAAC;EAC9B,MAAMY,WAAW,GAAGX,SAAS,CAC1BY,MAAM,IAAM;IACb,IAAK,CAAEL,IAAI,EAAG;MACb;IACD;IAEA,MAAM;MAAEM,kBAAkB;MAAEC;IAA2B,CAAC,GACvDF,MAAM,CAAEjB,gBAAiB,CAAC;IAC3B,MAAM,CAAEoB,eAAe,CAAE,GAAGD,0BAA0B,CACrDR,KAAK,CAACU,QAAQ,EACd,YAAY,EACZ,IACD,CAAC;IAED,IAAK,CAAED,eAAe,EAAG;MACxB;IACD;IAEA,MAAME,SAAS,GAAGJ,kBAAkB,CAAEE,eAAgB,CAAC,CAAEX,OAAO,CAAE;IAElE,IAAK,CAAEa,SAAS,EAAG;MAClB;IACD;IAEA,OAAOA,SAAS,CAACC,cAAc,CAAEX,IAAK,CAAC;EACxC,CAAC,EACD,CAAED,KAAK,CAACU,QAAQ,EAAET,IAAI,CACvB,CAAC;EAED,SAASY,OAAOA,CAAA,EAAG;IAClB,MAAM;MAAEN,kBAAkB;MAAEC;IAA2B,CAAC,GACvDJ,QAAQ,CAACE,MAAM,CAAEjB,gBAAiB,CAAC;IACpC,MAAM,CAAEoB,eAAe,CAAE,GAAGD,0BAA0B,CACrDR,KAAK,CAACU,QAAQ,EACd,YAAY,EACZ,IACD,CAAC;IAED,IAAK,CAAED,eAAe,EAAG;MACxB;IACD;IAEA,MAAME,SAAS,GAAGJ,kBAAkB,CAAEE,eAAgB,CAAC,CAAEX,OAAO,CAAE;IAElE,IAAK,CAAEa,SAAS,CAACC,cAAc,CAAEX,IAAK,CAAC,EAAG;MACzC;IACD;IAEA,MAAM;MAAEa,qBAAqB;MAAEC;IAAqC,CAAC,GACpEX,QAAQ,CAACY,QAAQ,CAAE3B,gBAAiB,CAAC;IACtC0B,oCAAoC,CAAC,CAAC;IAEtC,IAAIE,YAAY,GAAG;MAAE,GAAGN;IAAU,CAAC;IACnC,OAAOM,YAAY,CAAEhB,IAAI,CAAE;IAE3B,IAAK,CAAEiB,MAAM,CAACC,IAAI,CAAEF,YAAa,CAAC,CAACG,MAAM,EAAG;MAC3CH,YAAY,GAAGI,SAAS;IACzB;IAEAP,qBAAqB,CAAEL,eAAe,EAAE;MACvC,CAAEX,OAAO,GAAImB;IACd,CAAE,CAAC;EACJ;EAEA,oBACCpB,IAAA,CAACP,aAAa;IAACgC,KAAK,EAAC,OAAO;IAAAC,QAAA,eAC3B1B,IAAA,CAACL,YAAY;MAAA+B,QAAA,eACZ1B,IAAA,CAACN,aAAa;QACbsB,OAAO,EAAGA,OAAS;QACnBW,QAAQ,EAAG,CAAEnB,WAAa;QAC1BoB,yBAAyB;QAAAF,QAAA,EAEvB5B,EAAE,CAAE,OAAQ;MAAC,CACD;IAAC,CACH;EAAC,CACD,CAAC;AAElB","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ import { lock } from './lock-unlock';
|
|
|
5
5
|
import OverridesPanel from './components/overrides-panel';
|
|
6
6
|
import { default as CreatePatternModal, CreatePatternModalContents } from './components/create-pattern-modal';
|
|
7
7
|
import { default as DuplicatePatternModal, useDuplicatePatternProps } from './components/duplicate-pattern-modal';
|
|
8
|
-
import { isOverridableBlock } from './api';
|
|
8
|
+
import { isOverridableBlock, hasOverridableBlocks } from './api';
|
|
9
9
|
import RenamePatternModal from './components/rename-pattern-modal';
|
|
10
10
|
import PatternsMenuItems from './components';
|
|
11
11
|
import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
|
|
@@ -20,6 +20,7 @@ lock(privateApis, {
|
|
|
20
20
|
CreatePatternModalContents,
|
|
21
21
|
DuplicatePatternModal,
|
|
22
22
|
isOverridableBlock,
|
|
23
|
+
hasOverridableBlocks,
|
|
23
24
|
useDuplicatePatternProps,
|
|
24
25
|
RenamePatternModal,
|
|
25
26
|
PatternsMenuItems,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["lock","OverridesPanel","default","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","isOverridableBlock","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PatternOverridesControls","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 OverridesPanel from './components/overrides-panel';\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 { isOverridableBlock } from './api';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport PatternOverridesControls from './components/pattern-overrides-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\tOverridesPanel,\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tisOverridableBlock,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPatternOverridesControls,\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,OAAOC,cAAc,MAAM,8BAA8B;AACzD,SACCC,OAAO,IAAIC,kBAAkB,EAC7BC,0BAA0B,QACpB,mCAAmC;AAC1C,SACCF,OAAO,IAAIG,qBAAqB,EAChCC,wBAAwB,QAClB,sCAAsC;AAC7C,SAASC,kBAAkB,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"names":["lock","OverridesPanel","default","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","isOverridableBlock","hasOverridableBlocks","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","PatternOverridesControls","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 OverridesPanel from './components/overrides-panel';\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 { isOverridableBlock, hasOverridableBlocks } from './api';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport PatternOverridesControls from './components/pattern-overrides-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\tOverridesPanel,\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tisOverridableBlock,\n\thasOverridableBlocks,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tPatternOverridesControls,\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,OAAOC,cAAc,MAAM,8BAA8B;AACzD,SACCC,OAAO,IAAIC,kBAAkB,EAC7BC,0BAA0B,QACpB,mCAAmC;AAC1C,SACCF,OAAO,IAAIG,qBAAqB,EAChCC,wBAAwB,QAClB,sCAAsC;AAC7C,SAASC,kBAAkB,EAAEC,oBAAoB,QAAQ,OAAO;AAChE,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,0BAA0B,MAAM,4CAA4C;AACnF,OAAOC,wBAAwB,MAAM,yCAAyC;AAC9E,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;AAC7BrB,IAAI,CAAEqB,WAAW,EAAE;EAClBpB,cAAc;EACdE,kBAAkB;EAClBC,0BAA0B;EAC1BC,qBAAqB;EACrBE,kBAAkB;EAClBC,oBAAoB;EACpBF,wBAAwB;EACxBG,kBAAkB;EAClBC,iBAAiB;EACjBC,0BAA0B;EAC1BC,wBAAwB;EACxBC,qBAAqB;EACrBC,qBAAqB;EACrBC,aAAa;EACbC,wBAAwB;EACxBC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC;AACD,CAAE,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { cloneBlock } from '@wordpress/blocks';
|
|
5
|
+
import { getBlockType, cloneBlock } from '@wordpress/blocks';
|
|
6
6
|
import { store as coreStore } from '@wordpress/core-data';
|
|
7
7
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
8
8
|
|
|
@@ -68,6 +68,7 @@ export const convertSyncedPatternToStatic = clientId => ({
|
|
|
68
68
|
registry
|
|
69
69
|
}) => {
|
|
70
70
|
const patternBlock = registry.select(blockEditorStore).getBlock(clientId);
|
|
71
|
+
const existingOverrides = patternBlock.attributes?.content;
|
|
71
72
|
function cloneBlocksAndRemoveBindings(blocks) {
|
|
72
73
|
return blocks.map(block => {
|
|
73
74
|
let metadata = block.attributes.metadata;
|
|
@@ -77,13 +78,26 @@ export const convertSyncedPatternToStatic = clientId => ({
|
|
|
77
78
|
};
|
|
78
79
|
delete metadata.id;
|
|
79
80
|
delete metadata.bindings;
|
|
81
|
+
// Use overridden values of the pattern block if they exist.
|
|
82
|
+
if (existingOverrides?.[metadata.name]) {
|
|
83
|
+
// Iterate over each overriden attribute.
|
|
84
|
+
for (const [attributeName, value] of Object.entries(existingOverrides[metadata.name])) {
|
|
85
|
+
// Skip if the attribute does not exist in the block type.
|
|
86
|
+
if (!getBlockType(block.name)?.attributes[attributeName]) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Update the block attribute with the override value.
|
|
90
|
+
block.attributes[attributeName] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
80
93
|
}
|
|
81
94
|
return cloneBlock(block, {
|
|
82
95
|
metadata: metadata && Object.keys(metadata).length > 0 ? metadata : undefined
|
|
83
96
|
}, cloneBlocksAndRemoveBindings(block.innerBlocks));
|
|
84
97
|
});
|
|
85
98
|
}
|
|
86
|
-
registry.
|
|
99
|
+
const patternInnerBlocks = registry.select(blockEditorStore).getBlocks(patternBlock.clientId);
|
|
100
|
+
registry.dispatch(blockEditorStore).replaceBlocks(patternBlock.clientId, cloneBlocksAndRemoveBindings(patternInnerBlocks));
|
|
87
101
|
};
|
|
88
102
|
|
|
89
103
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["cloneBlock","store","coreStore","blockEditorStore","PATTERN_SYNC_TYPES","createPattern","title","syncType","content","categories","registry","meta","unsynced","wp_pattern_sync_status","undefined","reusableBlock","status","wp_pattern_category","updatedRecord","dispatch","saveEntityRecord","createPatternFromFile","file","fileContent","text","parsedContent","JSON","parse","e","Error","__file","syncStatus","pattern","convertSyncedPatternToStatic","clientId","patternBlock","select","getBlock","cloneBlocksAndRemoveBindings","blocks","map","block","metadata","
|
|
1
|
+
{"version":3,"names":["getBlockType","cloneBlock","store","coreStore","blockEditorStore","PATTERN_SYNC_TYPES","createPattern","title","syncType","content","categories","registry","meta","unsynced","wp_pattern_sync_status","undefined","reusableBlock","status","wp_pattern_category","updatedRecord","dispatch","saveEntityRecord","createPatternFromFile","file","fileContent","text","parsedContent","JSON","parse","e","Error","__file","syncStatus","pattern","convertSyncedPatternToStatic","clientId","patternBlock","select","getBlock","existingOverrides","attributes","cloneBlocksAndRemoveBindings","blocks","map","block","metadata","id","bindings","name","attributeName","value","Object","entries","keys","length","innerBlocks","patternInnerBlocks","getBlocks","replaceBlocks","setEditingPattern","isEditing","type"],"sources":["@wordpress/patterns/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\n\nimport { getBlockType, cloneBlock } from '@wordpress/blocks';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { PATTERN_SYNC_TYPES } from '../constants';\n\n/**\n * Returns a generator converting one or more static blocks into a pattern, or creating a new empty pattern.\n *\n * @param {string} title Pattern title.\n * @param {'full'|'unsynced'} syncType They way block is synced, 'full' or 'unsynced'.\n * @param {string|undefined} [content] Optional serialized content of blocks to convert to pattern.\n * @param {number[]|undefined} [categories] Ids of any selected categories.\n */\nexport const createPattern =\n\t( title, syncType, content, categories ) =>\n\tasync ( { registry } ) => {\n\t\tconst meta =\n\t\t\tsyncType === PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t? {\n\t\t\t\t\t\twp_pattern_sync_status: syncType,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst reusableBlock = {\n\t\t\ttitle,\n\t\t\tcontent,\n\t\t\tstatus: 'publish',\n\t\t\tmeta,\n\t\t\twp_pattern_category: categories,\n\t\t};\n\n\t\tconst updatedRecord = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEntityRecord( 'postType', 'wp_block', reusableBlock );\n\n\t\treturn updatedRecord;\n\t};\n\n/**\n * Create a pattern from a JSON file.\n * @param {File} file The JSON file instance of the pattern.\n * @param {number[]|undefined} [categories] Ids of any selected categories.\n */\nexport const createPatternFromFile =\n\t( file, categories ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst fileContent = await file.text();\n\t\t/** @type {import('./types').PatternJSON} */\n\t\tlet parsedContent;\n\t\ttry {\n\t\t\tparsedContent = JSON.parse( fileContent );\n\t\t} catch ( e ) {\n\t\t\tthrow new Error( 'Invalid JSON file' );\n\t\t}\n\t\tif (\n\t\t\tparsedContent.__file !== 'wp_block' ||\n\t\t\t! parsedContent.title ||\n\t\t\t! parsedContent.content ||\n\t\t\ttypeof parsedContent.title !== 'string' ||\n\t\t\ttypeof parsedContent.content !== 'string' ||\n\t\t\t( parsedContent.syncStatus &&\n\t\t\t\ttypeof parsedContent.syncStatus !== 'string' )\n\t\t) {\n\t\t\tthrow new Error( 'Invalid pattern JSON file' );\n\t\t}\n\n\t\tconst pattern = await dispatch.createPattern(\n\t\t\tparsedContent.title,\n\t\t\tparsedContent.syncStatus,\n\t\t\tparsedContent.content,\n\t\t\tcategories\n\t\t);\n\n\t\treturn pattern;\n\t};\n\n/**\n * Returns a generator converting a synced pattern block into a static block.\n *\n * @param {string} clientId The client ID of the block to attach.\n */\nexport const convertSyncedPatternToStatic =\n\t( clientId ) =>\n\t( { registry } ) => {\n\t\tconst patternBlock = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlock( clientId );\n\t\tconst existingOverrides = patternBlock.attributes?.content;\n\n\t\tfunction cloneBlocksAndRemoveBindings( blocks ) {\n\t\t\treturn blocks.map( ( block ) => {\n\t\t\t\tlet metadata = block.attributes.metadata;\n\t\t\t\tif ( metadata ) {\n\t\t\t\t\tmetadata = { ...metadata };\n\t\t\t\t\tdelete metadata.id;\n\t\t\t\t\tdelete metadata.bindings;\n\t\t\t\t\t// Use overridden values of the pattern block if they exist.\n\t\t\t\t\tif ( existingOverrides?.[ metadata.name ] ) {\n\t\t\t\t\t\t// Iterate over each overriden attribute.\n\t\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\t\texistingOverrides[ metadata.name ]\n\t\t\t\t\t\t) ) {\n\t\t\t\t\t\t\t// Skip if the attribute does not exist in the block type.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t! getBlockType( block.name )?.attributes[\n\t\t\t\t\t\t\t\t\tattributeName\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Update the block attribute with the override value.\n\t\t\t\t\t\t\tblock.attributes[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn cloneBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t{\n\t\t\t\t\t\tmetadata:\n\t\t\t\t\t\t\tmetadata && Object.keys( metadata ).length > 0\n\t\t\t\t\t\t\t\t? metadata\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t\tcloneBlocksAndRemoveBindings( block.innerBlocks )\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tconst patternInnerBlocks = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlocks( patternBlock.clientId );\n\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks(\n\t\t\t\tpatternBlock.clientId,\n\t\t\t\tcloneBlocksAndRemoveBindings( patternInnerBlocks )\n\t\t\t);\n\t};\n\n/**\n * Returns an action descriptor for SET_EDITING_PATTERN action.\n *\n * @param {string} clientId The clientID of the pattern to target.\n * @param {boolean} isEditing Whether the block should be in editing state.\n * @return {Object} Action descriptor.\n */\nexport function setEditingPattern( clientId, isEditing ) {\n\treturn {\n\t\ttype: 'SET_EDITING_PATTERN',\n\t\tclientId,\n\t\tisEditing,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/patterns",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Management of user pattern editing.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"url": "https://github.com/WordPress/gutenberg/issues"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
|
-
"node": ">=
|
|
22
|
+
"node": ">=18.12.0",
|
|
23
|
+
"npm": ">=8.19.2"
|
|
23
24
|
},
|
|
24
25
|
"main": "build/index.js",
|
|
25
26
|
"module": "build-module/index.js",
|
|
@@ -31,20 +32,20 @@
|
|
|
31
32
|
],
|
|
32
33
|
"dependencies": {
|
|
33
34
|
"@babel/runtime": "^7.16.0",
|
|
34
|
-
"@wordpress/a11y": "^
|
|
35
|
-
"@wordpress/block-editor": "^
|
|
36
|
-
"@wordpress/blocks": "^
|
|
37
|
-
"@wordpress/components": "^
|
|
38
|
-
"@wordpress/compose": "^
|
|
39
|
-
"@wordpress/core-data": "^
|
|
40
|
-
"@wordpress/data": "^
|
|
41
|
-
"@wordpress/element": "^
|
|
42
|
-
"@wordpress/html-entities": "^
|
|
43
|
-
"@wordpress/i18n": "^
|
|
44
|
-
"@wordpress/icons": "^
|
|
45
|
-
"@wordpress/notices": "^
|
|
46
|
-
"@wordpress/private-apis": "^0.
|
|
47
|
-
"@wordpress/url": "^
|
|
35
|
+
"@wordpress/a11y": "^4.0.0",
|
|
36
|
+
"@wordpress/block-editor": "^13.0.0",
|
|
37
|
+
"@wordpress/blocks": "^13.0.0",
|
|
38
|
+
"@wordpress/components": "^28.0.0",
|
|
39
|
+
"@wordpress/compose": "^7.0.0",
|
|
40
|
+
"@wordpress/core-data": "^7.0.0",
|
|
41
|
+
"@wordpress/data": "^10.0.0",
|
|
42
|
+
"@wordpress/element": "^6.0.0",
|
|
43
|
+
"@wordpress/html-entities": "^4.0.0",
|
|
44
|
+
"@wordpress/i18n": "^5.0.0",
|
|
45
|
+
"@wordpress/icons": "^10.0.0",
|
|
46
|
+
"@wordpress/notices": "^5.0.0",
|
|
47
|
+
"@wordpress/private-apis": "^1.0.0",
|
|
48
|
+
"@wordpress/url": "^4.0.0"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
50
51
|
"react": "^18.0.0",
|
|
@@ -53,5 +54,5 @@
|
|
|
53
54
|
"publishConfig": {
|
|
54
55
|
"access": "public"
|
|
55
56
|
},
|
|
56
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "2f30cddff15723ac7017fd009fc5913b7b419400"
|
|
57
58
|
}
|
package/src/api/index.js
CHANGED
|
@@ -22,3 +22,19 @@ export function isOverridableBlock( block ) {
|
|
|
22
22
|
)
|
|
23
23
|
);
|
|
24
24
|
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Determines whether the blocks list has overridable blocks.
|
|
28
|
+
*
|
|
29
|
+
* @param {WPBlock[]} blocks The blocks list.
|
|
30
|
+
*
|
|
31
|
+
* @return {boolean} `true` if the list has overridable blocks, `false` otherwise.
|
|
32
|
+
*/
|
|
33
|
+
export function hasOverridableBlocks( blocks ) {
|
|
34
|
+
return blocks.some( ( block ) => {
|
|
35
|
+
if ( isOverridableBlock( block ) ) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return hasOverridableBlocks( block.innerBlocks );
|
|
39
|
+
} );
|
|
40
|
+
}
|
|
@@ -11,13 +11,18 @@ import {
|
|
|
11
11
|
} from '@wordpress/components';
|
|
12
12
|
import { __, _x } from '@wordpress/i18n';
|
|
13
13
|
import { useState } from '@wordpress/element';
|
|
14
|
-
import { useDispatch } from '@wordpress/data';
|
|
14
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
15
15
|
import { store as noticesStore } from '@wordpress/notices';
|
|
16
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Internal dependencies
|
|
19
20
|
*/
|
|
20
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
PATTERN_DEFAULT_CATEGORY,
|
|
23
|
+
PATTERN_SYNC_TYPES,
|
|
24
|
+
PATTERN_TYPES,
|
|
25
|
+
} from '../constants';
|
|
21
26
|
import { store as patternsStore } from '../store';
|
|
22
27
|
import CategorySelector from './category-selector';
|
|
23
28
|
import { useAddPatternCategory } from '../private-hooks';
|
|
@@ -25,12 +30,18 @@ import { unlock } from '../lock-unlock';
|
|
|
25
30
|
|
|
26
31
|
export default function CreatePatternModal( {
|
|
27
32
|
className = 'patterns-menu-items__convert-modal',
|
|
28
|
-
modalTitle
|
|
33
|
+
modalTitle,
|
|
29
34
|
...restProps
|
|
30
35
|
} ) {
|
|
36
|
+
const defaultModalTitle = useSelect(
|
|
37
|
+
( select ) =>
|
|
38
|
+
select( coreStore ).getPostType( PATTERN_TYPES.user )?.labels
|
|
39
|
+
?.add_new_item,
|
|
40
|
+
[]
|
|
41
|
+
);
|
|
31
42
|
return (
|
|
32
43
|
<Modal
|
|
33
|
-
title={ modalTitle }
|
|
44
|
+
title={ modalTitle || defaultModalTitle }
|
|
34
45
|
onRequestClose={ restProps.onClose }
|
|
35
46
|
overlayClassName={ className }
|
|
36
47
|
>
|
|
@@ -40,7 +51,7 @@ export default function CreatePatternModal( {
|
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
export function CreatePatternModalContents( {
|
|
43
|
-
confirmLabel = __( '
|
|
54
|
+
confirmLabel = __( 'Add' ),
|
|
44
55
|
defaultCategories = [],
|
|
45
56
|
content,
|
|
46
57
|
onClose,
|
|
@@ -9,66 +9,48 @@ import { __ } from '@wordpress/i18n';
|
|
|
9
9
|
/**
|
|
10
10
|
* Internal dependencies
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
PARTIAL_SYNCING_SUPPORTED_BLOCKS,
|
|
14
|
-
PATTERN_OVERRIDES_BINDING_SOURCE,
|
|
15
|
-
} from '../constants';
|
|
12
|
+
import { PATTERN_OVERRIDES_BINDING_SOURCE } from '../constants';
|
|
16
13
|
import {
|
|
17
14
|
AllowOverridesModal,
|
|
18
15
|
DisallowOverridesModal,
|
|
19
16
|
} from './allow-overrides-modal';
|
|
20
17
|
|
|
21
|
-
function removeBindings( bindings
|
|
22
|
-
let updatedBindings = {};
|
|
23
|
-
|
|
24
|
-
// Omit any bindings that's not the same source from the `updatedBindings` object.
|
|
25
|
-
if (
|
|
26
|
-
bindings?.[ attributeName ]?.source !==
|
|
27
|
-
PATTERN_OVERRIDES_BINDING_SOURCE &&
|
|
28
|
-
bindings?.[ attributeName ]?.source !== undefined
|
|
29
|
-
) {
|
|
30
|
-
updatedBindings[ attributeName ] = bindings[ attributeName ];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
18
|
+
function removeBindings( bindings ) {
|
|
19
|
+
let updatedBindings = { ...bindings };
|
|
20
|
+
delete updatedBindings.__default;
|
|
33
21
|
if ( ! Object.keys( updatedBindings ).length ) {
|
|
34
22
|
updatedBindings = undefined;
|
|
35
23
|
}
|
|
36
24
|
return updatedBindings;
|
|
37
25
|
}
|
|
38
26
|
|
|
39
|
-
function addBindings( bindings
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
source: PATTERN_OVERRIDES_BINDING_SOURCE,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return updatedBindings;
|
|
27
|
+
function addBindings( bindings ) {
|
|
28
|
+
return {
|
|
29
|
+
...bindings,
|
|
30
|
+
__default: { source: PATTERN_OVERRIDES_BINDING_SOURCE },
|
|
31
|
+
};
|
|
49
32
|
}
|
|
50
33
|
|
|
51
|
-
function PatternOverridesControls( { attributes,
|
|
34
|
+
function PatternOverridesControls( { attributes, setAttributes } ) {
|
|
52
35
|
const controlId = useId();
|
|
53
36
|
const [ showAllowOverridesModal, setShowAllowOverridesModal ] =
|
|
54
37
|
useState( false );
|
|
55
38
|
const [ showDisallowOverridesModal, setShowDisallowOverridesModal ] =
|
|
56
39
|
useState( false );
|
|
57
40
|
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
);
|
|
41
|
+
const hasName = !! attributes.metadata?.name;
|
|
42
|
+
const defaultBindings = attributes.metadata?.bindings?.__default;
|
|
43
|
+
const allowOverrides =
|
|
44
|
+
hasName && defaultBindings?.source === PATTERN_OVERRIDES_BINDING_SOURCE;
|
|
45
|
+
const isConnectedToOtherSources =
|
|
46
|
+
defaultBindings?.source &&
|
|
47
|
+
defaultBindings.source !== PATTERN_OVERRIDES_BINDING_SOURCE;
|
|
66
48
|
|
|
67
49
|
function updateBindings( isChecked, customName ) {
|
|
68
50
|
const prevBindings = attributes?.metadata?.bindings;
|
|
69
51
|
const updatedBindings = isChecked
|
|
70
|
-
? addBindings( prevBindings
|
|
71
|
-
: removeBindings( prevBindings
|
|
52
|
+
? addBindings( prevBindings )
|
|
53
|
+
: removeBindings( prevBindings );
|
|
72
54
|
|
|
73
55
|
const updatedMetadata = {
|
|
74
56
|
...attributes.metadata,
|
|
@@ -89,13 +71,6 @@ function PatternOverridesControls( { attributes, name, setAttributes } ) {
|
|
|
89
71
|
return null;
|
|
90
72
|
}
|
|
91
73
|
|
|
92
|
-
const hasName = !! attributes.metadata?.name;
|
|
93
|
-
const allowOverrides =
|
|
94
|
-
hasName &&
|
|
95
|
-
attributeSources.some(
|
|
96
|
-
( source ) => source === PATTERN_OVERRIDES_BINDING_SOURCE
|
|
97
|
-
);
|
|
98
|
-
|
|
99
74
|
return (
|
|
100
75
|
<>
|
|
101
76
|
<InspectorControls group="advanced">
|