import { writable } from "svelte/store"; import stuffLogClient from "../clients/stufflog"; import type { ProjectGroupResult } from "../models/projectgroup"; interface ProjectStoreData { loading: boolean stale: boolean groups: ProjectGroupResult[] } function createProjectGroupStore() { const {update, subscribe} = writable({ loading: false, stale: true, groups: [], }); return { subscribe, markStale() { update(v => ({...v, stale: true})); }, async loadOne(id: string) { update(v => ({...v, loading: true})); const group = await stuffLogClient.findProjectGroup(id); update(v => ({...v, loading: false, groups: [ ...v.groups.filter(g => g.id === id), group, ]})); }, fakeRefresh() { update(v => ({...v, groups: [...v.groups]})) }, async load() { update(v => ({...v, loading: true, stale: false})); const groups = await stuffLogClient.listProjectGroups(); update(v => ({...v, loading: false, groups: groups})); }, } } const projectGroupStore = createProjectGroupStore(); export default projectGroupStore;