next/lib/client/utils.ts

46 lines
1.3 KiB
TypeScript

import { debounce } from "lodash-es";
import { message } from "ant-design-vue";
import { IStory } from "@models/stories";
import { useAutoSaveStore } from "~/stores/autosaveStore";
export const autoSave = debounce(async (values: any) => {
const store = useAutoSaveStore();
const fid = store.$state.fetchId;
if (store.$state.fetchId !== fid) return;
store.$patch({ fetchId: store.$state.fetchId + 1 });
if (store.$state.draftId == undefined) {
let b = useApiFetch<{ draftId: number; success: boolean }>("/drafts/new", {
method: "post",
body: values,
}).then(({ data, error }) => {
console.log("fibberty", data, error);
if (data.value) {
store.$patch({ draftId: data.value.draftId });
}
});
console.log("B", b);
} else {
useApiFetch<any>(`/drafts/${store.$state.draftId}`, {
method: "put",
body: values,
});
}
}, 20000);
export const autoEdit = debounce(
(values: any, endpoint: string, method: "put" | "post") => {
const [messageApi, contextHolder] = message.useMessage();
useApiFetch<{ success: boolean; data: IStory }>(endpoint, {
method,
body: values,
}).then(({ data, error }) => {
if (data.value?.success) {
messageApi.success("Your work has been saved successfully.");
} else if (error) {
messageApi.error("Error saving data.");
}
});
},
10000,
);