UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 4.28 kB
{ "version": 3, "sources": ["../../../src/components/provider/use-revision-blocks.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo, useRef } from '@wordpress/element';\nimport { createBlock, parse } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { diffRevisionContent } from '../post-revisions-preview/block-diff';\nimport { preserveClientIds } from '../post-revisions-preview/preserve-client-ids';\n\n/**\n * Hook that computes revision blocks when in revisions mode.\n *\n * Returns `null` when not in revisions mode, `[]` when loading,\n * or the computed blocks array when ready.\n *\n * @return {Array|null} The revision blocks, or null if not in revisions mode.\n */\nexport function useRevisionBlocks() {\n\tconst {\n\t\tisInRevisionsMode,\n\t\tshowDiff,\n\t\trevision,\n\t\tpreviousRevision,\n\t\tpostType,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tisRevisionsMode,\n\t\t\tisShowingRevisionDiff,\n\t\t\tgetCurrentRevision,\n\t\t\tgetPreviousRevision,\n\t\t} = unlock( select( editorStore ) );\n\t\tconst { getCurrentPostType } = select( editorStore );\n\n\t\tconst inRevisions = isRevisionsMode();\n\t\treturn {\n\t\t\tisInRevisionsMode: inRevisions,\n\t\t\tshowDiff: isShowingRevisionDiff(),\n\t\t\trevision: inRevisions ? getCurrentRevision() : undefined,\n\t\t\tpreviousRevision: inRevisions ? getPreviousRevision() : undefined,\n\t\t\tpostType: getCurrentPostType(),\n\t\t};\n\t}, [] );\n\n\t// Track previously rendered blocks to preserve clientIds between renders.\n\tconst previousBlocksRef = useRef( [] );\n\n\tconst blocks = useMemo( () => {\n\t\tif ( ! isInRevisionsMode ) {\n\t\t\t// Clear the ref when exiting revisions mode.\n\t\t\tpreviousBlocksRef.current = [];\n\t\t\treturn null;\n\t\t}\n\n\t\t// Revision not loaded yet.\n\t\tif ( ! revision ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst currentContent = revision?.content?.raw ?? '';\n\n\t\tlet parsedBlocks;\n\t\tif ( showDiff ) {\n\t\t\tconst previousContent = previousRevision?.content?.raw || '';\n\t\t\tparsedBlocks = diffRevisionContent(\n\t\t\t\tcurrentContent,\n\t\t\t\tpreviousContent\n\t\t\t);\n\t\t} else {\n\t\t\tparsedBlocks = parse( currentContent );\n\t\t}\n\n\t\tif ( postType === 'wp_navigation' ) {\n\t\t\tparsedBlocks = [\n\t\t\t\tcreateBlock(\n\t\t\t\t\t'core/navigation',\n\t\t\t\t\t{ templateLock: false },\n\t\t\t\t\tparsedBlocks\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\n\t\tconst blocksWithStableIds = preserveClientIds(\n\t\t\tparsedBlocks,\n\t\t\tpreviousBlocksRef.current\n\t\t);\n\t\tpreviousBlocksRef.current = blocksWithStableIds;\n\n\t\treturn blocksWithStableIds;\n\t}, [\n\t\tisInRevisionsMode,\n\t\trevision,\n\t\trevision?.content?.raw,\n\t\tpreviousRevision?.content?.raw,\n\t\tpostType,\n\t\tshowDiff,\n\t] );\n\n\treturn blocks;\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA0B;AAC1B,qBAAgC;AAChC,oBAAmC;AAKnC,mBAAqC;AACrC,yBAAuB;AACvB,wBAAoC;AACpC,iCAAkC;AAU3B,SAAS,oBAAoB;AACnC,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,uBAAW,CAAE,WAAY;AAC5B,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,QAAI,2BAAQ,OAAQ,aAAAA,KAAY,CAAE;AAClC,UAAM,EAAE,mBAAmB,IAAI,OAAQ,aAAAA,KAAY;AAEnD,UAAM,cAAc,gBAAgB;AACpC,WAAO;AAAA,MACN,mBAAmB;AAAA,MACnB,UAAU,sBAAsB;AAAA,MAChC,UAAU,cAAc,mBAAmB,IAAI;AAAA,MAC/C,kBAAkB,cAAc,oBAAoB,IAAI;AAAA,MACxD,UAAU,mBAAmB;AAAA,IAC9B;AAAA,EACD,GAAG,CAAC,CAAE;AAGN,QAAM,wBAAoB,uBAAQ,CAAC,CAAE;AAErC,QAAM,aAAS,wBAAS,MAAM;AAC7B,QAAK,CAAE,mBAAoB;AAE1B,wBAAkB,UAAU,CAAC;AAC7B,aAAO;AAAA,IACR;AAGA,QAAK,CAAE,UAAW;AACjB,aAAO,CAAC;AAAA,IACT;AAEA,UAAM,iBAAiB,UAAU,SAAS,OAAO;AAEjD,QAAI;AACJ,QAAK,UAAW;AACf,YAAM,kBAAkB,kBAAkB,SAAS,OAAO;AAC1D,yBAAe;AAAA,QACd;AAAA,QACA;AAAA,MACD;AAAA,IACD,OAAO;AACN,yBAAe,qBAAO,cAAe;AAAA,IACtC;AAEA,QAAK,aAAa,iBAAkB;AACnC,qBAAe;AAAA,YACd;AAAA,UACC;AAAA,UACA,EAAE,cAAc,MAAM;AAAA,UACtB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,0BAAsB;AAAA,MAC3B;AAAA,MACA,kBAAkB;AAAA,IACnB;AACA,sBAAkB,UAAU;AAE5B,WAAO;AAAA,EACR,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA,UAAU,SAAS;AAAA,IACnB,kBAAkB,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,EACD,CAAE;AAEF,SAAO;AACR;", "names": ["editorStore"] }