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.

38 lines
985 B

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. import { writable } from "svelte/store";
  2. import stuffLogClient from "../clients/stufflog";
  3. import type { ProjectFilter, ProjectResult } from "../models/project";
  4. interface ProjectStoreData {
  5. loading: boolean
  6. stale: boolean
  7. filter: ProjectFilter
  8. projects: ProjectResult[]
  9. }
  10. function createProjectStore() {
  11. const {update, subscribe} = writable<ProjectStoreData>({
  12. loading: false,
  13. stale: true,
  14. filter: {},
  15. projects: [],
  16. });
  17. return {
  18. subscribe,
  19. markStale() {
  20. update(v => ({...v, stale: true}));
  21. },
  22. async load(filter: ProjectFilter) {
  23. update(v => ({...v, loading: true, stale: false, filter}));
  24. const projects = await stuffLogClient.listProjects(filter);
  25. update(v => ({...v, loading: false, projects: projects.reverse()}));
  26. },
  27. }
  28. }
  29. const projectStore = createProjectStore();
  30. export default projectStore;
  31. export const fpProjectStore = createProjectStore();
  32. export const fpProjectStore2 = createProjectStore();