{
  "version": 3,
  "sources": ["../../../src/components/autosave-monitor/index.js"],
  "sourcesContent": ["import { useEffect, useRef } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as editorStore } from '../../store';\n\n/**\n * Calls `callback` every `intervalInSeconds`. The latest `callback` is always\n * invoked without resetting the timer.\n *\n * @param {Function} callback          Function to call on each tick.\n * @param {number}   intervalInSeconds Seconds between ticks.\n */\nfunction useInterval( callback, intervalInSeconds ) {\n\tconst callbackRef = useRef( callback );\n\n\tuseEffect( () => {\n\t\tcallbackRef.current = callback;\n\t}, [ callback ] );\n\n\tuseEffect( () => {\n\t\t// Interval can be undefined before editor settings are populated.\n\t\tif ( ! intervalInSeconds ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = setInterval(\n\t\t\t() => callbackRef.current(),\n\t\t\tintervalInSeconds * 1000\n\t\t);\n\t\treturn () => clearInterval( id );\n\t}, [ intervalInSeconds ] );\n}\n\n/**\n * Monitors the changes made to the edited post and triggers autosave if necessary.\n *\n * The post is checked every `interval` seconds and autosaved when there is something new to save.\n *\n * @param {Object}   props            The component props.\n * @param {number}   [props.interval] Time in seconds between checks. Defaults to the editor's\n *                                    `autosaveInterval` setting.\n * @param {Function} [props.autosave] Function to call when changes need to be saved. Defaults to the\n *                                    editor store's `autosave` action.\n *\n * @example\n * ```jsx\n * <AutosaveMonitor interval={ 30 } />\n * ```\n */\nexport default function AutosaveMonitor( { interval, autosave } ) {\n\tconst { autosave: autosaveAction } = useDispatch( editorStore );\n\tconst triggerAutosave = autosave ?? autosaveAction;\n\n\tconst { getReferenceByDistinctEdits } = useSelect( coreStore );\n\tconst { isEditedPostDirty, isEditedPostAutosaveable, isAutosavingPost } =\n\t\tuseSelect( editorStore );\n\n\tconst autosaveInterval = useSelect(\n\t\t( select ) => {\n\t\t\tif ( interval !== undefined ) {\n\t\t\t\treturn interval;\n\t\t\t}\n\n\t\t\treturn select( editorStore ).getEditorSettings().autosaveInterval;\n\t\t},\n\t\t[ interval ]\n\t);\n\n\t// Reference of the edits last considered for autosaving. Mutable state that\n\t// must not trigger a re-render, hence a ref.\n\tconst lastEditsReferenceRef = useRef();\n\n\tuseInterval( () => {\n\t\t// The post can't be autosaved yet (e.g. its existing autosave is still\n\t\t// loading). Keep any pending edits and try again on the next tick.\n\t\tif ( ! isEditedPostAutosaveable() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst editsReference = getReferenceByDistinctEdits();\n\t\tconst hasNewEdits = editsReference !== lastEditsReferenceRef.current;\n\t\tif ( hasNewEdits && isEditedPostDirty() && ! isAutosavingPost() ) {\n\t\t\t// Only consume the edits reference when we autosave,\n\t\t\t// so edits made during an in-flight autosave aren't skipped.\n\t\t\tlastEditsReferenceRef.current = editsReference;\n\t\t\ttriggerAutosave();\n\t\t}\n\t}, autosaveInterval );\n\n\treturn null;\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAkC;AAClC,kBAAuC;AACvC,uBAAmC;AACnC,mBAAqC;AASrC,SAAS,YAAa,UAAU,mBAAoB;AACnD,QAAM,kBAAc,uBAAQ,QAAS;AAErC,gCAAW,MAAM;AAChB,gBAAY,UAAU;AAAA,EACvB,GAAG,CAAE,QAAS,CAAE;AAEhB,gCAAW,MAAM;AAEhB,QAAK,CAAE,mBAAoB;AAC1B;AAAA,IACD;AAEA,UAAM,KAAK;AAAA,MACV,MAAM,YAAY,QAAQ;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AACA,WAAO,MAAM,cAAe,EAAG;AAAA,EAChC,GAAG,CAAE,iBAAkB,CAAE;AAC1B;AAkBe,SAAR,gBAAkC,EAAE,UAAU,SAAS,GAAI;AACjE,QAAM,EAAE,UAAU,eAAe,QAAI,yBAAa,aAAAA,KAAY;AAC9D,QAAM,kBAAkB,YAAY;AAEpC,QAAM,EAAE,4BAA4B,QAAI,uBAAW,iBAAAC,KAAU;AAC7D,QAAM,EAAE,mBAAmB,0BAA0B,iBAAiB,QACrE,uBAAW,aAAAD,KAAY;AAExB,QAAM,uBAAmB;AAAA,IACxB,CAAE,WAAY;AACb,UAAK,aAAa,QAAY;AAC7B,eAAO;AAAA,MACR;AAEA,aAAO,OAAQ,aAAAA,KAAY,EAAE,kBAAkB,EAAE;AAAA,IAClD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAIA,QAAM,4BAAwB,uBAAO;AAErC,cAAa,MAAM;AAGlB,QAAK,CAAE,yBAAyB,GAAI;AACnC;AAAA,IACD;AAEA,UAAM,iBAAiB,4BAA4B;AACnD,UAAM,cAAc,mBAAmB,sBAAsB;AAC7D,QAAK,eAAe,kBAAkB,KAAK,CAAE,iBAAiB,GAAI;AAGjE,4BAAsB,UAAU;AAChC,sBAAgB;AAAA,IACjB;AAAA,EACD,GAAG,gBAAiB;AAEpB,SAAO;AACR;",
  "names": ["editorStore", "coreStore"]
}
