diff --git a/store/index.js b/store/index.js index 3328f31..43b1d46 100644 --- a/store/index.js +++ b/store/index.js @@ -1,13 +1,43 @@ import { createStore } from 'zustand/vanilla' +import { persist, createJSONStorage } from 'zustand/middleware' +import { get, set, del } from 'idb-keyval' -export const store = createStore((set, get) => ({ - user: null, - items: [], - route: 'home', - - // Actions - setUser: (user) => set({ user }), - addItem: (item) => set(s => ({ items: [...s.items, item] })), - removeItem: (id) => set(s => ({ items: s.items.filter(i => i.id !== id) })), - navigate: (route) => set({ route }), +// Create IndexedDB storage adapter +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( + (set, get) => ({ + _hydrated: true, // Start as true - persistence happens in background + user: null, + items: [], + route: 'home', + + // Actions + setUser: (user) => set({ user }), + addItem: (item) => set(s => ({ items: [...s.items, item] })), + removeItem: (id) => set(s => ({ items: s.items.filter(i => i.id !== id) })), + navigate: (route) => set({ route }), + }), + { + name: 'app-store', + storage, + partialize: (state) => ({ + user: state.user, + items: state.items, + route: state.route, + }), + } + ) +)