<script lang="ts"> import { deleteNamespaces, updateNamespaces, type NamespaceInput } from '$gql/Mutations'; import { itemEquals } from '$gql/Utils'; import { type Namespace } from '$gql/graphql'; import { toastFinally } from '$lib/Toasts'; import { confirmDeletion } from '$lib/Utils'; import DeleteButton from '$lib/components/DeleteButton.svelte'; import Dialog from '$lib/components/Dialog.svelte'; import SubmitButton from '$lib/components/SubmitButton.svelte'; import NamespaceForm from '$lib/forms/NamespaceForm.svelte'; import { getContextClient } from '@urql/svelte'; import { closeModal } from 'svelte-modals'; const client = getContextClient(); export let isOpen: boolean; export let namespace: Namespace; const original = structuredClone(namespace); $: pending = !itemEquals(original, namespace); function save(event: CustomEvent<NamespaceInput>) { updateNamespaces(client, { ids: namespace.id, input: event.detail }) .then(closeModal) .catch(toastFinally); } function deleteNamespace() { confirmDeletion('Namespace', namespace.name, () => { deleteNamespaces(client, { ids: namespace.id }).then(closeModal).catch(toastFinally); }); } </script> <Dialog {isOpen}> <svelte:fragment slot="header"> <h2>Edit Namespace</h2> </svelte:fragment> <NamespaceForm bind:namespace on:submit={save}> <div class="flex gap-4"> <DeleteButton on:click={deleteNamespace} /> <div class="grow" /> <SubmitButton active={pending} /> </div> </NamespaceForm> </Dialog>