You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.1 KiB

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<ProjectStoreData>({
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;