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.

37 lines
867 B

  1. import { writable } from "svelte/store";
  2. import stuffLogClient from "../clients/stufflog";
  3. import type { TaskFilter, TaskResult } from "../models/task";
  4. interface TaskStoreData {
  5. loading: boolean
  6. stale: boolean
  7. filter: TaskFilter
  8. tasks: TaskResult[]
  9. }
  10. function createTaskStore() {
  11. const {update, subscribe} = writable<TaskStoreData>({
  12. loading: false,
  13. stale: true,
  14. filter: {},
  15. tasks: [],
  16. });
  17. return {
  18. subscribe,
  19. markStale() {
  20. update(v => ({...v, stale: true}));
  21. },
  22. async load(filter: TaskFilter) {
  23. update(v => ({...v, loading: true, stale: false, filter}));
  24. const tasks = await stuffLogClient.listTasks(filter);
  25. update(v => ({...v, loading: false, tasks: [...tasks]}));
  26. },
  27. }
  28. }
  29. const taskStore = createTaskStore();
  30. export default taskStore;
  31. export const fpTaskStore = createTaskStore();