UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 5.19 kB
{ "version": 3, "sources": ["../../src/hooks/pattern-overrides.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { privateApis as patternsPrivateApis } from '@wordpress/patterns';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport {\n\tstore as blockEditorStore,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { getBlockBindingsSource } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\nconst {\n\tPatternOverridesControls,\n\tResetOverridesControl,\n\tPATTERN_TYPES,\n\tPATTERN_SYNC_TYPES,\n} = unlock( patternsPrivateApis );\n\n/**\n * Override the default edit UI to include a new block inspector control for\n * assigning a partial syncing controls to supported blocks in the pattern editor.\n *\n * @param {Component} BlockEdit Original component.\n *\n * @return {Component} Wrapped component.\n */\nconst withPatternOverrideControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst isSupportedBlock = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { __experimentalBlockBindingsSupportedAttributes } =\n\t\t\t\t\tselect( blockEditorStore ).getSettings();\n\t\t\t\treturn !! __experimentalBlockBindingsSupportedAttributes?.[\n\t\t\t\t\tprops.name\n\t\t\t\t];\n\t\t\t},\n\t\t\t[ props.name ]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit key=\"edit\" { ...props } />\n\t\t\t\t{ props.isSelected && isSupportedBlock && (\n\t\t\t\t\t<ControlsWithStoreSubscription { ...props } />\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t},\n\t'withPatternOverrideControls'\n);\n\n// Split into a separate component to avoid a store subscription\n// on every block.\nfunction ControlsWithStoreSubscription( props ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst { hasPatternOverridesSource, isEditingSyncedPattern } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPostType, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\n\t\t\treturn {\n\t\t\t\t// For editing link to the site editor if the theme and user permissions support it.\n\t\t\t\thasPatternOverridesSource: !! getBlockBindingsSource(\n\t\t\t\t\t'core/pattern-overrides'\n\t\t\t\t),\n\t\t\t\tisEditingSyncedPattern:\n\t\t\t\t\tgetCurrentPostType() === PATTERN_TYPES.user &&\n\t\t\t\t\tgetEditedPostAttribute( 'meta' )?.wp_pattern_sync_status !==\n\t\t\t\t\t\tPATTERN_SYNC_TYPES.unsynced &&\n\t\t\t\t\tgetEditedPostAttribute( 'wp_pattern_sync_status' ) !==\n\t\t\t\t\t\tPATTERN_SYNC_TYPES.unsynced,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst bindings = props.attributes.metadata?.bindings;\n\tconst hasPatternBindings =\n\t\t!! bindings &&\n\t\tObject.values( bindings ).some(\n\t\t\t( binding ) => binding.source === 'core/pattern-overrides'\n\t\t);\n\n\tconst shouldShowPatternOverridesControls =\n\t\tisEditingSyncedPattern && blockEditingMode === 'default';\n\tconst shouldShowResetOverridesControl =\n\t\t! isEditingSyncedPattern &&\n\t\t!! props.attributes.metadata?.name &&\n\t\tblockEditingMode !== 'disabled' &&\n\t\thasPatternBindings;\n\n\tif ( ! hasPatternOverridesSource ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ shouldShowPatternOverridesControls && (\n\t\t\t\t<PatternOverridesControls { ...props } />\n\t\t\t) }\n\t\t\t{ shouldShowResetOverridesControl && (\n\t\t\t\t<ResetOverridesControl { ...props } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/with-pattern-override-controls',\n\twithPatternOverrideControls\n);\n"], "mappings": ";;;AAGA,mBAA0B;AAC1B,sBAAmD;AACnD,qBAA2C;AAC3C,0BAGO;AACP,kBAA0B;AAC1B,oBAAuC;AAKvC,mBAAqC;AACrC,yBAAuB;AAiCpB;AA7BH,IAAM;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,QAAI,2BAAQ,gBAAAA,WAAoB;AAUhC,IAAM,kCAA8B;AAAA,EACnC,CAAE,cAAe,CAAE,UAAW;AAC7B,UAAM,uBAAmB;AAAA,MACxB,CAAE,WAAY;AACb,cAAM,EAAE,+CAA+C,IACtD,OAAQ,oBAAAC,KAAiB,EAAE,YAAY;AACxC,eAAO,CAAC,CAAE,iDACT,MAAM,IACP;AAAA,MACD;AAAA,MACA,CAAE,MAAM,IAAK;AAAA,IACd;AAEA,WACC,4EACC;AAAA,kDAAC,aAAuB,GAAG,SAAZ,MAAoB;AAAA,MACjC,MAAM,cAAc,oBACrB,4CAAC,iCAAgC,GAAG,OAAQ;AAAA,OAE9C;AAAA,EAEF;AAAA,EACA;AACD;AAIA,SAAS,8BAA+B,OAAQ;AAC/C,QAAM,uBAAmB,yCAAoB;AAC7C,QAAM,EAAE,2BAA2B,uBAAuB,QAAI;AAAA,IAC7D,CAAE,WAAY;AACb,YAAM,EAAE,oBAAoB,uBAAuB,IAClD,OAAQ,aAAAC,KAAY;AAErB,aAAO;AAAA;AAAA,QAEN,2BAA2B,CAAC,KAAE;AAAA,UAC7B;AAAA,QACD;AAAA,QACA,wBACC,mBAAmB,MAAM,cAAc,QACvC,uBAAwB,MAAO,GAAG,2BACjC,mBAAmB,YACpB,uBAAwB,wBAAyB,MAChD,mBAAmB;AAAA,MACtB;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,WAAW,UAAU;AAC5C,QAAM,qBACL,CAAC,CAAE,YACH,OAAO,OAAQ,QAAS,EAAE;AAAA,IACzB,CAAE,YAAa,QAAQ,WAAW;AAAA,EACnC;AAED,QAAM,qCACL,0BAA0B,qBAAqB;AAChD,QAAM,kCACL,CAAE,0BACF,CAAC,CAAE,MAAM,WAAW,UAAU,QAC9B,qBAAqB,cACrB;AAED,MAAK,CAAE,2BAA4B;AAClC,WAAO;AAAA,EACR;AAEA,SACC,4EACG;AAAA,0CACD,4CAAC,4BAA2B,GAAG,OAAQ;AAAA,IAEtC,mCACD,4CAAC,yBAAwB,GAAG,OAAQ;AAAA,KAEtC;AAEF;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;", "names": ["patternsPrivateApis", "blockEditorStore", "editorStore"] }