UNPKG

@wordpress/editor

Version:
85 lines (84 loc) 2.9 kB
// packages/editor/src/components/provider/disable-non-page-content-blocks.js import { useSelect, useRegistry } from "@wordpress/data"; import { store as blockEditorStore } from "@wordpress/block-editor"; import { useEffect } from "@wordpress/element"; import { store as editorStore } from "../../store/index.mjs"; import { unlock } from "../../lock-unlock.mjs"; import usePostContentBlockTypes from "./use-post-content-block-types.mjs"; function DisableNonPageContentBlocks() { const postContentBlockTypes = usePostContentBlockTypes(); const { contentOnlyIds, templateParts } = useSelect( (select) => { const { getPostBlocksByName } = unlock(select(editorStore)); const { getBlocksByName } = select(blockEditorStore); return { contentOnlyIds: getPostBlocksByName(postContentBlockTypes), templateParts: getBlocksByName("core/template-part") }; }, [postContentBlockTypes] ); const templatePartChildren = useSelect( (select) => { const { getBlockOrder } = select(blockEditorStore); return templateParts.flatMap( (clientId) => getBlockOrder(clientId) ); }, [templateParts] ); const registry = useRegistry(); useEffect(() => { const { setBlockEditingMode, unsetBlockEditingMode } = registry.dispatch(blockEditorStore); setBlockEditingMode("", "disabled"); return () => { unsetBlockEditingMode(""); }; }, [registry]); useEffect(() => { const { setBlockEditingMode, unsetBlockEditingMode } = registry.dispatch(blockEditorStore); registry.batch(() => { for (const clientId of templateParts) { setBlockEditingMode(clientId, "contentOnly"); } }); return () => { registry.batch(() => { for (const clientId of templateParts) { unsetBlockEditingMode(clientId); } }); }; }, [templateParts, registry]); useEffect(() => { const { setBlockEditingMode, unsetBlockEditingMode } = registry.dispatch(blockEditorStore); const contentOnlySet = new Set(contentOnlyIds); registry.batch(() => { for (const clientId of contentOnlyIds) { setBlockEditingMode(clientId, "contentOnly"); } for (const clientId of templatePartChildren) { if (!contentOnlySet.has(clientId)) { setBlockEditingMode(clientId, "disabled"); } } }); return () => { registry.batch(() => { for (const clientId of contentOnlyIds) { unsetBlockEditingMode(clientId); } for (const clientId of templatePartChildren) { if (!contentOnlySet.has(clientId)) { unsetBlockEditingMode(clientId); } } }); }; }, [contentOnlyIds, templatePartChildren, registry]); return null; } export { DisableNonPageContentBlocks as default }; //# sourceMappingURL=disable-non-page-content-blocks.mjs.map