@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
75 lines (73 loc) • 2.85 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/editor/src/components/autosave-monitor/index.js
var autosave_monitor_exports = {};
__export(autosave_monitor_exports, {
default: () => AutosaveMonitor
});
module.exports = __toCommonJS(autosave_monitor_exports);
var import_element = require("@wordpress/element");
var import_data = require("@wordpress/data");
var import_core_data = require("@wordpress/core-data");
var import_store = require("../../store/index.cjs");
function useInterval(callback, intervalInSeconds) {
const callbackRef = (0, import_element.useRef)(callback);
(0, import_element.useEffect)(() => {
callbackRef.current = callback;
}, [callback]);
(0, import_element.useEffect)(() => {
if (!intervalInSeconds) {
return;
}
const id = setInterval(
() => callbackRef.current(),
intervalInSeconds * 1e3
);
return () => clearInterval(id);
}, [intervalInSeconds]);
}
function AutosaveMonitor({ interval, autosave }) {
const { autosave: autosaveAction } = (0, import_data.useDispatch)(import_store.store);
const triggerAutosave = autosave ?? autosaveAction;
const { getReferenceByDistinctEdits } = (0, import_data.useSelect)(import_core_data.store);
const { isEditedPostDirty, isEditedPostAutosaveable, isAutosavingPost } = (0, import_data.useSelect)(import_store.store);
const autosaveInterval = (0, import_data.useSelect)(
(select) => {
if (interval !== void 0) {
return interval;
}
return select(import_store.store).getEditorSettings().autosaveInterval;
},
[interval]
);
const lastEditsReferenceRef = (0, import_element.useRef)();
useInterval(() => {
if (!isEditedPostAutosaveable()) {
return;
}
const editsReference = getReferenceByDistinctEdits();
const hasNewEdits = editsReference !== lastEditsReferenceRef.current;
if (hasNewEdits && isEditedPostDirty() && !isAutosavingPost()) {
lastEditsReferenceRef.current = editsReference;
triggerAutosave();
}
}, autosaveInterval);
return null;
}
//# sourceMappingURL=index.cjs.map