aboutsummaryrefslogtreecommitdiffstats
path: root/apps/kit/src/routes/(main)/(public)/sign-up
diff options
context:
space:
mode:
Diffstat (limited to 'apps/kit/src/routes/(main)/(public)/sign-up')
-rw-r--r--apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte61
1 files changed, 47 insertions, 14 deletions
diff --git a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte b/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte
index 8b89190..0dfa41a 100644
--- a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte
+++ b/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte
@@ -1,29 +1,62 @@
-<script>
- import { Button, Input } from "$lib/components";
+<script lang="ts">
+ import { goto } from "$app/navigation";
+ import { create_account } from "$lib/api/user";
+ import { Button, Input, Alert } from "$lib/components";
import LL from "$lib/i18n/i18n-svelte";
+ import type { CreateAccountPayload } from "$lib/models/CreateAccountPayload";
+ import type { ErrorResult } from "$lib/models/ErrorResult";
const formData = {
- emailAddress: "",
+ username: "",
password: "",
- };
+ } as CreateAccountPayload;
+
+ const errorData = {
+ text: "",
+ title: "",
+ } as ErrorResult;
+ let loading = false;
+ $: showErrorAlert =
+ (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0;
+
+ async function submitFormAsync() {
+ loading = true;
+ errorData.text = "";
+ errorData.title = "";
+ const response = await create_account(formData);
+ loading = false;
+ if (response.ok) {
+ await goto("/home");
+ return;
+ }
+ errorData.title = response.data?.title ?? $LL.unexpectedError();
+ errorData.text = response.data?.text ?? $LL.tryAgainSoon();
+ }
</script>
<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8">
- <div class="sm:mx-auto sm:w-full sm:max-w-md">
- <h2
- class="mt-6 text-center text-3xl tracking-tight font-bold text-gray-900"
- >
- {$LL.createYourNewAccount()}
+ <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md">
+ <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900">
+ {$LL.signUpPage.createYourNewAccount()}
</h2>
- <p class="mt-2 text-center text-sm text-gray-600">
+ <p class="mt-2 text-sm text-gray-600">
{$LL.or().toLowerCase()}
- <a href="/sign-in" class="link">{$LL.signIntoYourAccount()}</a>
+ <a href="/sign-in" class="link">
+ {$LL.signIntoYourAccount().toLowerCase()}
+ </a>
</p>
</div>
<div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
<div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
- <form class="space-y-6" action="#">
+ <Alert
+ title={errorData.title}
+ message={errorData.text}
+ type="error"
+ class="mb-2"
+ visible={showErrorAlert}
+ />
+ <form class="space-y-6" on:submit|preventDefault={submitFormAsync}>
<Input
label={$LL.emailAddress()}
id="email"
@@ -31,7 +64,7 @@
autocomplete="email"
required
type="email"
- bind:value={formData.emailAddress}
+ bind:value={formData.username}
/>
<Input
@@ -42,7 +75,7 @@
type="password"
bind:value={formData.password}
/>
- <Button type="submit" text={$LL.submit()} fullWidth />
+ <Button type="submit" text={$LL.submit()} {loading} fullWidth />
</form>
</div>
</div>