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.

57 lines
2.0 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <script lang="ts" context="module">
  2. const contextKey = {ctx: "modalContext"};
  3. export type ModalData =
  4. | { name: "closed" }
  5. | { name: "scope.create" }
  6. | { name: "scope.edit", scope: Scope }
  7. | { name: "scope.delete", scope: Scope }
  8. | { name: "item.create", requirement?: RequirementWithoutItems }
  9. | { name: "item.edit", item: Item }
  10. | { name: "item.acquire", item: Item }
  11. | { name: "item.delete", item: Item }
  12. | { name: "requirement.create", project: ProjectEntry }
  13. | { name: "requirement.edit", requirement: RequirementWithoutItems }
  14. | { name: "requirement.delete", requirement: RequirementWithoutItems }
  15. | { name: "project.create" }
  16. | { name: "project.edit", project: Project }
  17. | { name: "project.delete", project: Project }
  18. | { name: "stat.create" }
  19. | { name: "stat.edit", stat: Stat }
  20. | { name: "stat.delete", stat: Stat }
  21. | { name: "sprint.create" }
  22. | { name: "sprint.edit", sprint: Sprint }
  23. | { name: "sprint.delete", sprint: Sprint }
  24. | { name: "requirement.jump" }
  25. | { name: "" }
  26. interface ModalContextData {
  27. currentModal: Readable<ModalData>
  28. openModal(data: ModalData): void
  29. closeModal(): void
  30. };
  31. export function getModalContext() {
  32. return getContext(contextKey) as ModalContextData;
  33. }
  34. </script>
  35. <script lang="ts">
  36. import { writable, type Readable } from "svelte/store";
  37. import { getContext, onMount, setContext } from "svelte";
  38. import type { ProjectEntry, Requirement, RequirementWithoutItems } from "$lib/models/project";
  39. import type Item from "$lib/models/item";
  40. import type Project from "$lib/models/project";
  41. import type Stat from "$lib/models/stat";
  42. import type Sprint from "$lib/models/sprint";
  43. import type Scope from "$lib/models/scope";
  44. let store = writable<ModalData>({name: "closed"});
  45. setContext<ModalContextData>(contextKey, {
  46. currentModal: {subscribe: store.subscribe},
  47. openModal: (data: ModalData) => store.set(data),
  48. closeModal: () => store.set({name: "closed"}),
  49. });
  50. </script>
  51. <slot></slot>