UNPKG

@wordpress/core-data

Version:
77 lines (76 loc) 2.1 kB
// packages/core-data/src/awareness/block-lookup.ts import { useSelect } from "@wordpress/data"; import { Y } from "@wordpress/sync"; import { store as blockEditorStore } from "@wordpress/block-editor"; import { unlock } from "../lock-unlock.mjs"; function getContainingBlockYMap(yType) { let current = yType; while (current) { const parent = current.parent; if (parent instanceof Y.Map && parent.parent instanceof Y.Array && parent.get("clientId") !== void 0 && parent.get("innerBlocks") instanceof Y.Array) { return parent; } current = parent instanceof Y.AbstractType ? parent : null; } return null; } function getBlockPathInYdoc(yType) { const path = []; let current = yType; while (current) { const parentArray = current.parent; if (!parentArray || !(parentArray instanceof Y.Array)) { return null; } let index = -1; for (let i = 0; i < parentArray.length; i++) { if (parentArray.get(i) === current) { index = i; break; } } if (index === -1) { return null; } path.unshift(index); const grandparent = parentArray.parent; if (grandparent instanceof Y.Map && grandparent.get("clientId") !== void 0) { current = grandparent; } else { break; } } return path; } function resolveBlockClientIdByPath(path, blocks) { if (path.length === 0) { return null; } for (let i = 0; i < path.length; i++) { const block = blocks[path[i]]; if (!block) { return null; } if (i === path.length - 1) { return block.clientId; } blocks = block.innerBlocks; } return null; } function usePostContentBlocks() { return useSelect((select) => { const { getBlocksByName, getClientIdsTree } = unlock( select(blockEditorStore) ); const [postContentClientId] = getBlocksByName("core/post-content"); return getClientIdsTree(postContentClientId ?? ""); }, []); } export { getBlockPathInYdoc, getContainingBlockYMap, resolveBlockClientIdByPath, usePostContentBlocks }; //# sourceMappingURL=block-lookup.mjs.map