@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.
Files changed (69) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/api/index.js +17 -0
  3. package/build/api/index.js.map +1 -1
  4. package/build/components/allow-overrides-modal.js +72 -58
  5. package/build/components/allow-overrides-modal.js.map +1 -1
  6. package/build/components/category-selector.js +2 -2
  7. package/build/components/category-selector.js.map +1 -1
  8. package/build/components/create-pattern-modal.js +56 -48
  9. package/build/components/create-pattern-modal.js.map +1 -1
  10. package/build/components/duplicate-pattern-modal.js +2 -2
  11. package/build/components/duplicate-pattern-modal.js.map +1 -1
  12. package/build/components/index.js +15 -11
  13. package/build/components/index.js.map +1 -1
  14. package/build/components/overrides-panel.js +7 -6
  15. package/build/components/overrides-panel.js.map +1 -1
  16. package/build/components/pattern-convert-button.js +22 -20
  17. package/build/components/pattern-convert-button.js.map +1 -1
  18. package/build/components/pattern-overrides-controls.js +49 -54
  19. package/build/components/pattern-overrides-controls.js.map +1 -1
  20. package/build/components/patterns-manage-button.js +11 -7
  21. package/build/components/patterns-manage-button.js.map +1 -1
  22. package/build/components/rename-pattern-category-modal.js +42 -34
  23. package/build/components/rename-pattern-category-modal.js.map +1 -1
  24. package/build/components/rename-pattern-modal.js +31 -25
  25. package/build/components/rename-pattern-modal.js.map +1 -1
  26. package/build/components/reset-overrides-control.js +55 -42
  27. package/build/components/reset-overrides-control.js.map +1 -1
  28. package/build/private-apis.js +1 -0
  29. package/build/private-apis.js.map +1 -1
  30. package/build/store/actions.js +15 -1
  31. package/build/store/actions.js.map +1 -1
  32. package/build-module/api/index.js +16 -0
  33. package/build-module/api/index.js.map +1 -1
  34. package/build-module/components/allow-overrides-modal.js +73 -58
  35. package/build-module/components/allow-overrides-modal.js.map +1 -1
  36. package/build-module/components/category-selector.js +2 -2
  37. package/build-module/components/category-selector.js.map +1 -1
  38. package/build-module/components/create-pattern-modal.js +59 -50
  39. package/build-module/components/create-pattern-modal.js.map +1 -1
  40. package/build-module/components/duplicate-pattern-modal.js +2 -2
  41. package/build-module/components/duplicate-pattern-modal.js.map +1 -1
  42. package/build-module/components/index.js +17 -11
  43. package/build-module/components/index.js.map +1 -1
  44. package/build-module/components/overrides-panel.js +7 -6
  45. package/build-module/components/overrides-panel.js.map +1 -1
  46. package/build-module/components/pattern-convert-button.js +23 -18
  47. package/build-module/components/pattern-convert-button.js.map +1 -1
  48. package/build-module/components/pattern-overrides-controls.js +52 -55
  49. package/build-module/components/pattern-overrides-controls.js.map +1 -1
  50. package/build-module/components/patterns-manage-button.js +13 -7
  51. package/build-module/components/patterns-manage-button.js.map +1 -1
  52. package/build-module/components/rename-pattern-category-modal.js +43 -34
  53. package/build-module/components/rename-pattern-category-modal.js.map +1 -1
  54. package/build-module/components/rename-pattern-modal.js +32 -25
  55. package/build-module/components/rename-pattern-modal.js.map +1 -1
  56. package/build-module/components/reset-overrides-control.js +56 -43
  57. package/build-module/components/reset-overrides-control.js.map +1 -1
  58. package/build-module/private-apis.js +2 -1
  59. package/build-module/private-apis.js.map +1 -1
  60. package/build-module/store/actions.js +16 -2
  61. package/build-module/store/actions.js.map +1 -1
  62. package/package.json +18 -17
  63. package/src/api/index.js +16 -0
  64. package/src/components/create-pattern-modal.js +16 -5
  65. package/src/components/pattern-overrides-controls.js +19 -44
  66. package/src/components/patterns-manage-button.js +1 -1
  67. package/src/components/reset-overrides-control.js +54 -50
  68. package/src/private-apis.js +2 -1
  69. 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 createElement(Modal, {
67
+ return /*#__PURE__*/_jsx(Modal, {
67
68
  title: __('Rename'),
68
69
  ...props,
69
- onRequestClose: onClose
70
- }, createElement("form", {
71
- onSubmit: onRename
72
- }, createElement(VStack, {
73
- spacing: "5"
74
- }, createElement(TextControl, {
75
- __nextHasNoMarginBottom: true,
76
- __next40pxDefaultSize: true,
77
- label: __('Name'),
78
- value: name,
79
- onChange: setName,
80
- required: true
81
- }), createElement(HStack, {
82
- justify: "right"
83
- }, createElement(Button, {
84
- __next40pxDefaultSize: true,
85
- variant: "tertiary",
86
- onClick: onRequestClose
87
- }, __('Cancel')), createElement(Button, {
88
- __next40pxDefaultSize: true,
89
- variant: "primary",
90
- type: "submit"
91
- }, __('Save'))))));
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","createElement","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
+ {"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 { useSelect, useRegistry } from '@wordpress/data';
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
- function recursivelyFindBlockWithName(blocks, name) {
12
- for (const block of blocks) {
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 patternWithOverrides = useSelect(select => {
12
+ const registry = useRegistry();
13
+ const isOverriden = useSelect(select => {
26
14
  if (!name) {
27
- return undefined;
15
+ return;
28
16
  }
29
17
  const {
30
- getBlockParentsByBlockName,
31
- getBlocksByClientId
18
+ getBlockAttributes,
19
+ getBlockParentsByBlockName
32
20
  } = select(blockEditorStore);
33
- const patternBlock = getBlocksByClientId(getBlockParentsByBlockName(props.clientId, 'core/block'))[0];
34
- if (!patternBlock?.attributes.content?.[name]) {
35
- return undefined;
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 patternBlock;
29
+ return overrides.hasOwnProperty(name);
38
30
  }, [props.clientId, name]);
39
- const resetOverrides = async () => {
40
- var _editedRecord$blocks;
41
- const editedRecord = await registry.resolveSelect(coreStore).getEditedEntityRecord('postType', 'wp_block', patternWithOverrides.attributes.ref);
42
- const blocks = (_editedRecord$blocks = editedRecord.blocks) !== null && _editedRecord$blocks !== void 0 ? _editedRecord$blocks : parse(editedRecord.content);
43
- const block = recursivelyFindBlockWithName(blocks, name);
44
- const newAttributes = Object.assign(
45
- // Reset every existing attribute to undefined.
46
- Object.fromEntries(Object.keys(props.attributes).map(key => [key, undefined])),
47
- // Then assign the original attributes.
48
- block.attributes);
49
- props.setAttributes(newAttributes);
50
- };
51
- return createElement(BlockControls, {
52
- group: "other"
53
- }, createElement(ToolbarGroup, null, createElement(ToolbarButton, {
54
- onClick: resetOverrides,
55
- disabled: !patternWithOverrides,
56
- __experimentalIsFocusable: true
57
- }, __('Reset'))));
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","useSelect","useRegistry","coreStore","parse","__","recursivelyFindBlockWithName","blocks","name","block","attributes","metadata","found","innerBlocks","ResetOverridesControl","props","registry","patternWithOverrides","select","undefined","getBlockParentsByBlockName","getBlocksByClientId","patternBlock","clientId","content","resetOverrides","_editedRecord$blocks","editedRecord","resolveSelect","getEditedEntityRecord","ref","newAttributes","Object","assign","fromEntries","keys","map","key","setAttributes","createElement","group","onClick","disabled","__experimentalIsFocusable"],"sources":["@wordpress/patterns/src/components/reset-overrides-control.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tstore as blockEditorStore,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { parse } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\nfunction recursivelyFindBlockWithName( blocks, name ) {\n\tfor ( const block of blocks ) {\n\t\tif ( block.attributes.metadata?.name === name ) {\n\t\t\treturn block;\n\t\t}\n\n\t\tconst found = recursivelyFindBlockWithName( block.innerBlocks, name );\n\t\tif ( found ) {\n\t\t\treturn found;\n\t\t}\n\t}\n}\n\nexport default function ResetOverridesControl( props ) {\n\tconst registry = useRegistry();\n\tconst name = props.attributes.metadata?.name;\n\tconst patternWithOverrides = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! name ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst { getBlockParentsByBlockName, getBlocksByClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst patternBlock = getBlocksByClientId(\n\t\t\t\tgetBlockParentsByBlockName( props.clientId, 'core/block' )\n\t\t\t)[ 0 ];\n\n\t\t\tif ( ! patternBlock?.attributes.content?.[ name ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn patternBlock;\n\t\t},\n\t\t[ props.clientId, name ]\n\t);\n\n\tconst resetOverrides = async () => {\n\t\tconst editedRecord = await registry\n\t\t\t.resolveSelect( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\tpatternWithOverrides.attributes.ref\n\t\t\t);\n\t\tconst blocks = editedRecord.blocks ?? parse( editedRecord.content );\n\t\tconst block = recursivelyFindBlockWithName( blocks, name );\n\n\t\tconst newAttributes = Object.assign(\n\t\t\t// Reset every existing attribute to undefined.\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.keys( props.attributes ).map( ( key ) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tundefined,\n\t\t\t\t] )\n\t\t\t),\n\t\t\t// Then assign the original attributes.\n\t\t\tblock.attributes\n\t\t);\n\n\t\tprops.setAttributes( newAttributes );\n\t};\n\n\treturn (\n\t\t<BlockControls group=\"other\">\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tonClick={ resetOverrides }\n\t\t\t\t\tdisabled={ ! patternWithOverrides }\n\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,KAAK,IAAIC,gBAAgB,EACzBC,aAAa,QACP,yBAAyB;AAChC,SAASC,aAAa,EAAEC,YAAY,QAAQ,uBAAuB;AACnE,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASN,KAAK,IAAIO,SAAS,QAAQ,sBAAsB;AACzD,SAASC,KAAK,QAAQ,mBAAmB;AACzC,SAASC,EAAE,QAAQ,iBAAiB;AAEpC,SAASC,4BAA4BA,CAAEC,MAAM,EAAEC,IAAI,EAAG;EACrD,KAAM,MAAMC,KAAK,IAAIF,MAAM,EAAG;IAC7B,IAAKE,KAAK,CAACC,UAAU,CAACC,QAAQ,EAAEH,IAAI,KAAKA,IAAI,EAAG;MAC/C,OAAOC,KAAK;IACb;IAEA,MAAMG,KAAK,GAAGN,4BAA4B,CAAEG,KAAK,CAACI,WAAW,EAAEL,IAAK,CAAC;IACrE,IAAKI,KAAK,EAAG;MACZ,OAAOA,KAAK;IACb;EACD;AACD;AAEA,eAAe,SAASE,qBAAqBA,CAAEC,KAAK,EAAG;EACtD,MAAMC,QAAQ,GAAGd,WAAW,CAAC,CAAC;EAC9B,MAAMM,IAAI,GAAGO,KAAK,CAACL,UAAU,CAACC,QAAQ,EAAEH,IAAI;EAC5C,MAAMS,oBAAoB,GAAGhB,SAAS,CACnCiB,MAAM,IAAM;IACb,IAAK,CAAEV,IAAI,EAAG;MACb,OAAOW,SAAS;IACjB;IAEA,MAAM;MAAEC,0BAA0B;MAAEC;IAAoB,CAAC,GACxDH,MAAM,CAAErB,gBAAiB,CAAC;IAC3B,MAAMyB,YAAY,GAAGD,mBAAmB,CACvCD,0BAA0B,CAAEL,KAAK,CAACQ,QAAQ,EAAE,YAAa,CAC1D,CAAC,CAAE,CAAC,CAAE;IAEN,IAAK,CAAED,YAAY,EAAEZ,UAAU,CAACc,OAAO,GAAIhB,IAAI,CAAE,EAAG;MACnD,OAAOW,SAAS;IACjB;IAEA,OAAOG,YAAY;EACpB,CAAC,EACD,CAAEP,KAAK,CAACQ,QAAQ,EAAEf,IAAI,CACvB,CAAC;EAED,MAAMiB,cAAc,GAAG,MAAAA,CAAA,KAAY;IAAA,IAAAC,oBAAA;IAClC,MAAMC,YAAY,GAAG,MAAMX,QAAQ,CACjCY,aAAa,CAAEzB,SAAU,CAAC,CAC1B0B,qBAAqB,CACrB,UAAU,EACV,UAAU,EACVZ,oBAAoB,CAACP,UAAU,CAACoB,GACjC,CAAC;IACF,MAAMvB,MAAM,IAAAmB,oBAAA,GAAGC,YAAY,CAACpB,MAAM,cAAAmB,oBAAA,cAAAA,oBAAA,GAAItB,KAAK,CAAEuB,YAAY,CAACH,OAAQ,CAAC;IACnE,MAAMf,KAAK,GAAGH,4BAA4B,CAAEC,MAAM,EAAEC,IAAK,CAAC;IAE1D,MAAMuB,aAAa,GAAGC,MAAM,CAACC,MAAM;IAClC;IACAD,MAAM,CAACE,WAAW,CACjBF,MAAM,CAACG,IAAI,CAAEpB,KAAK,CAACL,UAAW,CAAC,CAAC0B,GAAG,CAAIC,GAAG,IAAM,CAC/CA,GAAG,EACHlB,SAAS,CACR,CACH,CAAC;IACD;IACAV,KAAK,CAACC,UACP,CAAC;IAEDK,KAAK,CAACuB,aAAa,CAAEP,aAAc,CAAC;EACrC,CAAC;EAED,OACCQ,aAAA,CAACzC,aAAa;IAAC0C,KAAK,EAAC;EAAO,GAC3BD,aAAA,CAACvC,YAAY,QACZuC,aAAA,CAACxC,aAAa;IACb0C,OAAO,EAAGhB,cAAgB;IAC1BiB,QAAQ,EAAG,CAAEzB,oBAAsB;IACnC0B,yBAAyB;EAAA,GAEvBtC,EAAE,CAAE,OAAQ,CACA,CACF,CACA,CAAC;AAElB","ignoreList":[]}
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;AAC1C,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;AAC7BpB,IAAI,CAAEoB,WAAW,EAAE;EAClBnB,cAAc;EACdE,kBAAkB;EAClBC,0BAA0B;EAC1BC,qBAAqB;EACrBE,kBAAkB;EAClBD,wBAAwB;EACxBE,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":[]}
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.dispatch(blockEditorStore).replaceBlocks(patternBlock.clientId, cloneBlocksAndRemoveBindings(patternBlock.innerBlocks));
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","attributes","id","bindings","Object","keys","length","innerBlocks","replaceBlocks","setEditingPattern","isEditing","type"],"sources":["@wordpress/patterns/src/store/actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\n\nimport { 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\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}\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\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.replaceBlocks(\n\t\t\t\tpatternBlock.clientId,\n\t\t\t\tcloneBlocksAndRemoveBindings( patternBlock.innerBlocks )\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":[]}
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": "1.18.0",
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": ">=16.0.0"
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": "^3.57.0",
35
- "@wordpress/block-editor": "^12.25.0",
36
- "@wordpress/blocks": "^12.34.0",
37
- "@wordpress/components": "^27.5.0",
38
- "@wordpress/compose": "^6.34.0",
39
- "@wordpress/core-data": "^6.34.0",
40
- "@wordpress/data": "^9.27.0",
41
- "@wordpress/element": "^5.34.0",
42
- "@wordpress/html-entities": "^3.57.0",
43
- "@wordpress/i18n": "^4.57.0",
44
- "@wordpress/icons": "^9.48.0",
45
- "@wordpress/notices": "^4.25.0",
46
- "@wordpress/private-apis": "^0.39.0",
47
- "@wordpress/url": "^3.58.0"
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": "581d8a5580dba8f600b7268d51eb554771ae482c"
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 { PATTERN_DEFAULT_CATEGORY, PATTERN_SYNC_TYPES } from '../constants';
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 = __( 'Create pattern' ),
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 = __( 'Create' ),
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, syncedAttributes ) {
22
- let updatedBindings = {};
23
- for ( const attributeName of syncedAttributes ) {
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, syncedAttributes ) {
40
- const updatedBindings = { ...bindings };
41
- for ( const attributeName of syncedAttributes ) {
42
- if ( ! bindings?.[ attributeName ] ) {
43
- updatedBindings[ attributeName ] = {
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, name, setAttributes } ) {
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 syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];
59
- const attributeSources = syncedAttributes.map(
60
- ( attributeName ) =>
61
- attributes.metadata?.bindings?.[ attributeName ]?.source
62
- );
63
- const isConnectedToOtherSources = attributeSources.every(
64
- ( source ) => source && source !== 'core/pattern-overrides'
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, syncedAttributes )
71
- : removeBindings( prevBindings, syncedAttributes );
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">