Jelajahi Sumber

feat: try catch indexedDB error

Dogtiti 1 tahun lalu
induk
melakukan
c2fc0b4979
3 mengubah file dengan 40 tambahan dan 24 penghapusan
  1. 2 2
      app/store/chat.ts
  2. 0 22
      app/utils/indexDB-storage.ts
  3. 38 0
      app/utils/indexedDB-storage.ts

+ 2 - 2
app/store/chat.ts

@@ -27,7 +27,7 @@ import { createPersistStore } from "../utils/store";
 import { collectModelsWithDefaultModel } from "../utils/model";
 import { useAccessStore } from "./access";
 import { isDalle3 } from "../utils";
-import { indexDBStorage } from "@/app/utils/indexDB-storage";
+import { indexedDBStorage } from "@/app/utils/indexedDB-storage";
 
 export type ChatMessage = RequestMessage & {
   date: string;
@@ -667,7 +667,7 @@ export const useChatStore = createPersistStore(
       },
 
       async clearAllData() {
-        await indexDBStorage.clear();
+        await indexedDBStorage.clear();
         localStorage.clear();
         location.reload();
       },

+ 0 - 22
app/utils/indexDB-storage.ts

@@ -1,22 +0,0 @@
-import { StateStorage } from "zustand/middleware";
-import { get, set, del, clear } from "idb-keyval";
-
-class IndexDBStorage implements StateStorage {
-  public async getItem(name: string): Promise<string | null> {
-    return (await get(name)) || localStorage.getItem(name);
-  }
-
-  public async setItem(name: string, value: string): Promise<void> {
-    await set(name, value);
-  }
-
-  public async removeItem(name: string): Promise<void> {
-    await del(name);
-  }
-
-  public async clear(): Promise<void> {
-    await clear();
-  }
-}
-
-export const indexDBStorage = new IndexDBStorage();

+ 38 - 0
app/utils/indexedDB-storage.ts

@@ -0,0 +1,38 @@
+import { StateStorage } from "zustand/middleware";
+import { get, set, del, clear } from "idb-keyval";
+
+class IndexedDBStorage implements StateStorage {
+  public async getItem(name: string): Promise<string | null> {
+    try {
+      return (await get(name)) || localStorage.getItem(name);
+    } catch (error) {
+      return localStorage.getItem(name);
+    }
+  }
+
+  public async setItem(name: string, value: string): Promise<void> {
+    try {
+      await set(name, value);
+    } catch (error) {
+      localStorage.setItem(name, value);
+    }
+  }
+
+  public async removeItem(name: string): Promise<void> {
+    try {
+      await del(name);
+    } catch (error) {
+      localStorage.removeItem(name);
+    }
+  }
+
+  public async clear(): Promise<void> {
+    try {
+      await clear();
+    } catch (error) {
+      localStorage.clear();
+    }
+  }
+}
+
+export const indexedDBStorage = new IndexedDBStorage();