[debug] rethink store

This commit is contained in:
Purp1e
2024-11-11 17:17:08 +08:00
parent fcead5a4f5
commit af7dbe0cac
7 changed files with 130 additions and 60 deletions

51
src/utils/old.ts Normal file
View File

@@ -0,0 +1,51 @@
import { Store } from "@tauri-apps/plugin-store"
import { throttle } from "throttle-debounce"
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import type { StateStorage } from "zustand/middleware"
// import { useThrottleFn } from '@reactuses/core';
// 节流设置
export const THROTTLE_TIME = 300
export const THROTTLE_TIME_STORE = 2000
export const THROTTLE_LEADING = true
export const THROTTLE_TRAILING = true
// 自定义Store覆盖get, set等方法以适应tauri+zustand
export async function tauriStore(name: string) {
const store = await Store.load(`${name || "store"}.settings.json`, {
autoSave: THROTTLE_TIME_STORE,
})
const doSet = throttle(
THROTTLE_TIME,
async (key: string, value: unknown) => await store.set(key, value),
{
noTrailing: !THROTTLE_TRAILING,
noLeading: !THROTTLE_LEADING,
},
)
const set = (key: string, value: unknown) => {
doSet(key, value)
}
const get = async (key: string) => await store.get(key)
// 自定义存储对象
const storage: StateStorage = {
setItem: async (name: string, value: string): Promise<void> => {
await store.set(name, value)
// console.log(name, 'has been set to', value)
},
getItem: async (name: string): Promise<string | null> => {
// console.log(name, 'has been get')
return (await store.get(name)) || null
},
removeItem: async (name: string): Promise<void> => {
// console.log(name, 'has been deleted')
await store.delete(name)
},
}
return { store, get, set, storage }
}

View File

@@ -31,21 +31,6 @@ export async function tauriStore(name: string) {
const get = async (key: string) => await store.get(key)
// 自定义存储对象
const storage: StateStorage = {
setItem: async (name: string, value: string): Promise<void> => {
await store.set(name, value)
// console.log(name, 'has been set to', value)
},
getItem: async (name: string): Promise<string | null> => {
// console.log(name, 'has been get')
return (await store.get(name)) || null
},
removeItem: async (name: string): Promise<void> => {
// console.log(name, 'has been deleted')
await store.delete(name)
},
}
return { store, get, set, storage }
return { store, get, set }
}