feat(frontend): migrate Zustand persist storage to IndexedDB

- Add idb-keyval dependency for IndexedDB support
- Configure persist middleware to use IndexedDB
- Improves persistence reliability in browser environments
This commit is contained in:
linwinfan
2026-04-07 15:51:53 +08:00
parent 8fa3101f0f
commit 20fcf2c29c
2 changed files with 15 additions and 1 deletions

View File

@@ -33,6 +33,7 @@
"clsx": "^2.1.1",
"fuse.js": "^7.1.0",
"github-markdown-css": "^5.8.1",
"idb-keyval": "^6.2.2",
"jszip": "^3.10.1",
"katex": "^0.16.22",
"lottie-react": "^2.4.1",

View File

@@ -1,8 +1,9 @@
import { create } from 'zustand'
import { persist } from 'zustand/middleware'
import { persist, createJSONStorage } from 'zustand/middleware'
import { delete_task, generateNote } from '@/services/note.ts'
import { v4 as uuidv4 } from 'uuid'
import toast from 'react-hot-toast'
import { get, set, del } from 'idb-keyval'
export type TaskStatus = 'PENDING' | 'RUNNING' | 'SUCCESS' | 'FAILD'
@@ -211,6 +212,18 @@ export const useTaskStore = create<TaskStore>()(
}),
{
name: 'task-storage',
storage: createJSONStorage(() => ({
getItem: async (name: string): Promise<string | null> => {
const value = await get(name)
return value ?? null
},
setItem: async (name: string, value: string): Promise<void> => {
await set(name, value)
},
removeItem: async (name: string): Promise<void> => {
await del(name)
},
})),
}
)
)