cleanup
This commit is contained in:
parent
4e612cb224
commit
28d57323b6
6 changed files with 316 additions and 35 deletions
33
store/idb.js
Normal file
33
store/idb.js
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
// lib/idb.js
|
||||
import { createStore, get, set, del, entries, clear } from 'idb-keyval'
|
||||
|
||||
// Named stores — each maps to a distinct IDBObjectStore
|
||||
export const itemsStore = createStore('app-db', 'items')
|
||||
export const userStore = createStore('app-db', 'user')
|
||||
export const cacheStore = createStore('app-db', 'cache')
|
||||
|
||||
// Typed wrappers — keeps raw idb-keyval calls out of the rest of the app
|
||||
// and gives you one place to add validation, logging, or migration logic
|
||||
|
||||
export const db = {
|
||||
items: {
|
||||
getAll: () => entries(itemsStore),
|
||||
get: (id) => get(id, itemsStore),
|
||||
set: (id, value) => set(id, value, itemsStore),
|
||||
remove: (id) => del(id, itemsStore),
|
||||
clear: () => clear(itemsStore),
|
||||
},
|
||||
|
||||
user: {
|
||||
get: () => get('user', userStore),
|
||||
set: (value) => set('user', value, userStore),
|
||||
clear: () => del('user', userStore),
|
||||
},
|
||||
|
||||
cache: {
|
||||
get: (key) => get(key, cacheStore),
|
||||
set: (key, value) => set(key, value, cacheStore),
|
||||
remove: (key) => del(key, cacheStore),
|
||||
clear: () => clear(cacheStore),
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,19 @@
|
|||
import { createStore } from 'zustand/vanilla'
|
||||
import { persist } from 'zustand/middleware'
|
||||
import { idbStorage } from './middleware/persistence.js'
|
||||
import { persist, createJSONStorage } from 'zustand/middleware'
|
||||
import { get, set } from 'idb-keyval'
|
||||
|
||||
const storage = createJSONStorage(() => ({
|
||||
getItem: async (name) => {
|
||||
const value = await get(name)
|
||||
return value ?? null
|
||||
},
|
||||
setItem: async (name, value) => {
|
||||
await set(name, value)
|
||||
},
|
||||
removeItem: async (name) => {
|
||||
await del(name)
|
||||
},
|
||||
}))
|
||||
|
||||
export const store = createStore(
|
||||
persist(
|
||||
|
|
@ -16,9 +29,13 @@ export const store = createStore(
|
|||
}),
|
||||
{
|
||||
name: 'app-store',
|
||||
storage: idbStorage,
|
||||
onRehydrateStorage: () => (state) => {
|
||||
if (state) state._hydrated = true
|
||||
storage,
|
||||
onRehydrateStorage: () => {
|
||||
return (state, error) => {
|
||||
if (!error) {
|
||||
store.setState({ _hydrated: true })
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import { get, set, del } from 'idb-keyval'
|
||||
import { createJSONStorage } from 'zustand/middleware'
|
||||
// store/middleware/persistence.js
|
||||
import { db } from '../idb.js'
|
||||
|
||||
export const idbStorage = createJSONStorage(() => ({
|
||||
getItem: (name) => get(name),
|
||||
setItem: (name, value) => set(name, value),
|
||||
removeItem: (name) => del(name),
|
||||
}))
|
||||
export const makeIdbStorage = (storeName) =>
|
||||
createJSONStorage(() => ({
|
||||
getItem: (name) => db[storeName].get(name),
|
||||
setItem: (name, value) => db[storeName].set(name, value),
|
||||
removeItem: (name) => db[storeName].remove(name),
|
||||
}))
|
||||
Loading…
Add table
Add a link
Reference in a new issue