@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 5.69 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/provider/disable-non-page-content-blocks.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect, useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport usePostContentBlockTypes from './use-post-content-block-types';\n\n/**\n * Component that when rendered, makes it so that the site editor allows only\n * page content to be edited.\n */\nexport default function DisableNonPageContentBlocks() {\n\tconst postContentBlockTypes = usePostContentBlockTypes();\n\tconst { contentOnlyIds, templateParts } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getPostBlocksByName } = unlock( select( editorStore ) );\n\t\t\tconst { getBlocksByName } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcontentOnlyIds: getPostBlocksByName( postContentBlockTypes ),\n\t\t\t\ttemplateParts: getBlocksByName( 'core/template-part' ),\n\t\t\t};\n\t\t},\n\t\t[ postContentBlockTypes ]\n\t);\n\t// This is a separate `useSelect` because `templatePartChildren` is\n\t// derived via flatMap, which always produces a new array. Combining it\n\t// with the above subscription causes an infinite render loop: the new\n\t// array fails useSelect's shallow equality check \u2192 re-render \u2192 effect\n\t// fires setBlockEditingMode \u2192 store changes \u2192 useSelect re-runs \u2192 \u2026\n\tconst templatePartChildren = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockOrder } = select( blockEditorStore );\n\t\t\treturn templateParts.flatMap( ( clientId ) =>\n\t\t\t\tgetBlockOrder( clientId )\n\t\t\t);\n\t\t},\n\t\t[ templateParts ]\n\t);\n\n\tconst registry = useRegistry();\n\n\t// The effects below are split so that changes to one group of blocks\n\t// don't cause unnecessary set/unset cycles for the others. For example,\n\t// the root block ('') editing mode only needs to be set once.\n\t// Child blocks of templates and templateParts are also loaded separately,\n\t// so these are kept in separate effects.\n\tuseEffect( () => {\n\t\tconst { setBlockEditingMode, unsetBlockEditingMode } =\n\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\tsetBlockEditingMode( '', 'disabled' );\n\n\t\treturn () => {\n\t\t\tunsetBlockEditingMode( '' );\n\t\t};\n\t}, [ registry ] );\n\n\tuseEffect( () => {\n\t\tconst { setBlockEditingMode, unsetBlockEditingMode } =\n\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\tregistry.batch( () => {\n\t\t\tfor ( const clientId of templateParts ) {\n\t\t\t\tsetBlockEditingMode( clientId, 'contentOnly' );\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tregistry.batch( () => {\n\t\t\t\tfor ( const clientId of templateParts ) {\n\t\t\t\t\tunsetBlockEditingMode( clientId );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t}, [ templateParts, registry ] );\n\n\tuseEffect( () => {\n\t\tconst { setBlockEditingMode, unsetBlockEditingMode } =\n\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\tconst contentOnlySet = new Set( contentOnlyIds );\n\n\t\tregistry.batch( () => {\n\t\t\tfor ( const clientId of contentOnlyIds ) {\n\t\t\t\tsetBlockEditingMode( clientId, 'contentOnly' );\n\t\t\t}\n\t\t\tfor ( const clientId of templatePartChildren ) {\n\t\t\t\tif ( ! contentOnlySet.has( clientId ) ) {\n\t\t\t\t\tsetBlockEditingMode( clientId, 'disabled' );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tregistry.batch( () => {\n\t\t\t\tfor ( const clientId of contentOnlyIds ) {\n\t\t\t\t\tunsetBlockEditingMode( clientId );\n\t\t\t\t}\n\t\t\t\tfor ( const clientId of templatePartChildren ) {\n\t\t\t\t\tif ( ! contentOnlySet.has( clientId ) ) {\n\t\t\t\t\t\tunsetBlockEditingMode( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t}, [ contentOnlyIds, templatePartChildren, registry ] );\n\n\treturn null;\n}\n"],
"mappings": ";AAGA,SAAS,WAAW,mBAAmB;AACvC,SAAS,SAAS,wBAAwB;AAC1C,SAAS,iBAAiB;AAK1B,SAAS,SAAS,mBAAmB;AACrC,SAAS,cAAc;AACvB,OAAO,8BAA8B;AAMtB,SAAR,8BAA+C;AACrD,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,EAAE,gBAAgB,cAAc,IAAI;AAAA,IACzC,CAAE,WAAY;AACb,YAAM,EAAE,oBAAoB,IAAI,OAAQ,OAAQ,WAAY,CAAE;AAC9D,YAAM,EAAE,gBAAgB,IAAI,OAAQ,gBAAiB;AACrD,aAAO;AAAA,QACN,gBAAgB,oBAAqB,qBAAsB;AAAA,QAC3D,eAAe,gBAAiB,oBAAqB;AAAA,MACtD;AAAA,IACD;AAAA,IACA,CAAE,qBAAsB;AAAA,EACzB;AAMA,QAAM,uBAAuB;AAAA,IAC5B,CAAE,WAAY;AACb,YAAM,EAAE,cAAc,IAAI,OAAQ,gBAAiB;AACnD,aAAO,cAAc;AAAA,QAAS,CAAE,aAC/B,cAAe,QAAS;AAAA,MACzB;AAAA,IACD;AAAA,IACA,CAAE,aAAc;AAAA,EACjB;AAEA,QAAM,WAAW,YAAY;AAO7B,YAAW,MAAM;AAChB,UAAM,EAAE,qBAAqB,sBAAsB,IAClD,SAAS,SAAU,gBAAiB;AAErC,wBAAqB,IAAI,UAAW;AAEpC,WAAO,MAAM;AACZ,4BAAuB,EAAG;AAAA,IAC3B;AAAA,EACD,GAAG,CAAE,QAAS,CAAE;AAEhB,YAAW,MAAM;AAChB,UAAM,EAAE,qBAAqB,sBAAsB,IAClD,SAAS,SAAU,gBAAiB;AAErC,aAAS,MAAO,MAAM;AACrB,iBAAY,YAAY,eAAgB;AACvC,4BAAqB,UAAU,aAAc;AAAA,MAC9C;AAAA,IACD,CAAE;AAEF,WAAO,MAAM;AACZ,eAAS,MAAO,MAAM;AACrB,mBAAY,YAAY,eAAgB;AACvC,gCAAuB,QAAS;AAAA,QACjC;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD,GAAG,CAAE,eAAe,QAAS,CAAE;AAE/B,YAAW,MAAM;AAChB,UAAM,EAAE,qBAAqB,sBAAsB,IAClD,SAAS,SAAU,gBAAiB;AAErC,UAAM,iBAAiB,IAAI,IAAK,cAAe;AAE/C,aAAS,MAAO,MAAM;AACrB,iBAAY,YAAY,gBAAiB;AACxC,4BAAqB,UAAU,aAAc;AAAA,MAC9C;AACA,iBAAY,YAAY,sBAAuB;AAC9C,YAAK,CAAE,eAAe,IAAK,QAAS,GAAI;AACvC,8BAAqB,UAAU,UAAW;AAAA,QAC3C;AAAA,MACD;AAAA,IACD,CAAE;AAEF,WAAO,MAAM;AACZ,eAAS,MAAO,MAAM;AACrB,mBAAY,YAAY,gBAAiB;AACxC,gCAAuB,QAAS;AAAA,QACjC;AACA,mBAAY,YAAY,sBAAuB;AAC9C,cAAK,CAAE,eAAe,IAAK,QAAS,GAAI;AACvC,kCAAuB,QAAS;AAAA,UACjC;AAAA,QACD;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD,GAAG,CAAE,gBAAgB,sBAAsB,QAAS,CAAE;AAEtD,SAAO;AACR;",
"names": []
}