UNPKG

@wordpress/editor

Version:
82 lines (81 loc) 2.35 kB
// packages/editor/src/components/provider/use-revision-blocks.js import { useSelect } from "@wordpress/data"; import { useMemo, useRef } from "@wordpress/element"; import { createBlock, parse } from "@wordpress/blocks"; import { store as editorStore } from "../../store/index.mjs"; import { unlock } from "../../lock-unlock.mjs"; import { diffRevisionContent } from "../post-revisions-preview/block-diff.mjs"; import { preserveClientIds } from "../post-revisions-preview/preserve-client-ids.mjs"; function useRevisionBlocks() { const { isInRevisionsMode, showDiff, revision, previousRevision, postType } = useSelect((select) => { const { isRevisionsMode, isShowingRevisionDiff, getCurrentRevision, getPreviousRevision } = unlock(select(editorStore)); const { getCurrentPostType } = select(editorStore); const inRevisions = isRevisionsMode(); return { isInRevisionsMode: inRevisions, showDiff: isShowingRevisionDiff(), revision: inRevisions ? getCurrentRevision() : void 0, previousRevision: inRevisions ? getPreviousRevision() : void 0, postType: getCurrentPostType() }; }, []); const previousBlocksRef = useRef([]); const blocks = useMemo(() => { if (!isInRevisionsMode) { previousBlocksRef.current = []; return null; } if (!revision) { return []; } const currentContent = revision?.content?.raw ?? ""; let parsedBlocks; if (showDiff) { const previousContent = previousRevision?.content?.raw || ""; parsedBlocks = diffRevisionContent( currentContent, previousContent ); } else { parsedBlocks = parse(currentContent); } if (postType === "wp_navigation") { parsedBlocks = [ createBlock( "core/navigation", { templateLock: false }, parsedBlocks ) ]; } const blocksWithStableIds = preserveClientIds( parsedBlocks, previousBlocksRef.current ); previousBlocksRef.current = blocksWithStableIds; return blocksWithStableIds; }, [ isInRevisionsMode, revision, revision?.content?.raw, previousRevision?.content?.raw, postType, showDiff ]); return blocks; } export { useRevisionBlocks }; //# sourceMappingURL=use-revision-blocks.mjs.map