Loggest thine Stuff
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.6 KiB

2 years ago
2 years ago
2 years ago
  1. <script lang="ts" context="module">
  2. import Status from "$lib/models/status";
  3. export const STATUS_ORDER = [
  4. Status.Active,
  5. Status.Background,
  6. Status.Available,
  7. Status.Blocked,
  8. Status.Completed,
  9. Status.Failed,
  10. Status.Dropped,
  11. ]
  12. </script>
  13. <script lang="ts">
  14. import type { ProjectEntry } from "$lib/models/project";
  15. import MenuCategory from "../common/MenuCategory.svelte";
  16. import MenuItem from "../common/MenuItem.svelte";
  17. import { getScopeContext } from "../contexts/ScopeContext.svelte";
  18. import { projectPrettyId, scopePrettyId } from "$lib/utils/prettyIds";
  19. import { getProjectListContext } from "../contexts/ProjectListContext.svelte";
  20. const {scope} = getScopeContext();
  21. const {projects} = getProjectListContext();
  22. let projectsByStatus: Record<Status, ProjectEntry[]>;
  23. let scopeUrlPrefix: string;
  24. $: projectsByStatus = $projects.reduce((p, c) => (
  25. {...p, [c.status]: [...p[c.status], c]}
  26. ), {0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: []});
  27. $: scopeUrlPrefix = `/${scopePrettyId($scope)}`
  28. </script>
  29. {#each STATUS_ORDER as status (status)}
  30. {#if projectsByStatus[status].length > 0}
  31. <MenuCategory status={status}>
  32. {#each projectsByStatus[status] as project (project.id)}
  33. <MenuItem href="{scopeUrlPrefix}/projects/{projectPrettyId(project)}" subtitle={
  34. project.name.includes(": ") ? project.name.split(": ")[0] + ": " : ""
  35. }>{
  36. project.name.includes(": ") ? project.name.split(": ").slice(1).join(": ") : project.name
  37. }</MenuItem>
  38. {/each}
  39. </MenuCategory>
  40. {/if}
  41. {/each}