115 lines
3.2 KiB
JavaScript
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
|