diff options
Diffstat (limited to 'src/routes/(app)/settings/delete/+page@(app).svelte')
| -rw-r--r-- | src/routes/(app)/settings/delete/+page@(app).svelte | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/routes/(app)/settings/delete/+page@(app).svelte b/src/routes/(app)/settings/delete/+page@(app).svelte new file mode 100644 index 00000000..e19a6604 --- /dev/null +++ b/src/routes/(app)/settings/delete/+page@(app).svelte @@ -0,0 +1,82 @@ +<script> + // Rendered outside the settings layout (+page@(app)) so this form isn't + // nested inside the settings save form. + import { enhance } from "$app/forms"; + import { t } from "$lib/translations"; + + let { data, form } = $props(); + let { user } = $derived(data); + + let confirm = $state(form?.confirm || ""); + let working = $state(false); + let matches = $derived( + confirm.trim().toLowerCase() === user.username.toLowerCase(), + ); +</script> + +<div class="container px-4 max-w-xl mx-auto space-y-5 mt-10"> + <h1 class="text-3xl font-bold text-center"> + {$t("user.settings.deleteAccount")} + </h1> + + <div class="rounded-2xl border-2 border-error p-4 space-y-3"> + <p class="flex gap-2"> + <iconify-icon + noobserver + icon="ph:warning-bold" + width="24" + class="text-error shrink-0" + ></iconify-icon> + <span>{$t("user.settings.deleteAccountWarning")}</span> + </p> + <p class="text-secondary">{$t("user.settings.deleteAccountBalance")}</p> + </div> + + {#if form?.error}<p class="text-error">{form.error}</p>{/if} + + <form + method="POST" + class="space-y-3" + use:enhance={() => { + working = true; + return async ({ update }) => { + await update({ reset: false }); + working = false; + }; + }} + > + <label class="block space-y-1"> + <span class="font-bold">{$t("user.settings.deleteAccountConfirm")}</span> + <input + class="input input-bordered w-full" + name="confirm" + autocomplete="off" + autocapitalize="off" + spellcheck="false" + placeholder={user.username} + bind:value={confirm} + /> + </label> + + {#if user.haspin} + <input + class="input input-bordered w-full" + type="password" + inputmode="numeric" + name="pin" + placeholder={$t("user.settings.securityPIN")} + /> + {/if} + + <button + class="btn btn-error w-full rounded-2xl" + disabled={!matches || working} + > + <iconify-icon noobserver icon="ph:trash-bold" width="24"></iconify-icon> + {$t("user.settings.deleteAccountButton")} + </button> + <a href="/settings/security" class="btn w-full rounded-2xl"> + {$t("payments.cancel")} + </a> + </form> +</div> |
