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.

110 lines
4.2 KiB

  1. <script lang="ts" context="module">
  2. import type { Load } from "@sveltejs/kit/types/internal";
  3. import { sl3 } from "$lib/clients/sl3";
  4. function generateItemFilters(now: Date): {scheduledFilter: ItemFilter, acquiredFilter: ItemFilter, looseFilter: ItemFilter} {
  5. return {
  6. scheduledFilter: {
  7. scheduledDate: datesOf(parseInterval("next:7d", now)),
  8. },
  9. acquiredFilter: {
  10. acquiredTime: morningInterval(parseInterval("today", now)),
  11. },
  12. looseFilter: {
  13. loose: true,
  14. unAcquired: true,
  15. unScheduled: true,
  16. },
  17. }
  18. }
  19. export const load: Load = async({ fetch, stuff }) => {
  20. const client = sl3(fetch, stuff.idToken);
  21. const scopes = await client.listScopes();
  22. const {acquiredFilter, looseFilter, scheduledFilter} = generateItemFilters(new Date());
  23. const [scheduledItems, acquiredItems, looseItems, sprints] = await Promise.all([
  24. client.listItems("ALL", scheduledFilter),
  25. client.listItems("ALL", acquiredFilter),
  26. client.listItems("ALL", looseFilter),
  27. client.listSprints("ALL"),
  28. ]);
  29. return {
  30. props: { scopes, scheduledItems, acquiredItems, looseItems, sprints }
  31. };
  32. }
  33. </script>
  34. <script lang="ts">
  35. import Column from "$lib/components/layout/Column.svelte";
  36. import Columns from "$lib/components/layout/Columns.svelte";
  37. import Header from "$lib/components/layout/Header.svelte";
  38. import Row from "$lib/components/layout/Row.svelte";
  39. import type Scope from "$lib/models/scope";
  40. import ScopeLinkList from "$lib/components/frontpage/ScopeLinkList.svelte";
  41. import ScopeCreateUpdateModal from "$lib/modals/ScopeCreateUpdateModal.svelte";
  42. import OptionsRow from "$lib/components/layout/OptionsRow.svelte";
  43. import Option from "$lib/components/layout/Option.svelte";
  44. import ScopeListContext from "$lib/components/contexts/ScopeListContext.svelte";
  45. import parseInterval, { datesOf, morningInterval } from "$lib/utils/timeinterval";
  46. import ItemMultiListContext from "$lib/components/contexts/ItemMultiListContext.svelte";
  47. import type Item from "$lib/models/item";
  48. import DeletionModal from "$lib/modals/DeletionModal.svelte";
  49. import ItemAcquireModal from "$lib/modals/ItemAcquireModal.svelte";
  50. import ItemListRow from "$lib/components/scope/ItemListRow.svelte";
  51. import { getTimeContext } from "$lib/components/contexts/TimeContext.svelte";
  52. import type { ItemFilter } from "$lib/models/item";
  53. import ItemCreateModal from "$lib/modals/ItemCreateModal.svelte";
  54. import SprintList from "$lib/components/scope/SprintList.svelte";
  55. import SprintCreateUpdateModal from "$lib/modals/SprintCreateUpdateModal.svelte";
  56. import SprintListContext from "$lib/components/contexts/SprintListContext.svelte";
  57. import type Sprint from "$lib/models/sprint";
  58. import Icon from "$lib/components/layout/Icon.svelte";
  59. export let scopes: Scope[] = [];
  60. export let acquiredItems: Item[];
  61. export let scheduledItems: Item[];
  62. export let looseItems: Item[];
  63. export let sprints: Sprint[];
  64. const {now} = getTimeContext();
  65. </script>
  66. <Header fullwidth wide subtitle="Logging your stuff">Stufflog</Header>
  67. <svelte:head>
  68. <title>Stufflog 3</title>
  69. </svelte:head>
  70. <ItemMultiListContext global lists={{acquiredItems, scheduledItems, looseItems}} filters={generateItemFilters($now)}>
  71. <ScopeListContext scopes={scopes}>
  72. <SprintListContext global sprints={sprints} intervalString="">
  73. <Columns wide>
  74. <Column>
  75. <Row title="Scopes">
  76. <OptionsRow slot="right">
  77. <Option open={{name: "scope.create"}}><Icon name="plus" /></Option>
  78. </OptionsRow>
  79. <ScopeLinkList />
  80. </Row>
  81. <ItemListRow title="Scheduled" key="scheduleItems" />
  82. <ItemListRow title="Today" key="acquiredItems" showAcquiredTime />
  83. <ItemListRow title="Loose" key="looseItems" />
  84. </Column>
  85. <Column>
  86. <Row title="Sprints">
  87. <SprintList sub />
  88. </Row>
  89. </Column>
  90. </Columns>
  91. <ItemCreateModal />
  92. <ItemAcquireModal />
  93. <DeletionModal />
  94. <ScopeCreateUpdateModal />
  95. <SprintCreateUpdateModal />
  96. </SprintListContext>
  97. </ScopeListContext>
  98. </ItemMultiListContext>