Files
threeonecheck_web/unpackage/dist/dev/mp-weixin/utils/useDraftCache.js

115 lines
3.2 KiB
JavaScript

"use strict";
const common_vendor = require("../common/vendor.js");
const utils_draftCache = require("./draftCache.js");
function useDraftCache(options) {
const {
getKey,
getPayload,
hasContent = utils_draftCache.defaultHasContent,
applyPayload,
clearForm,
canSave = () => true,
requireInitialized = false,
restoreToast = "已自动恢复您上次未提交的内容",
clearToast = "草稿已清空",
showRestoreToast = true,
onAfterRestore,
getFallbackKeys
} = options;
const hasDraft = common_vendor.ref(false);
const showRestoreBanner = common_vendor.ref(false);
const isRestoring = common_vendor.ref(false);
const isInitialized = common_vendor.ref(false);
const finishRestoreState = (callback) => {
common_vendor.nextTick$1(() => {
isRestoring.value = false;
isInitialized.value = true;
callback == null ? void 0 : callback();
});
};
const save = () => {
if (isRestoring.value)
return;
if (requireInitialized && !isInitialized.value)
return;
if (!canSave())
return;
const key = getKey();
const payload = getPayload();
if (!hasContent(payload)) {
utils_draftCache.removeDraft(key);
hasDraft.value = false;
return;
}
utils_draftCache.saveDraftToStorage(key, payload);
hasDraft.value = true;
};
const clear = (showToast = true) => {
utils_draftCache.removeDraft(getKey());
hasDraft.value = false;
showRestoreBanner.value = false;
isRestoring.value = true;
clearForm();
finishRestoreState();
if (showToast) {
common_vendor.index.showToast({ title: clearToast, icon: "none" });
}
};
const restore = () => {
const key = getKey();
const { data, fromFallback, fallbackKey } = utils_draftCache.loadDraftWithFallback(
key,
(getFallbackKeys == null ? void 0 : getFallbackKeys()) || []
);
if (!data || !hasContent(data)) {
isInitialized.value = true;
return false;
}
isRestoring.value = true;
try {
applyPayload(data);
hasDraft.value = true;
showRestoreBanner.value = true;
onAfterRestore == null ? void 0 : onAfterRestore(data);
if (fromFallback && fallbackKey) {
utils_draftCache.saveDraftToStorage(key, data);
utils_draftCache.removeDraft(fallbackKey);
}
finishRestoreState(() => {
if (showRestoreToast) {
common_vendor.index.showToast({
title: restoreToast,
icon: "none",
duration: 2500
});
}
});
return true;
} catch (error) {
common_vendor.index.__f__("error", "at utils/useDraftCache.js:128", "[useDraftCache] 恢复草稿失败:", error);
isRestoring.value = false;
isInitialized.value = true;
return false;
}
};
const bindAutoSave = (source, watchOptions = {}) => {
common_vendor.watch(
source,
() => save(),
{ deep: true, ...watchOptions }
);
};
return {
hasDraft,
showRestoreBanner,
isRestoring,
isInitialized,
save,
clear,
restore,
bindAutoSave
};
}
exports.useDraftCache = useDraftCache;
//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/useDraftCache.js.map