@wordpress/patterns 1.14.0 → 1.16.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 CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.16.0 (2024-04-03)
6
+
7
+ ## 1.15.0 (2024-03-21)
8
+
5
9
  ## 1.14.0 (2024-03-06)
6
10
 
7
11
  ## 1.13.0 (2024-02-21)
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isOverridableBlock = isOverridableBlock;
7
+ var _constants = require("../constants");
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+
12
+ /**
13
+ * Determines whether a block is overridable.
14
+ *
15
+ * @param {WPBlock} block The block to test.
16
+ *
17
+ * @return {boolean} `true` if a block is overridable, `false` otherwise.
18
+ */
19
+ function isOverridableBlock(block) {
20
+ return Object.keys(_constants.PARTIAL_SYNCING_SUPPORTED_BLOCKS).includes(block.name) && !!block.attributes.metadata?.bindings && Object.values(block.attributes.metadata.bindings).some(binding => binding.source === 'core/pattern-overrides');
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","isOverridableBlock","block","Object","keys","PARTIAL_SYNCING_SUPPORTED_BLOCKS","includes","name","attributes","metadata","bindings","values","some","binding","source"],"sources":["@wordpress/patterns/src/api/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\n/**\n * Determines whether a block is overridable.\n *\n * @param {WPBlock} block The block to test.\n *\n * @return {boolean} `true` if a block is overridable, `false` otherwise.\n */\nexport function isOverridableBlock( block ) {\n\treturn (\n\t\tObject.keys( PARTIAL_SYNCING_SUPPORTED_BLOCKS ).includes(\n\t\t\tblock.name\n\t\t) &&\n\t\t!! block.attributes.metadata?.bindings &&\n\t\tObject.values( block.attributes.metadata.bindings ).some(\n\t\t\t( binding ) => binding.source === 'core/pattern-overrides'\n\t\t)\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAAEC,KAAK,EAAG;EAC3C,OACCC,MAAM,CAACC,IAAI,CAAEC,2CAAiC,CAAC,CAACC,QAAQ,CACvDJ,KAAK,CAACK,IACP,CAAC,IACD,CAAC,CAAEL,KAAK,CAACM,UAAU,CAACC,QAAQ,EAAEC,QAAQ,IACtCP,MAAM,CAACQ,MAAM,CAAET,KAAK,CAACM,UAAU,CAACC,QAAQ,CAACC,QAAS,CAAC,CAACE,IAAI,CACrDC,OAAO,IAAMA,OAAO,CAACC,MAAM,KAAK,wBACnC,CAAC;AAEH"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = OverridesPanel;
7
+ var _react = require("react");
8
+ var _blockEditor = require("@wordpress/block-editor");
9
+ var _components = require("@wordpress/components");
10
+ var _data = require("@wordpress/data");
11
+ var _element = require("@wordpress/element");
12
+ var _i18n = require("@wordpress/i18n");
13
+ var _api = require("../api");
14
+ var _lockUnlock = require("../lock-unlock");
15
+ /**
16
+ * WordPress dependencies
17
+ */
18
+
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+
23
+ const {
24
+ BlockQuickNavigation
25
+ } = (0, _lockUnlock.unlock)(_blockEditor.privateApis);
26
+ function OverridesPanel() {
27
+ const allClientIds = (0, _data.useSelect)(select => select(_blockEditor.store).getClientIdsWithDescendants(), []);
28
+ const {
29
+ getBlock
30
+ } = (0, _data.useSelect)(_blockEditor.store);
31
+ const clientIdsWithOverrides = (0, _element.useMemo)(() => allClientIds.filter(clientId => {
32
+ const block = getBlock(clientId);
33
+ return (0, _api.isOverridableBlock)(block);
34
+ }), [allClientIds, getBlock]);
35
+ if (!clientIdsWithOverrides?.length) {
36
+ return null;
37
+ }
38
+ return (0, _react.createElement)(_components.PanelBody, {
39
+ title: (0, _i18n.__)('Overrides')
40
+ }, (0, _react.createElement)(BlockQuickNavigation, {
41
+ clientIds: clientIdsWithOverrides
42
+ }));
43
+ }
44
+ //# sourceMappingURL=overrides-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_blockEditor","require","_components","_data","_element","_i18n","_api","_lockUnlock","BlockQuickNavigation","unlock","blockEditorPrivateApis","OverridesPanel","allClientIds","useSelect","select","blockEditorStore","getClientIdsWithDescendants","getBlock","clientIdsWithOverrides","useMemo","filter","clientId","block","isOverridableBlock","length","_react","createElement","PanelBody","title","__","clientIds"],"sources":["@wordpress/patterns/src/components/overrides-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { isOverridableBlock } from '../api';\nimport { unlock } from '../lock-unlock';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nexport default function OverridesPanel() {\n\tconst allClientIds = useSelect(\n\t\t( select ) => select( blockEditorStore ).getClientIdsWithDescendants(),\n\t\t[]\n\t);\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst clientIdsWithOverrides = useMemo(\n\t\t() =>\n\t\t\tallClientIds.filter( ( clientId ) => {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\treturn isOverridableBlock( block );\n\t\t\t} ),\n\t\t[ allClientIds, getBlock ]\n\t);\n\n\tif ( ! clientIdsWithOverrides?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Overrides' ) }>\n\t\t\t<BlockQuickNavigation clientIds={ clientIdsWithOverrides } />\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAKA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AAhBA;AACA;AACA;;AAUA;AACA;AACA;;AAIA,MAAM;EAAEO;AAAqB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,wBAAuB,CAAC;AAElD,SAASC,cAAcA,CAAA,EAAG;EACxC,MAAMC,YAAY,GAAG,IAAAC,eAAS,EAC3BC,MAAM,IAAMA,MAAM,CAAEC,kBAAiB,CAAC,CAACC,2BAA2B,CAAC,CAAC,EACtE,EACD,CAAC;EACD,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAJ,eAAS,EAAEE,kBAAiB,CAAC;EAClD,MAAMG,sBAAsB,GAAG,IAAAC,gBAAO,EACrC,MACCP,YAAY,CAACQ,MAAM,CAAIC,QAAQ,IAAM;IACpC,MAAMC,KAAK,GAAGL,QAAQ,CAAEI,QAAS,CAAC;IAClC,OAAO,IAAAE,uBAAkB,EAAED,KAAM,CAAC;EACnC,CAAE,CAAC,EACJ,CAAEV,YAAY,EAAEK,QAAQ,CACzB,CAAC;EAED,IAAK,CAAEC,sBAAsB,EAAEM,MAAM,EAAG;IACvC,OAAO,IAAI;EACZ;EAEA,OACC,IAAAC,MAAA,CAAAC,aAAA,EAACxB,WAAA,CAAAyB,SAAS;IAACC,KAAK,EAAG,IAAAC,QAAE,EAAE,WAAY;EAAG,GACrC,IAAAJ,MAAA,CAAAC,aAAA,EAAClB,oBAAoB;IAACsB,SAAS,EAAGZ;EAAwB,CAAE,CAClD,CAAC;AAEd"}
@@ -5,8 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = useSetPatternBindings;
7
7
  var _compose = require("@wordpress/compose");
8
+ var _blocks = require("@wordpress/blocks");
8
9
  var _element = require("@wordpress/element");
10
+ var _data = require("@wordpress/data");
9
11
  var _constants = require("../constants");
12
+ var _lockUnlock = require("../lock-unlock");
10
13
  /**
11
14
  * WordPress dependencies
12
15
  */
@@ -47,13 +50,22 @@ function useSetPatternBindings({
47
50
  setAttributes
48
51
  }, currentPostType) {
49
52
  var _attributes$metadata$, _usePrevious;
53
+ const hasPatternOverridesSource = (0, _data.useSelect)(select => {
54
+ const {
55
+ getBlockBindingsSource
56
+ } = (0, _lockUnlock.unlock)(select(_blocks.store));
57
+
58
+ // For editing link to the site editor if the theme and user permissions support it.
59
+ return !!getBlockBindingsSource('core/pattern-overrides');
60
+ }, []);
50
61
  const metadataName = (_attributes$metadata$ = attributes?.metadata?.name) !== null && _attributes$metadata$ !== void 0 ? _attributes$metadata$ : '';
51
62
  const prevMetadataName = (_usePrevious = (0, _compose.usePrevious)(metadataName)) !== null && _usePrevious !== void 0 ? _usePrevious : '';
52
63
  const bindings = attributes?.metadata?.bindings;
53
64
  (0, _element.useEffect)(() => {
54
65
  // Bindings should only be created when editing a wp_block post type,
55
66
  // and also when there's a change to the user-given name for the block.
56
- if (currentPostType !== 'wp_block' || metadataName === prevMetadataName) {
67
+ // Also check that the pattern overrides source is registered.
68
+ if (!hasPatternOverridesSource || currentPostType !== 'wp_block' || metadataName === prevMetadataName) {
57
69
  return;
58
70
  }
59
71
  const syncedAttributes = _constants.PARTIAL_SYNCING_SUPPORTED_BLOCKS[name];
@@ -86,6 +98,6 @@ function useSetPatternBindings({
86
98
  }
87
99
  });
88
100
  }
89
- }, [bindings, prevMetadataName, metadataName, currentPostType, name, attributes.metadata, setAttributes]);
101
+ }, [hasPatternOverridesSource, bindings, prevMetadataName, metadataName, currentPostType, name, attributes.metadata, setAttributes]);
90
102
  }
91
103
  //# sourceMappingURL=use-set-pattern-bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_compose","require","_element","_constants","removeBindings","bindings","syncedAttributes","updatedBindings","attributeName","source","undefined","Object","keys","length","addBindings","useSetPatternBindings","name","attributes","setAttributes","currentPostType","_attributes$metadata$","_usePrevious","metadataName","metadata","prevMetadataName","usePrevious","useEffect","PARTIAL_SYNCING_SUPPORTED_BLOCKS","attributeSources","map","isConnectedToOtherSources","every"],"sources":["@wordpress/patterns/src/components/use-set-pattern-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nfunction removeBindings( bindings, syncedAttributes ) {\n\tlet updatedBindings = {};\n\tfor ( const attributeName of syncedAttributes ) {\n\t\t// Omit any pattern override bindings from the `updatedBindings` object.\n\t\tif (\n\t\t\tbindings?.[ attributeName ]?.source !== 'core/pattern-overrides' &&\n\t\t\tbindings?.[ attributeName ]?.source !== undefined\n\t\t) {\n\t\t\tupdatedBindings[ attributeName ] = bindings[ attributeName ];\n\t\t}\n\t}\n\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\tupdatedBindings = undefined;\n\t}\n\treturn updatedBindings;\n}\n\nfunction addBindings( bindings, syncedAttributes ) {\n\tconst updatedBindings = { ...bindings };\n\tfor ( const attributeName of syncedAttributes ) {\n\t\tif ( ! bindings?.[ attributeName ] ) {\n\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t};\n\t\t}\n\t}\n\treturn updatedBindings;\n}\n\nexport default function useSetPatternBindings(\n\t{ name, attributes, setAttributes },\n\tcurrentPostType\n) {\n\tconst metadataName = attributes?.metadata?.name ?? '';\n\tconst prevMetadataName = usePrevious( metadataName ) ?? '';\n\tconst bindings = attributes?.metadata?.bindings;\n\n\tuseEffect( () => {\n\t\t// Bindings should only be created when editing a wp_block post type,\n\t\t// and also when there's a change to the user-given name for the block.\n\t\tif (\n\t\t\tcurrentPostType !== 'wp_block' ||\n\t\t\tmetadataName === prevMetadataName\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\t\tconst attributeSources = syncedAttributes.map(\n\t\t\t( attributeName ) =>\n\t\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t\t);\n\t\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t\t);\n\n\t\t// Avoid overwriting other (e.g. meta) bindings.\n\t\tif ( isConnectedToOtherSources ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The user-given name for the block was deleted, remove the bindings.\n\t\tif ( ! metadataName?.length && prevMetadataName?.length ) {\n\t\t\tconst updatedBindings = removeBindings(\n\t\t\t\tbindings,\n\t\t\t\tsyncedAttributes\n\t\t\t);\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The user-given name for the block was set, set the bindings.\n\t\tif ( ! prevMetadataName?.length && metadataName.length ) {\n\t\t\tconst updatedBindings = addBindings( bindings, syncedAttributes );\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tbindings,\n\t\tprevMetadataName,\n\t\tmetadataName,\n\t\tcurrentPostType,\n\t\tname,\n\t\tattributes.metadata,\n\t\tsetAttributes,\n\t] );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_compose","require","_blocks","_element","_data","_constants","_lockUnlock","removeBindings","bindings","syncedAttributes","updatedBindings","attributeName","source","undefined","Object","keys","length","addBindings","useSetPatternBindings","name","attributes","setAttributes","currentPostType","_attributes$metadata$","_usePrevious","hasPatternOverridesSource","useSelect","select","getBlockBindingsSource","unlock","blocksStore","metadataName","metadata","prevMetadataName","usePrevious","useEffect","PARTIAL_SYNCING_SUPPORTED_BLOCKS","attributeSources","map","isConnectedToOtherSources","every"],"sources":["@wordpress/patterns/src/components/use-set-pattern-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nimport { unlock } from '../lock-unlock';\n\nfunction removeBindings( bindings, syncedAttributes ) {\n\tlet updatedBindings = {};\n\tfor ( const attributeName of syncedAttributes ) {\n\t\t// Omit any pattern override bindings from the `updatedBindings` object.\n\t\tif (\n\t\t\tbindings?.[ attributeName ]?.source !== 'core/pattern-overrides' &&\n\t\t\tbindings?.[ attributeName ]?.source !== undefined\n\t\t) {\n\t\t\tupdatedBindings[ attributeName ] = bindings[ attributeName ];\n\t\t}\n\t}\n\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\tupdatedBindings = undefined;\n\t}\n\treturn updatedBindings;\n}\n\nfunction addBindings( bindings, syncedAttributes ) {\n\tconst updatedBindings = { ...bindings };\n\tfor ( const attributeName of syncedAttributes ) {\n\t\tif ( ! bindings?.[ attributeName ] ) {\n\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t};\n\t\t}\n\t}\n\treturn updatedBindings;\n}\n\nexport default function useSetPatternBindings(\n\t{ name, attributes, setAttributes },\n\tcurrentPostType\n) {\n\tconst hasPatternOverridesSource = useSelect( ( select ) => {\n\t\tconst { getBlockBindingsSource } = unlock( select( blocksStore ) );\n\n\t\t// For editing link to the site editor if the theme and user permissions support it.\n\t\treturn !! getBlockBindingsSource( 'core/pattern-overrides' );\n\t}, [] );\n\n\tconst metadataName = attributes?.metadata?.name ?? '';\n\tconst prevMetadataName = usePrevious( metadataName ) ?? '';\n\tconst bindings = attributes?.metadata?.bindings;\n\n\tuseEffect( () => {\n\t\t// Bindings should only be created when editing a wp_block post type,\n\t\t// and also when there's a change to the user-given name for the block.\n\t\t// Also check that the pattern overrides source is registered.\n\t\tif (\n\t\t\t! hasPatternOverridesSource ||\n\t\t\tcurrentPostType !== 'wp_block' ||\n\t\t\tmetadataName === prevMetadataName\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\t\tconst attributeSources = syncedAttributes.map(\n\t\t\t( attributeName ) =>\n\t\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t\t);\n\t\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t\t);\n\n\t\t// Avoid overwriting other (e.g. meta) bindings.\n\t\tif ( isConnectedToOtherSources ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The user-given name for the block was deleted, remove the bindings.\n\t\tif ( ! metadataName?.length && prevMetadataName?.length ) {\n\t\t\tconst updatedBindings = removeBindings(\n\t\t\t\tbindings,\n\t\t\t\tsyncedAttributes\n\t\t\t);\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The user-given name for the block was set, set the bindings.\n\t\tif ( ! prevMetadataName?.length && metadataName.length ) {\n\t\t\tconst updatedBindings = addBindings( bindings, syncedAttributes );\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [\n\t\thasPatternOverridesSource,\n\t\tbindings,\n\t\tprevMetadataName,\n\t\tmetadataName,\n\t\tcurrentPostType,\n\t\tname,\n\t\tattributes.metadata,\n\t\tsetAttributes,\n\t] );\n}\n"],"mappings":"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"}
@@ -6,8 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.privateApis = void 0;
8
8
  var _lockUnlock = require("./lock-unlock");
9
+ var _overridesPanel = _interopRequireDefault(require("./components/overrides-panel"));
9
10
  var _createPatternModal = _interopRequireWildcard(require("./components/create-pattern-modal"));
10
11
  var _duplicatePatternModal = _interopRequireWildcard(require("./components/duplicate-pattern-modal"));
12
+ var _api = require("./api");
11
13
  var _renamePatternModal = _interopRequireDefault(require("./components/rename-pattern-modal"));
12
14
  var _components = _interopRequireDefault(require("./components"));
13
15
  var _renamePatternCategoryModal = _interopRequireDefault(require("./components/rename-pattern-category-modal"));
@@ -23,9 +25,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
23
25
 
24
26
  const privateApis = exports.privateApis = {};
25
27
  (0, _lockUnlock.lock)(privateApis, {
28
+ OverridesPanel: _overridesPanel.default,
26
29
  CreatePatternModal: _createPatternModal.default,
27
30
  CreatePatternModalContents: _createPatternModal.CreatePatternModalContents,
28
31
  DuplicatePatternModal: _duplicatePatternModal.default,
32
+ isOverridableBlock: _api.isOverridableBlock,
29
33
  useDuplicatePatternProps: _duplicatePatternModal.useDuplicatePatternProps,
30
34
  RenamePatternModal: _renamePatternModal.default,
31
35
  PatternsMenuItems: _components.default,
@@ -1 +1 @@
1
- {"version":3,"names":["_lockUnlock","require","_createPatternModal","_interopRequireWildcard","_duplicatePatternModal","_renamePatternModal","_interopRequireDefault","_components","_renamePatternCategoryModal","_useSetPatternBindings","_resetOverridesControl","_privateHooks","_constants","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","useSetPatternBindings","ResetOverridesControl","useAddPatternCategory","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","PARTIAL_SYNCING_SUPPORTED_BLOCKS"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport {\n\tdefault as CreatePatternModal,\n\tCreatePatternModalContents,\n} from './components/create-pattern-modal';\nimport {\n\tdefault as DuplicatePatternModal,\n\tuseDuplicatePatternProps,\n} from './components/duplicate-pattern-modal';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport useSetPatternBindings from './components/use-set-pattern-bindings';\nimport ResetOverridesControl from './components/reset-overrides-control';\nimport { useAddPatternCategory } from './private-hooks';\nimport {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tuseSetPatternBindings,\n\tResetOverridesControl,\n\tuseAddPatternCategory,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AAIA,IAAAG,sBAAA,GAAAD,uBAAA,CAAAF,OAAA;AAIA,IAAAI,mBAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,WAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,2BAAA,GAAAF,sBAAA,CAAAL,OAAA;AACA,IAAAQ,sBAAA,GAAAH,sBAAA,CAAAL,OAAA;AACA,IAAAS,sBAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,aAAA,GAAAV,OAAA;AACA,IAAAW,UAAA,GAAAX,OAAA;AAOqB,SAAAY,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAzBrB;AACA;AACA;;AAyBO,MAAMY,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,CAAC,CAAC;AAC7B,IAAAE,gBAAI,EAAEF,WAAW,EAAE;EAClBG,kBAAkB,EAAlBA,2BAAkB;EAClBC,0BAA0B,EAA1BA,8CAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,wBAAwB,EAAxBA,+CAAwB;EACxBC,kBAAkB,EAAlBA,2BAAkB;EAClBC,iBAAiB,EAAjBA,mBAAiB;EACjBC,0BAA0B,EAA1BA,mCAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,qBAAqB,EAArBA,8BAAqB;EACrBC,qBAAqB,EAArBA,mCAAqB;EACrBC,aAAa,EAAbA,wBAAa;EACbC,wBAAwB,EAAxBA,mCAAwB;EACxBC,qBAAqB,EAArBA,gCAAqB;EACrBC,wBAAwB,EAAxBA,mCAAwB;EACxBC,kBAAkB,EAAlBA,6BAAkB;EAClBC,gCAAgC,EAAhCA;AACD,CAAE,CAAC"}
1
+ {"version":3,"names":["_lockUnlock","require","_overridesPanel","_interopRequireDefault","_createPatternModal","_interopRequireWildcard","_duplicatePatternModal","_api","_renamePatternModal","_components","_renamePatternCategoryModal","_useSetPatternBindings","_resetOverridesControl","_privateHooks","_constants","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","OverridesPanel","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","isOverridableBlock","useDuplicatePatternProps","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","useSetPatternBindings","ResetOverridesControl","useAddPatternCategory","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","PARTIAL_SYNCING_SUPPORTED_BLOCKS"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport 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 useSetPatternBindings from './components/use-set-pattern-bindings';\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\tuseSetPatternBindings,\n\tResetOverridesControl,\n\tuseAddPatternCategory,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAIA,IAAAK,sBAAA,GAAAD,uBAAA,CAAAJ,OAAA;AAIA,IAAAM,IAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,WAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,2BAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,sBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,sBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,aAAA,GAAAZ,OAAA;AACA,IAAAa,UAAA,GAAAb,OAAA;AAOqB,SAAAc,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AA3BrB;AACA;AACA;;AA2BO,MAAMY,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,CAAC,CAAC;AAC7B,IAAAE,gBAAI,EAAEF,WAAW,EAAE;EAClBG,cAAc,EAAdA,uBAAc;EACdC,kBAAkB,EAAlBA,2BAAkB;EAClBC,0BAA0B,EAA1BA,8CAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,kBAAkB,EAAlBA,uBAAkB;EAClBC,wBAAwB,EAAxBA,+CAAwB;EACxBC,kBAAkB,EAAlBA,2BAAkB;EAClBC,iBAAiB,EAAjBA,mBAAiB;EACjBC,0BAA0B,EAA1BA,mCAA0B;EAC1BC,qBAAqB,EAArBA,8BAAqB;EACrBC,qBAAqB,EAArBA,8BAAqB;EACrBC,qBAAqB,EAArBA,mCAAqB;EACrBC,aAAa,EAAbA,wBAAa;EACbC,wBAAwB,EAAxBA,mCAAwB;EACxBC,qBAAqB,EAArBA,gCAAqB;EACrBC,wBAAwB,EAAxBA,mCAAwB;EACxBC,kBAAkB,EAAlBA,6BAAkB;EAClBC,gCAAgC,EAAhCA;AACD,CAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';
5
+
6
+ /**
7
+ * Determines whether a block is overridable.
8
+ *
9
+ * @param {WPBlock} block The block to test.
10
+ *
11
+ * @return {boolean} `true` if a block is overridable, `false` otherwise.
12
+ */
13
+ export function isOverridableBlock(block) {
14
+ return Object.keys(PARTIAL_SYNCING_SUPPORTED_BLOCKS).includes(block.name) && !!block.attributes.metadata?.bindings && Object.values(block.attributes.metadata.bindings).some(binding => binding.source === 'core/pattern-overrides');
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PARTIAL_SYNCING_SUPPORTED_BLOCKS","isOverridableBlock","block","Object","keys","includes","name","attributes","metadata","bindings","values","some","binding","source"],"sources":["@wordpress/patterns/src/api/index.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\n/**\n * Determines whether a block is overridable.\n *\n * @param {WPBlock} block The block to test.\n *\n * @return {boolean} `true` if a block is overridable, `false` otherwise.\n */\nexport function isOverridableBlock( block ) {\n\treturn (\n\t\tObject.keys( PARTIAL_SYNCING_SUPPORTED_BLOCKS ).includes(\n\t\t\tblock.name\n\t\t) &&\n\t\t!! block.attributes.metadata?.bindings &&\n\t\tObject.values( block.attributes.metadata.bindings ).some(\n\t\t\t( binding ) => binding.source === 'core/pattern-overrides'\n\t\t)\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,gCAAgC,QAAQ,cAAc;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAEC,KAAK,EAAG;EAC3C,OACCC,MAAM,CAACC,IAAI,CAAEJ,gCAAiC,CAAC,CAACK,QAAQ,CACvDH,KAAK,CAACI,IACP,CAAC,IACD,CAAC,CAAEJ,KAAK,CAACK,UAAU,CAACC,QAAQ,EAAEC,QAAQ,IACtCN,MAAM,CAACO,MAAM,CAAER,KAAK,CAACK,UAAU,CAACC,QAAQ,CAACC,QAAS,CAAC,CAACE,IAAI,CACrDC,OAAO,IAAMA,OAAO,CAACC,MAAM,KAAK,wBACnC,CAAC;AAEH"}
@@ -0,0 +1,37 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * WordPress dependencies
4
+ */
5
+ import { privateApis as blockEditorPrivateApis, store as blockEditorStore } from '@wordpress/block-editor';
6
+ import { PanelBody } from '@wordpress/components';
7
+ import { useSelect } from '@wordpress/data';
8
+ import { useMemo } from '@wordpress/element';
9
+ import { __ } from '@wordpress/i18n';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import { isOverridableBlock } from '../api';
15
+ import { unlock } from '../lock-unlock';
16
+ const {
17
+ BlockQuickNavigation
18
+ } = unlock(blockEditorPrivateApis);
19
+ export default function OverridesPanel() {
20
+ const allClientIds = useSelect(select => select(blockEditorStore).getClientIdsWithDescendants(), []);
21
+ const {
22
+ getBlock
23
+ } = useSelect(blockEditorStore);
24
+ const clientIdsWithOverrides = useMemo(() => allClientIds.filter(clientId => {
25
+ const block = getBlock(clientId);
26
+ return isOverridableBlock(block);
27
+ }), [allClientIds, getBlock]);
28
+ if (!clientIdsWithOverrides?.length) {
29
+ return null;
30
+ }
31
+ return createElement(PanelBody, {
32
+ title: __('Overrides')
33
+ }, createElement(BlockQuickNavigation, {
34
+ clientIds: clientIdsWithOverrides
35
+ }));
36
+ }
37
+ //# sourceMappingURL=overrides-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["privateApis","blockEditorPrivateApis","store","blockEditorStore","PanelBody","useSelect","useMemo","__","isOverridableBlock","unlock","BlockQuickNavigation","OverridesPanel","allClientIds","select","getClientIdsWithDescendants","getBlock","clientIdsWithOverrides","filter","clientId","block","length","createElement","title","clientIds"],"sources":["@wordpress/patterns/src/components/overrides-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { isOverridableBlock } from '../api';\nimport { unlock } from '../lock-unlock';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nexport default function OverridesPanel() {\n\tconst allClientIds = useSelect(\n\t\t( select ) => select( blockEditorStore ).getClientIdsWithDescendants(),\n\t\t[]\n\t);\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst clientIdsWithOverrides = useMemo(\n\t\t() =>\n\t\t\tallClientIds.filter( ( clientId ) => {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\treturn isOverridableBlock( block );\n\t\t\t} ),\n\t\t[ allClientIds, getBlock ]\n\t);\n\n\tif ( ! clientIdsWithOverrides?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Overrides' ) }>\n\t\t\t<BlockQuickNavigation clientIds={ clientIdsWithOverrides } />\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,WAAW,IAAIC,sBAAsB,EACrCC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SAASC,SAAS,QAAQ,uBAAuB;AACjD,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASC,kBAAkB,QAAQ,QAAQ;AAC3C,SAASC,MAAM,QAAQ,gBAAgB;AAEvC,MAAM;EAAEC;AAAqB,CAAC,GAAGD,MAAM,CAAER,sBAAuB,CAAC;AAEjE,eAAe,SAASU,cAAcA,CAAA,EAAG;EACxC,MAAMC,YAAY,GAAGP,SAAS,CAC3BQ,MAAM,IAAMA,MAAM,CAAEV,gBAAiB,CAAC,CAACW,2BAA2B,CAAC,CAAC,EACtE,EACD,CAAC;EACD,MAAM;IAAEC;EAAS,CAAC,GAAGV,SAAS,CAAEF,gBAAiB,CAAC;EAClD,MAAMa,sBAAsB,GAAGV,OAAO,CACrC,MACCM,YAAY,CAACK,MAAM,CAAIC,QAAQ,IAAM;IACpC,MAAMC,KAAK,GAAGJ,QAAQ,CAAEG,QAAS,CAAC;IAClC,OAAOV,kBAAkB,CAAEW,KAAM,CAAC;EACnC,CAAE,CAAC,EACJ,CAAEP,YAAY,EAAEG,QAAQ,CACzB,CAAC;EAED,IAAK,CAAEC,sBAAsB,EAAEI,MAAM,EAAG;IACvC,OAAO,IAAI;EACZ;EAEA,OACCC,aAAA,CAACjB,SAAS;IAACkB,KAAK,EAAGf,EAAE,CAAE,WAAY;EAAG,GACrCc,aAAA,CAACX,oBAAoB;IAACa,SAAS,EAAGP;EAAwB,CAAE,CAClD,CAAC;AAEd"}
@@ -2,12 +2,15 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { usePrevious } from '@wordpress/compose';
5
+ import { store as blocksStore } from '@wordpress/blocks';
5
6
  import { useEffect } from '@wordpress/element';
7
+ import { useSelect } from '@wordpress/data';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
9
11
  */
10
12
  import { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';
13
+ import { unlock } from '../lock-unlock';
11
14
  function removeBindings(bindings, syncedAttributes) {
12
15
  let updatedBindings = {};
13
16
  for (const attributeName of syncedAttributes) {
@@ -40,13 +43,22 @@ export default function useSetPatternBindings({
40
43
  setAttributes
41
44
  }, currentPostType) {
42
45
  var _attributes$metadata$, _usePrevious;
46
+ const hasPatternOverridesSource = useSelect(select => {
47
+ const {
48
+ getBlockBindingsSource
49
+ } = unlock(select(blocksStore));
50
+
51
+ // For editing link to the site editor if the theme and user permissions support it.
52
+ return !!getBlockBindingsSource('core/pattern-overrides');
53
+ }, []);
43
54
  const metadataName = (_attributes$metadata$ = attributes?.metadata?.name) !== null && _attributes$metadata$ !== void 0 ? _attributes$metadata$ : '';
44
55
  const prevMetadataName = (_usePrevious = usePrevious(metadataName)) !== null && _usePrevious !== void 0 ? _usePrevious : '';
45
56
  const bindings = attributes?.metadata?.bindings;
46
57
  useEffect(() => {
47
58
  // Bindings should only be created when editing a wp_block post type,
48
59
  // and also when there's a change to the user-given name for the block.
49
- if (currentPostType !== 'wp_block' || metadataName === prevMetadataName) {
60
+ // Also check that the pattern overrides source is registered.
61
+ if (!hasPatternOverridesSource || currentPostType !== 'wp_block' || metadataName === prevMetadataName) {
50
62
  return;
51
63
  }
52
64
  const syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[name];
@@ -79,6 +91,6 @@ export default function useSetPatternBindings({
79
91
  }
80
92
  });
81
93
  }
82
- }, [bindings, prevMetadataName, metadataName, currentPostType, name, attributes.metadata, setAttributes]);
94
+ }, [hasPatternOverridesSource, bindings, prevMetadataName, metadataName, currentPostType, name, attributes.metadata, setAttributes]);
83
95
  }
84
96
  //# sourceMappingURL=use-set-pattern-bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["usePrevious","useEffect","PARTIAL_SYNCING_SUPPORTED_BLOCKS","removeBindings","bindings","syncedAttributes","updatedBindings","attributeName","source","undefined","Object","keys","length","addBindings","useSetPatternBindings","name","attributes","setAttributes","currentPostType","_attributes$metadata$","_usePrevious","metadataName","metadata","prevMetadataName","attributeSources","map","isConnectedToOtherSources","every"],"sources":["@wordpress/patterns/src/components/use-set-pattern-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nfunction removeBindings( bindings, syncedAttributes ) {\n\tlet updatedBindings = {};\n\tfor ( const attributeName of syncedAttributes ) {\n\t\t// Omit any pattern override bindings from the `updatedBindings` object.\n\t\tif (\n\t\t\tbindings?.[ attributeName ]?.source !== 'core/pattern-overrides' &&\n\t\t\tbindings?.[ attributeName ]?.source !== undefined\n\t\t) {\n\t\t\tupdatedBindings[ attributeName ] = bindings[ attributeName ];\n\t\t}\n\t}\n\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\tupdatedBindings = undefined;\n\t}\n\treturn updatedBindings;\n}\n\nfunction addBindings( bindings, syncedAttributes ) {\n\tconst updatedBindings = { ...bindings };\n\tfor ( const attributeName of syncedAttributes ) {\n\t\tif ( ! bindings?.[ attributeName ] ) {\n\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t};\n\t\t}\n\t}\n\treturn updatedBindings;\n}\n\nexport default function useSetPatternBindings(\n\t{ name, attributes, setAttributes },\n\tcurrentPostType\n) {\n\tconst metadataName = attributes?.metadata?.name ?? '';\n\tconst prevMetadataName = usePrevious( metadataName ) ?? '';\n\tconst bindings = attributes?.metadata?.bindings;\n\n\tuseEffect( () => {\n\t\t// Bindings should only be created when editing a wp_block post type,\n\t\t// and also when there's a change to the user-given name for the block.\n\t\tif (\n\t\t\tcurrentPostType !== 'wp_block' ||\n\t\t\tmetadataName === prevMetadataName\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\t\tconst attributeSources = syncedAttributes.map(\n\t\t\t( attributeName ) =>\n\t\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t\t);\n\t\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t\t);\n\n\t\t// Avoid overwriting other (e.g. meta) bindings.\n\t\tif ( isConnectedToOtherSources ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The user-given name for the block was deleted, remove the bindings.\n\t\tif ( ! metadataName?.length && prevMetadataName?.length ) {\n\t\t\tconst updatedBindings = removeBindings(\n\t\t\t\tbindings,\n\t\t\t\tsyncedAttributes\n\t\t\t);\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The user-given name for the block was set, set the bindings.\n\t\tif ( ! prevMetadataName?.length && metadataName.length ) {\n\t\t\tconst updatedBindings = addBindings( bindings, syncedAttributes );\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tbindings,\n\t\tprevMetadataName,\n\t\tmetadataName,\n\t\tcurrentPostType,\n\t\tname,\n\t\tattributes.metadata,\n\t\tsetAttributes,\n\t] );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["usePrevious","store","blocksStore","useEffect","useSelect","PARTIAL_SYNCING_SUPPORTED_BLOCKS","unlock","removeBindings","bindings","syncedAttributes","updatedBindings","attributeName","source","undefined","Object","keys","length","addBindings","useSetPatternBindings","name","attributes","setAttributes","currentPostType","_attributes$metadata$","_usePrevious","hasPatternOverridesSource","select","getBlockBindingsSource","metadataName","metadata","prevMetadataName","attributeSources","map","isConnectedToOtherSources","every"],"sources":["@wordpress/patterns/src/components/use-set-pattern-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { usePrevious } from '@wordpress/compose';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';\n\nimport { unlock } from '../lock-unlock';\n\nfunction removeBindings( bindings, syncedAttributes ) {\n\tlet updatedBindings = {};\n\tfor ( const attributeName of syncedAttributes ) {\n\t\t// Omit any pattern override bindings from the `updatedBindings` object.\n\t\tif (\n\t\t\tbindings?.[ attributeName ]?.source !== 'core/pattern-overrides' &&\n\t\t\tbindings?.[ attributeName ]?.source !== undefined\n\t\t) {\n\t\t\tupdatedBindings[ attributeName ] = bindings[ attributeName ];\n\t\t}\n\t}\n\tif ( ! Object.keys( updatedBindings ).length ) {\n\t\tupdatedBindings = undefined;\n\t}\n\treturn updatedBindings;\n}\n\nfunction addBindings( bindings, syncedAttributes ) {\n\tconst updatedBindings = { ...bindings };\n\tfor ( const attributeName of syncedAttributes ) {\n\t\tif ( ! bindings?.[ attributeName ] ) {\n\t\t\tupdatedBindings[ attributeName ] = {\n\t\t\t\tsource: 'core/pattern-overrides',\n\t\t\t};\n\t\t}\n\t}\n\treturn updatedBindings;\n}\n\nexport default function useSetPatternBindings(\n\t{ name, attributes, setAttributes },\n\tcurrentPostType\n) {\n\tconst hasPatternOverridesSource = useSelect( ( select ) => {\n\t\tconst { getBlockBindingsSource } = unlock( select( blocksStore ) );\n\n\t\t// For editing link to the site editor if the theme and user permissions support it.\n\t\treturn !! getBlockBindingsSource( 'core/pattern-overrides' );\n\t}, [] );\n\n\tconst metadataName = attributes?.metadata?.name ?? '';\n\tconst prevMetadataName = usePrevious( metadataName ) ?? '';\n\tconst bindings = attributes?.metadata?.bindings;\n\n\tuseEffect( () => {\n\t\t// Bindings should only be created when editing a wp_block post type,\n\t\t// and also when there's a change to the user-given name for the block.\n\t\t// Also check that the pattern overrides source is registered.\n\t\tif (\n\t\t\t! hasPatternOverridesSource ||\n\t\t\tcurrentPostType !== 'wp_block' ||\n\t\t\tmetadataName === prevMetadataName\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst syncedAttributes = PARTIAL_SYNCING_SUPPORTED_BLOCKS[ name ];\n\t\tconst attributeSources = syncedAttributes.map(\n\t\t\t( attributeName ) =>\n\t\t\t\tattributes.metadata?.bindings?.[ attributeName ]?.source\n\t\t);\n\t\tconst isConnectedToOtherSources = attributeSources.every(\n\t\t\t( source ) => source && source !== 'core/pattern-overrides'\n\t\t);\n\n\t\t// Avoid overwriting other (e.g. meta) bindings.\n\t\tif ( isConnectedToOtherSources ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The user-given name for the block was deleted, remove the bindings.\n\t\tif ( ! metadataName?.length && prevMetadataName?.length ) {\n\t\t\tconst updatedBindings = removeBindings(\n\t\t\t\tbindings,\n\t\t\t\tsyncedAttributes\n\t\t\t);\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The user-given name for the block was set, set the bindings.\n\t\tif ( ! prevMetadataName?.length && metadataName.length ) {\n\t\t\tconst updatedBindings = addBindings( bindings, syncedAttributes );\n\t\t\tsetAttributes( {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...attributes.metadata,\n\t\t\t\t\tbindings: updatedBindings,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [\n\t\thasPatternOverridesSource,\n\t\tbindings,\n\t\tprevMetadataName,\n\t\tmetadataName,\n\t\tcurrentPostType,\n\t\tname,\n\t\tattributes.metadata,\n\t\tsetAttributes,\n\t] );\n}\n"],"mappings":"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"}
@@ -2,8 +2,10 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { lock } from './lock-unlock';
5
+ import OverridesPanel from './components/overrides-panel';
5
6
  import { default as CreatePatternModal, CreatePatternModalContents } from './components/create-pattern-modal';
6
7
  import { default as DuplicatePatternModal, useDuplicatePatternProps } from './components/duplicate-pattern-modal';
8
+ import { isOverridableBlock } from './api';
7
9
  import RenamePatternModal from './components/rename-pattern-modal';
8
10
  import PatternsMenuItems from './components';
9
11
  import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
@@ -13,9 +15,11 @@ import { useAddPatternCategory } from './private-hooks';
13
15
  import { PATTERN_TYPES, PATTERN_DEFAULT_CATEGORY, PATTERN_USER_CATEGORY, EXCLUDED_PATTERN_SOURCES, PATTERN_SYNC_TYPES, PARTIAL_SYNCING_SUPPORTED_BLOCKS } from './constants';
14
16
  export const privateApis = {};
15
17
  lock(privateApis, {
18
+ OverridesPanel,
16
19
  CreatePatternModal,
17
20
  CreatePatternModalContents,
18
21
  DuplicatePatternModal,
22
+ isOverridableBlock,
19
23
  useDuplicatePatternProps,
20
24
  RenamePatternModal,
21
25
  PatternsMenuItems,
@@ -1 +1 @@
1
- {"version":3,"names":["lock","default","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","useSetPatternBindings","ResetOverridesControl","useAddPatternCategory","PATTERN_TYPES","PATTERN_DEFAULT_CATEGORY","PATTERN_USER_CATEGORY","EXCLUDED_PATTERN_SOURCES","PATTERN_SYNC_TYPES","PARTIAL_SYNCING_SUPPORTED_BLOCKS","privateApis"],"sources":["@wordpress/patterns/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { lock } from './lock-unlock';\nimport {\n\tdefault as CreatePatternModal,\n\tCreatePatternModalContents,\n} from './components/create-pattern-modal';\nimport {\n\tdefault as DuplicatePatternModal,\n\tuseDuplicatePatternProps,\n} from './components/duplicate-pattern-modal';\nimport RenamePatternModal from './components/rename-pattern-modal';\nimport PatternsMenuItems from './components';\nimport RenamePatternCategoryModal from './components/rename-pattern-category-modal';\nimport useSetPatternBindings from './components/use-set-pattern-bindings';\nimport ResetOverridesControl from './components/reset-overrides-control';\nimport { useAddPatternCategory } from './private-hooks';\nimport {\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} from './constants';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tCreatePatternModal,\n\tCreatePatternModalContents,\n\tDuplicatePatternModal,\n\tuseDuplicatePatternProps,\n\tRenamePatternModal,\n\tPatternsMenuItems,\n\tRenamePatternCategoryModal,\n\tuseSetPatternBindings,\n\tResetOverridesControl,\n\tuseAddPatternCategory,\n\tPATTERN_TYPES,\n\tPATTERN_DEFAULT_CATEGORY,\n\tPATTERN_USER_CATEGORY,\n\tEXCLUDED_PATTERN_SOURCES,\n\tPATTERN_SYNC_TYPES,\n\tPARTIAL_SYNCING_SUPPORTED_BLOCKS,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAI,QAAQ,eAAe;AACpC,SACCC,OAAO,IAAIC,kBAAkB,EAC7BC,0BAA0B,QACpB,mCAAmC;AAC1C,SACCF,OAAO,IAAIG,qBAAqB,EAChCC,wBAAwB,QAClB,sCAAsC;AAC7C,OAAOC,kBAAkB,MAAM,mCAAmC;AAClE,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,0BAA0B,MAAM,4CAA4C;AACnF,OAAOC,qBAAqB,MAAM,uCAAuC;AACzE,OAAOC,qBAAqB,MAAM,sCAAsC;AACxE,SAASC,qBAAqB,QAAQ,iBAAiB;AACvD,SACCC,aAAa,EACbC,wBAAwB,EACxBC,qBAAqB,EACrBC,wBAAwB,EACxBC,kBAAkB,EAClBC,gCAAgC,QAC1B,aAAa;AAEpB,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BlB,IAAI,CAAEkB,WAAW,EAAE;EAClBhB,kBAAkB;EAClBC,0BAA0B;EAC1BC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC,iBAAiB;EACjBC,0BAA0B;EAC1BC,qBAAqB;EACrBC,qBAAqB;EACrBC,qBAAqB;EACrBC,aAAa;EACbC,wBAAwB;EACxBC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC;AACD,CAAE,CAAC"}
1
+ {"version":3,"names":["lock","OverridesPanel","default","CreatePatternModal","CreatePatternModalContents","DuplicatePatternModal","useDuplicatePatternProps","isOverridableBlock","RenamePatternModal","PatternsMenuItems","RenamePatternCategoryModal","useSetPatternBindings","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 useSetPatternBindings from './components/use-set-pattern-bindings';\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\tuseSetPatternBindings,\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,qBAAqB,MAAM,uCAAuC;AACzE,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,qBAAqB;EACrBC,qBAAqB;EACrBC,qBAAqB;EACrBC,aAAa;EACbC,wBAAwB;EACxBC,qBAAqB;EACrBC,wBAAwB;EACxBC,kBAAkB;EAClBC;AACD,CAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/patterns",
3
- "version": "1.14.0",
3
+ "version": "1.16.0",
4
4
  "description": "Management of user pattern editing.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -31,20 +31,20 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@babel/runtime": "^7.16.0",
34
- "@wordpress/a11y": "^3.53.0",
35
- "@wordpress/block-editor": "^12.21.0",
36
- "@wordpress/blocks": "^12.30.0",
37
- "@wordpress/components": "^27.1.0",
38
- "@wordpress/compose": "^6.30.0",
39
- "@wordpress/core-data": "^6.30.0",
40
- "@wordpress/data": "^9.23.0",
41
- "@wordpress/element": "^5.30.0",
42
- "@wordpress/html-entities": "^3.53.0",
43
- "@wordpress/i18n": "^4.53.0",
44
- "@wordpress/icons": "^9.44.0",
45
- "@wordpress/notices": "^4.21.0",
46
- "@wordpress/private-apis": "^0.35.0",
47
- "@wordpress/url": "^3.54.0"
34
+ "@wordpress/a11y": "^3.55.0",
35
+ "@wordpress/block-editor": "^12.23.0",
36
+ "@wordpress/blocks": "^12.32.0",
37
+ "@wordpress/components": "^27.3.0",
38
+ "@wordpress/compose": "^6.32.0",
39
+ "@wordpress/core-data": "^6.32.0",
40
+ "@wordpress/data": "^9.25.0",
41
+ "@wordpress/element": "^5.32.0",
42
+ "@wordpress/html-entities": "^3.55.0",
43
+ "@wordpress/i18n": "^4.55.0",
44
+ "@wordpress/icons": "^9.46.0",
45
+ "@wordpress/notices": "^4.23.0",
46
+ "@wordpress/private-apis": "^0.37.0",
47
+ "@wordpress/url": "^3.56.0"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": "^18.0.0",
@@ -53,5 +53,5 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "ac3c3e465a083081a86a4da6ee6fb817b41e5130"
56
+ "gitHead": "ac2b13783c28f959770cf029a797a712f59e1958"
57
57
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';
5
+
6
+ /**
7
+ * Determines whether a block is overridable.
8
+ *
9
+ * @param {WPBlock} block The block to test.
10
+ *
11
+ * @return {boolean} `true` if a block is overridable, `false` otherwise.
12
+ */
13
+ export function isOverridableBlock( block ) {
14
+ return (
15
+ Object.keys( PARTIAL_SYNCING_SUPPORTED_BLOCKS ).includes(
16
+ block.name
17
+ ) &&
18
+ !! block.attributes.metadata?.bindings &&
19
+ Object.values( block.attributes.metadata.bindings ).some(
20
+ ( binding ) => binding.source === 'core/pattern-overrides'
21
+ )
22
+ );
23
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ privateApis as blockEditorPrivateApis,
6
+ store as blockEditorStore,
7
+ } from '@wordpress/block-editor';
8
+ import { PanelBody } from '@wordpress/components';
9
+ import { useSelect } from '@wordpress/data';
10
+ import { useMemo } from '@wordpress/element';
11
+ import { __ } from '@wordpress/i18n';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import { isOverridableBlock } from '../api';
17
+ import { unlock } from '../lock-unlock';
18
+
19
+ const { BlockQuickNavigation } = unlock( blockEditorPrivateApis );
20
+
21
+ export default function OverridesPanel() {
22
+ const allClientIds = useSelect(
23
+ ( select ) => select( blockEditorStore ).getClientIdsWithDescendants(),
24
+ []
25
+ );
26
+ const { getBlock } = useSelect( blockEditorStore );
27
+ const clientIdsWithOverrides = useMemo(
28
+ () =>
29
+ allClientIds.filter( ( clientId ) => {
30
+ const block = getBlock( clientId );
31
+ return isOverridableBlock( block );
32
+ } ),
33
+ [ allClientIds, getBlock ]
34
+ );
35
+
36
+ if ( ! clientIdsWithOverrides?.length ) {
37
+ return null;
38
+ }
39
+
40
+ return (
41
+ <PanelBody title={ __( 'Overrides' ) }>
42
+ <BlockQuickNavigation clientIds={ clientIdsWithOverrides } />
43
+ </PanelBody>
44
+ );
45
+ }
@@ -2,13 +2,17 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { usePrevious } from '@wordpress/compose';
5
+ import { store as blocksStore } from '@wordpress/blocks';
5
6
  import { useEffect } from '@wordpress/element';
7
+ import { useSelect } from '@wordpress/data';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
9
11
  */
10
12
  import { PARTIAL_SYNCING_SUPPORTED_BLOCKS } from '../constants';
11
13
 
14
+ import { unlock } from '../lock-unlock';
15
+
12
16
  function removeBindings( bindings, syncedAttributes ) {
13
17
  let updatedBindings = {};
14
18
  for ( const attributeName of syncedAttributes ) {
@@ -42,6 +46,13 @@ export default function useSetPatternBindings(
42
46
  { name, attributes, setAttributes },
43
47
  currentPostType
44
48
  ) {
49
+ const hasPatternOverridesSource = useSelect( ( select ) => {
50
+ const { getBlockBindingsSource } = unlock( select( blocksStore ) );
51
+
52
+ // For editing link to the site editor if the theme and user permissions support it.
53
+ return !! getBlockBindingsSource( 'core/pattern-overrides' );
54
+ }, [] );
55
+
45
56
  const metadataName = attributes?.metadata?.name ?? '';
46
57
  const prevMetadataName = usePrevious( metadataName ) ?? '';
47
58
  const bindings = attributes?.metadata?.bindings;
@@ -49,7 +60,9 @@ export default function useSetPatternBindings(
49
60
  useEffect( () => {
50
61
  // Bindings should only be created when editing a wp_block post type,
51
62
  // and also when there's a change to the user-given name for the block.
63
+ // Also check that the pattern overrides source is registered.
52
64
  if (
65
+ ! hasPatternOverridesSource ||
53
66
  currentPostType !== 'wp_block' ||
54
67
  metadataName === prevMetadataName
55
68
  ) {
@@ -95,6 +108,7 @@ export default function useSetPatternBindings(
95
108
  } );
96
109
  }
97
110
  }, [
111
+ hasPatternOverridesSource,
98
112
  bindings,
99
113
  prevMetadataName,
100
114
  metadataName,
@@ -2,6 +2,7 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { lock } from './lock-unlock';
5
+ import OverridesPanel from './components/overrides-panel';
5
6
  import {
6
7
  default as CreatePatternModal,
7
8
  CreatePatternModalContents,
@@ -10,6 +11,7 @@ import {
10
11
  default as DuplicatePatternModal,
11
12
  useDuplicatePatternProps,
12
13
  } from './components/duplicate-pattern-modal';
14
+ import { isOverridableBlock } from './api';
13
15
  import RenamePatternModal from './components/rename-pattern-modal';
14
16
  import PatternsMenuItems from './components';
15
17
  import RenamePatternCategoryModal from './components/rename-pattern-category-modal';
@@ -27,9 +29,11 @@ import {
27
29
 
28
30
  export const privateApis = {};
29
31
  lock( privateApis, {
32
+ OverridesPanel,
30
33
  CreatePatternModal,
31
34
  CreatePatternModalContents,
32
35
  DuplicatePatternModal,
36
+ isOverridableBlock,
33
37
  useDuplicatePatternProps,
34
38
  RenamePatternModal,
35
39
  PatternsMenuItems,