summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/dialogs/EditWorld.svelte
diff options
context:
space:
mode:
authorWolfgang Müller2025-02-13 17:52:16 +0100
committerWolfgang Müller2025-02-13 17:52:16 +0100
commitdc4db405d2991d3ec6a114f3b08d3fccd057d3ee (patch)
tree2c620c9af2062ba09fa591f8b3ed961664adab58 /frontend/src/lib/dialogs/EditWorld.svelte
parent4df870d793123be95c8af031a340a39b5b8402ac (diff)
downloadhircine-dc4db405d2991d3ec6a114f3b08d3fccd057d3ee.tar.gz
frontend: Migrate to Svelte 5
Diffstat (limited to 'frontend/src/lib/dialogs/EditWorld.svelte')
-rw-r--r--frontend/src/lib/dialogs/EditWorld.svelte43
1 files changed, 17 insertions, 26 deletions
diff --git a/frontend/src/lib/dialogs/EditWorld.svelte b/frontend/src/lib/dialogs/EditWorld.svelte
index 82afe6a..869dc21 100644
--- a/frontend/src/lib/dialogs/EditWorld.svelte
+++ b/frontend/src/lib/dialogs/EditWorld.svelte
@@ -1,46 +1,37 @@
<script lang="ts">
- import { type World } from '$gql/graphql';
- import { deleteWorlds, updateWorlds, type WorldInput } from '$gql/Mutations';
- import { itemEquals } from '$gql/Utils';
+ import { deleteWorlds, updateWorlds } from '$gql/Mutations';
+ import { omitIdentifiers } from '$gql/Utils';
+ import type { UpdateWorldInput, World } 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 WorldForm from '$lib/forms/WorldForm.svelte';
- import { toastFinally } from '$lib/Toasts';
- import { confirmDeletion } from '$lib/Utils';
import { getContextClient } from '@urql/svelte';
- import { closeModal } from 'svelte-modals';
+ import type { ModalProps } from 'svelte-modals';
const client = getContextClient();
- export let isOpen: boolean;
+ interface Props extends ModalProps {
+ world: World;
+ }
- export let world: World;
- const original = structuredClone(world);
- $: pending = !itemEquals(original, world);
+ let { world, ...modal }: Props = $props();
+ const initial = omitIdentifiers(world);
- function save(event: CustomEvent<WorldInput>) {
- updateWorlds(client, { ids: world.id, input: event.detail })
- .then(closeModal)
- .catch(toastFinally);
+ function submit(input: UpdateWorldInput) {
+ updateWorlds(client, { ids: world.id, input }).then(modal.close).catch(toastFinally);
}
function deleteWorld() {
confirmDeletion('World', world.name, () => {
- deleteWorlds(client, { ids: world.id }).then(closeModal).catch(toastFinally);
+ deleteWorlds(client, { ids: world.id }).then(modal.close).catch(toastFinally);
});
}
</script>
-<Dialog {isOpen}>
- <svelte:fragment slot="header">
- <h2>Edit World</h2>
- </svelte:fragment>
- <WorldForm bind:world on:submit={save}>
- <div class="flex gap-4">
- <DeleteButton on:click={deleteWorld} />
- <div class="grow" />
- <SubmitButton active={pending} />
- </div>
+<Dialog title="Edit World" {...modal}>
+ <WorldForm {initial} {submit}>
+ <DeleteButton onclick={deleteWorld} />
</WorldForm>
</Dialog>