diff --git a/web/src/lib/managers/modal-manager.svelte.ts b/web/src/lib/managers/modal-manager.svelte.ts index c8cefe8a58..73a3351a7e 100644 --- a/web/src/lib/managers/modal-manager.svelte.ts +++ b/web/src/lib/managers/modal-manager.svelte.ts @@ -2,11 +2,14 @@ import ConfirmDialog from '$lib/components/shared-components/dialog/confirm-dial import { mount, unmount, type Component, type ComponentProps } from 'svelte'; type OnCloseData = T extends { onClose: (data: infer R) => void } ? R : never; -// TODO make `props` optional if component only has `onClose` -// type OptionalIfEmpty = keyof T extends never ? undefined : T; +type OptionalIfEmpty = keyof T extends never ? undefined : T; class ModalManager { - open>(Component: Component, props: Omit) { + open>( + Component: Component, + props?: OptionalIfEmpty> | Record, + ): Promise; + open>(Component: Component, props: OptionalIfEmpty>) { return new Promise((resolve) => { let modal: object = {}; @@ -18,7 +21,7 @@ class ModalManager { modal = mount(Component, { target: document.body, props: { - ...(props as T), + ...((props ?? {}) as T), onClose, }, }); diff --git a/web/src/lib/modals/JobCreateModal.svelte b/web/src/lib/modals/JobCreateModal.svelte new file mode 100644 index 0000000000..6c173f918c --- /dev/null +++ b/web/src/lib/modals/JobCreateModal.svelte @@ -0,0 +1,65 @@ + + + (confirmed ? handleCreate() : onClose(false))} +> + {#snippet promptSnippet()} +
+
+ +
+
+ {/snippet} +
diff --git a/web/src/routes/admin/jobs-status/+page.svelte b/web/src/routes/admin/jobs-status/+page.svelte index af7f3d11af..c5327a4271 100644 --- a/web/src/routes/admin/jobs-status/+page.svelte +++ b/web/src/routes/admin/jobs-status/+page.svelte @@ -1,16 +1,11 @@ {#snippet buttons()} -