UNPKG

amplifyquery

Version:
68 lines (67 loc) 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createModelStore = createModelStore; const zustand_1 = require("zustand"); /** * Create cache store for each model */ function createModelStore(modelName) { return (0, zustand_1.create)((set, get) => ({ items: [], itemsMap: new Map(), lastFetched: null, isLoading: false, error: null, setItems: (items) => { const itemsMap = new Map(); items.forEach((item) => itemsMap.set(item.id, item)); set({ items, itemsMap, lastFetched: Date.now(), error: null, }); }, setItem: (item) => { const items = [...get().items]; const itemsMap = new Map(get().itemsMap); // Search for existing item const index = items.findIndex((i) => i.id === item.id); if (index >= 0) { // Update existing item items[index] = item; } else { // Add new item items.push(item); } // Update map itemsMap.set(item.id, item); set({ items, itemsMap, lastFetched: Date.now(), error: null, }); }, removeItem: (id) => { const items = get().items.filter((item) => item.id !== id); const itemsMap = new Map(get().itemsMap); itemsMap.delete(id); set({ items, itemsMap, error: null, }); }, setLoading: (isLoading) => set({ isLoading }), setError: (error) => set({ error }), resetState: () => set({ items: [], itemsMap: new Map(), lastFetched: null, isLoading: false, error: null, }), })); }