UNPKG

@wordpress/edit-post

Version:
8 lines (7 loc) 5.55 kB
{ "version": 3, "sources": ["../../../src/components/browser-url/index.js"], "sourcesContent": ["import { useEffect, useRef, useState } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { addQueryArgs, getQueryArg } from '@wordpress/url';\nimport { store as editorStore } from '@wordpress/editor';\nimport { unlock } from '../../lock-unlock';\nimport useClassicRevisionRedirect from './use-classic-revision-redirect';\n\n/**\n * Safari throws when rapid revision changes trigger more than 100 History API\n * calls in 30 seconds.\n */\nconst URL_WRITE_DEBOUNCE_MS = 300;\n\n/**\n * Returns the Post's Edit URL.\n *\n * @param {number} postId Post ID.\n * @param {?number} revisionId Revision being previewed, if any.\n *\n * @return {string} Post edit URL.\n */\nexport function getPostEditURL( postId, revisionId ) {\n\tconst args = { post: postId, action: 'edit' };\n\tif ( revisionId ) {\n\t\targs.revision = revisionId;\n\t}\n\treturn addQueryArgs( 'post.php', args );\n}\n\nexport default function BrowserURL() {\n\tuseClassicRevisionRedirect();\n\n\t// Read the initial revision once, before URL sync can overwrite it.\n\tconst [ initialRevisionId ] = useState( () => {\n\t\tconst revision = Number(\n\t\t\tgetQueryArg( window.location.href, 'revision' )\n\t\t);\n\t\treturn Number.isInteger( revision ) && revision > 0 ? revision : null;\n\t} );\n\tconst hasHandledInitialRevisionRef = useRef( false );\n\n\tconst { postId, postStatus, currentRevisionId } = useSelect( ( select ) => {\n\t\tconst { getCurrentPost } = select( editorStore );\n\t\tconst { getCurrentRevisionId } = unlock( select( editorStore ) );\n\t\tconst post = getCurrentPost();\n\t\tlet { id, status, type } = post;\n\t\tconst isTemplate = [ 'wp_template', 'wp_template_part' ].includes(\n\t\t\ttype\n\t\t);\n\t\tif ( isTemplate ) {\n\t\t\tid = post.wp_id;\n\t\t}\n\n\t\treturn {\n\t\t\tpostId: id,\n\t\t\tpostStatus: status,\n\t\t\t// `post.php` rejects templates because `show_ui` is false. Adding\n\t\t\t// their revision ID to this URL would create a dead link.\n\t\t\tcurrentRevisionId: isTemplate ? null : getCurrentRevisionId(),\n\t\t};\n\t}, [] );\n\tconst { openRevision } = unlock( useDispatch( editorStore ) );\n\n\tconst lastURLWriteTimeRef = useRef( null );\n\tconst lastPostIdRef = useRef( null );\n\n\tuseEffect( () => {\n\t\tif ( ! postId ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( initialRevisionId && ! hasHandledInitialRevisionRef.current ) {\n\t\t\thasHandledInitialRevisionRef.current = true;\n\t\t\topenRevision( initialRevisionId );\n\t\t\treturn;\n\t\t}\n\t\tif ( postStatus === 'auto-draft' ) {\n\t\t\treturn;\n\t\t}\n\t\tconst previousPostId = lastPostIdRef.current;\n\t\tlastPostIdRef.current = postId;\n\t\tconst url = getPostEditURL( postId, currentRevisionId );\n\t\tconst write = () => {\n\t\t\tlastURLWriteTimeRef.current = Date.now();\n\t\t\ttry {\n\t\t\t\twindow.history.replaceState(\n\t\t\t\t\t{ id: postId },\n\t\t\t\t\t'Post ' + postId,\n\t\t\t\t\turl\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Leave the URL unchanged. The effect can try again on the next\n\t\t\t\t// state change.\n\t\t\t}\n\t\t};\n\t\tif ( previousPostId !== null && previousPostId !== postId ) {\n\t\t\twrite();\n\t\t\treturn;\n\t\t}\n\t\tif ( lastURLWriteTimeRef.current === null ) {\n\t\t\twrite();\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tDate.now() - lastURLWriteTimeRef.current >=\n\t\t\tURL_WRITE_DEBOUNCE_MS\n\t\t) {\n\t\t\twrite();\n\t\t\treturn;\n\t\t}\n\t\tconst timeoutId = setTimeout( write, URL_WRITE_DEBOUNCE_MS );\n\t\treturn () => clearTimeout( timeoutId );\n\t}, [\n\t\tpostId,\n\t\tpostStatus,\n\t\tcurrentRevisionId,\n\t\tinitialRevisionId,\n\t\topenRevision,\n\t] );\n\n\treturn null;\n}\n"], "mappings": ";AAAA,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,WAAW,mBAAmB;AACvC,SAAS,cAAc,mBAAmB;AAC1C,SAAS,SAAS,mBAAmB;AACrC,SAAS,cAAc;AACvB,OAAO,gCAAgC;AAMvC,IAAM,wBAAwB;AAUvB,SAAS,eAAgB,QAAQ,YAAa;AACpD,QAAM,OAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO;AAC5C,MAAK,YAAa;AACjB,SAAK,WAAW;AAAA,EACjB;AACA,SAAO,aAAc,YAAY,IAAK;AACvC;AAEe,SAAR,aAA8B;AACpC,6BAA2B;AAG3B,QAAM,CAAE,iBAAkB,IAAI,SAAU,MAAM;AAC7C,UAAM,WAAW;AAAA,MAChB,YAAa,OAAO,SAAS,MAAM,UAAW;AAAA,IAC/C;AACA,WAAO,OAAO,UAAW,QAAS,KAAK,WAAW,IAAI,WAAW;AAAA,EAClE,CAAE;AACF,QAAM,+BAA+B,OAAQ,KAAM;AAEnD,QAAM,EAAE,QAAQ,YAAY,kBAAkB,IAAI,UAAW,CAAE,WAAY;AAC1E,UAAM,EAAE,eAAe,IAAI,OAAQ,WAAY;AAC/C,UAAM,EAAE,qBAAqB,IAAI,OAAQ,OAAQ,WAAY,CAAE;AAC/D,UAAM,OAAO,eAAe;AAC5B,QAAI,EAAE,IAAI,QAAQ,KAAK,IAAI;AAC3B,UAAM,aAAa,CAAE,eAAe,kBAAmB,EAAE;AAAA,MACxD;AAAA,IACD;AACA,QAAK,YAAa;AACjB,WAAK,KAAK;AAAA,IACX;AAEA,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA;AAAA;AAAA,MAGZ,mBAAmB,aAAa,OAAO,qBAAqB;AAAA,IAC7D;AAAA,EACD,GAAG,CAAC,CAAE;AACN,QAAM,EAAE,aAAa,IAAI,OAAQ,YAAa,WAAY,CAAE;AAE5D,QAAM,sBAAsB,OAAQ,IAAK;AACzC,QAAM,gBAAgB,OAAQ,IAAK;AAEnC,YAAW,MAAM;AAChB,QAAK,CAAE,QAAS;AACf;AAAA,IACD;AACA,QAAK,qBAAqB,CAAE,6BAA6B,SAAU;AAClE,mCAA6B,UAAU;AACvC,mBAAc,iBAAkB;AAChC;AAAA,IACD;AACA,QAAK,eAAe,cAAe;AAClC;AAAA,IACD;AACA,UAAM,iBAAiB,cAAc;AACrC,kBAAc,UAAU;AACxB,UAAM,MAAM,eAAgB,QAAQ,iBAAkB;AACtD,UAAM,QAAQ,MAAM;AACnB,0BAAoB,UAAU,KAAK,IAAI;AACvC,UAAI;AACH,eAAO,QAAQ;AAAA,UACd,EAAE,IAAI,OAAO;AAAA,UACb,UAAU;AAAA,UACV;AAAA,QACD;AAAA,MACD,QAAQ;AAAA,MAGR;AAAA,IACD;AACA,QAAK,mBAAmB,QAAQ,mBAAmB,QAAS;AAC3D,YAAM;AACN;AAAA,IACD;AACA,QAAK,oBAAoB,YAAY,MAAO;AAC3C,YAAM;AACN;AAAA,IACD;AACA,QACC,KAAK,IAAI,IAAI,oBAAoB,WACjC,uBACC;AACD,YAAM;AACN;AAAA,IACD;AACA,UAAM,YAAY,WAAY,OAAO,qBAAsB;AAC3D,WAAO,MAAM,aAAc,SAAU;AAAA,EACtC,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAEF,SAAO;AACR;", "names": [] }