fix(data): 增加全局保存失败保护
This commit is contained in:
@@ -1,12 +1,9 @@
|
||||
'use client';
|
||||
import { create } from 'zustand';
|
||||
import type { TaskWorklog } from '@/lib/task-worklog';
|
||||
import { scheduleSaveWithOptimisticRollback } from '@/lib/optimistic-persistence';
|
||||
import { loadServerData, saveServerData, SERVER_DATA_CACHE_MS } from '@/lib/server-data';
|
||||
|
||||
function saveStored(items: TaskWorklog[]) {
|
||||
saveServerData('task-worklogs', items).catch(() => {});
|
||||
}
|
||||
|
||||
let lastWorklogsFetchAt = 0;
|
||||
|
||||
async function loadStored(): Promise<TaskWorklog[] | null> {
|
||||
@@ -38,20 +35,32 @@ export const useTaskWorklogStore = create<TaskWorklogState>((set, get) => ({
|
||||
},
|
||||
|
||||
addWorklog: (data) => {
|
||||
const previous = get().worklogs;
|
||||
const item: TaskWorklog = {
|
||||
...data,
|
||||
id: `wl-${Date.now()}`,
|
||||
createdAt: new Date().toISOString(),
|
||||
};
|
||||
const updated = [...get().worklogs, item];
|
||||
const updated = [...previous, item];
|
||||
set({ worklogs: updated, loaded: true });
|
||||
saveStored(updated);
|
||||
scheduleSaveWithOptimisticRollback({
|
||||
save: () => saveServerData('task-worklogs', updated),
|
||||
expected: updated,
|
||||
getCurrent: () => get().worklogs,
|
||||
rollback: () => set({ worklogs: previous, loaded: true }),
|
||||
});
|
||||
},
|
||||
|
||||
deleteWorklog: (id) => {
|
||||
const updated = get().worklogs.filter((w) => w.id !== id);
|
||||
const previous = get().worklogs;
|
||||
const updated = previous.filter((w) => w.id !== id);
|
||||
set({ worklogs: updated, loaded: true });
|
||||
saveStored(updated);
|
||||
scheduleSaveWithOptimisticRollback({
|
||||
save: () => saveServerData('task-worklogs', updated),
|
||||
expected: updated,
|
||||
getCurrent: () => get().worklogs,
|
||||
rollback: () => set({ worklogs: previous, loaded: true }),
|
||||
});
|
||||
},
|
||||
|
||||
getActualHours: (taskId) => {
|
||||
|
||||
Reference in New Issue
Block a user