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.
58 lines
2.0 KiB
58 lines
2.0 KiB
<script lang="ts" context="module">
|
|
const contextKey = {ctx: "modalContext"};
|
|
|
|
export type ModalData =
|
|
| { name: "closed" }
|
|
| { name: "scope.create" }
|
|
| { name: "scope.edit", scope: Scope }
|
|
| { name: "scope.delete", scope: Scope }
|
|
| { name: "item.create", requirement?: RequirementWithoutItems }
|
|
| { name: "item.edit", item: Item }
|
|
| { name: "item.acquire", item: Item }
|
|
| { name: "item.delete", item: Item }
|
|
| { name: "requirement.create", project: ProjectEntry }
|
|
| { name: "requirement.edit", requirement: RequirementWithoutItems }
|
|
| { name: "requirement.delete", requirement: RequirementWithoutItems }
|
|
| { name: "project.create" }
|
|
| { name: "project.edit", project: Project }
|
|
| { name: "project.delete", project: Project }
|
|
| { name: "stat.create" }
|
|
| { name: "stat.edit", stat: Stat }
|
|
| { name: "stat.delete", stat: Stat }
|
|
| { name: "sprint.create" }
|
|
| { name: "sprint.edit", sprint: Sprint }
|
|
| { name: "sprint.delete", sprint: Sprint }
|
|
| { name: "requirement.jump" }
|
|
| { name: "" }
|
|
|
|
interface ModalContextData {
|
|
currentModal: Readable<ModalData>
|
|
openModal(data: ModalData): void
|
|
closeModal(): void
|
|
};
|
|
|
|
export function getModalContext() {
|
|
return getContext(contextKey) as ModalContextData;
|
|
}
|
|
</script>
|
|
|
|
<script lang="ts">
|
|
import { writable, type Readable } from "svelte/store";
|
|
import { getContext, onMount, setContext } from "svelte";
|
|
import type { ProjectEntry, Requirement, RequirementWithoutItems } from "$lib/models/project";
|
|
import type Item from "$lib/models/item";
|
|
import type Project from "$lib/models/project";
|
|
import type Stat from "$lib/models/stat";
|
|
import type Sprint from "$lib/models/sprint";
|
|
import type Scope from "$lib/models/scope";
|
|
|
|
let store = writable<ModalData>({name: "closed"});
|
|
|
|
setContext<ModalContextData>(contextKey, {
|
|
currentModal: {subscribe: store.subscribe},
|
|
openModal: (data: ModalData) => store.set(data),
|
|
closeModal: () => store.set({name: "closed"}),
|
|
});
|
|
</script>
|
|
|
|
<slot></slot>
|