amplifyquery
Version:
68 lines (67 loc) • 2.01 kB
JavaScript
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,
}),
}));
}
;