@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
85 lines (84 loc) • 2.9 kB
JavaScript
// 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