From 20fcf2c29c142e31817ff8d0485e10c92e3f8e92 Mon Sep 17 00:00:00 2001 From: linwinfan Date: Tue, 7 Apr 2026 15:51:53 +0800 Subject: [PATCH] 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 --- BillNote_frontend/package.json | 1 + BillNote_frontend/src/store/taskStore/index.ts | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/BillNote_frontend/package.json b/BillNote_frontend/package.json index cbc0ae4..eaa0142 100644 --- a/BillNote_frontend/package.json +++ b/BillNote_frontend/package.json @@ -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", diff --git a/BillNote_frontend/src/store/taskStore/index.ts b/BillNote_frontend/src/store/taskStore/index.ts index f273093..678b0c5 100644 --- a/BillNote_frontend/src/store/taskStore/index.ts +++ b/BillNote_frontend/src/store/taskStore/index.ts @@ -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()( }), { name: 'task-storage', + storage: createJSONStorage(() => ({ + getItem: async (name: string): Promise => { + const value = await get(name) + return value ?? null + }, + setItem: async (name: string, value: string): Promise => { + await set(name, value) + }, + removeItem: async (name: string): Promise => { + await del(name) + }, + })), } ) )