fix(data): 增加全局保存失败保护

This commit is contained in:
Script Generator
2026-07-03 19:36:18 +08:00
parent 516a5f1b63
commit b4a3c990b4
17 changed files with 727 additions and 132 deletions

View File

@@ -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) => {