From 83a29e72888bf0329ec24303aa35a1577d8b4ecb Mon Sep 17 00:00:00 2001
From: ivarlovlie <git@ivarlovlie.no>
Date: Wed, 28 Sep 2022 23:36:04 +0800
Subject: refactor: Rename to signin

---
 .../src/routes/(main)/(public)/signin/+page.svelte | 107 +++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 apps/kit/src/routes/(main)/(public)/signin/+page.svelte

(limited to 'apps/kit/src/routes/(main)/(public)/signin/+page.svelte')

diff --git a/apps/kit/src/routes/(main)/(public)/signin/+page.svelte b/apps/kit/src/routes/(main)/(public)/signin/+page.svelte
new file mode 100644
index 0000000..46b9f7f
--- /dev/null
+++ b/apps/kit/src/routes/(main)/(public)/signin/+page.svelte
@@ -0,0 +1,107 @@
+<script lang="ts">
+    import { goto } from "$app/navigation";
+    import { login } from "$lib/api/user";
+    import Button from "$lib/components/button.svelte";
+    import Checkbox from "$lib/components/checkbox.svelte";
+    import Input from "$lib/components/input.svelte";
+    import LL from "$lib/i18n/i18n-svelte";
+    import type { ErrorResult } from "$lib/models/ErrorResult";
+    import type { LoginPayload } from "$lib/models/LoginPayload";
+
+    let loading = false;
+
+    const data = {
+        username: "",
+        password: "",
+    } as LoginPayload;
+
+    let error = {
+        text: "",
+        title: "",
+    } as ErrorResult;
+
+    async function submitFormAsync() {
+        error = { text: "", title: "" };
+        loading = true;
+        const loginResponse = await login(data);
+        if (loginResponse.ok) {
+            await goto("/home");
+        } else {
+            error.title = loginResponse.data.title;
+            error.text = loginResponse.data.text;
+        }
+        loading = false;
+    }
+</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.login.loginToYourAccount()}
+        </h2>
+        <p class="mt-2 text-center text-sm text-gray-600">
+            {$LL.common.or()}
+            <a href="/signup" class="link">{$LL.login.createANewAccount()}</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">
+            {#if error.text || error.title}
+                <div class="rounded-md bg-red-50 p-3 mb-3">
+                    {#if error.title}
+                        <h3 class="text-sm font-medium text-red-600">
+                            {error.title}
+                        </h3>
+                    {/if}
+                    {#if error.text}
+                        <div class="mt-2 text-sm text-red-500">
+                            {error.text}
+                        </div>
+                    {/if}
+                </div>
+            {/if}
+            <form class="space-y-6" on:submit|preventDefault={submitFormAsync}>
+                <Input
+                    id="email"
+                    name="email"
+                    type="email"
+                    label={$LL.common.emailAddress()}
+                    required
+                    value={data.username}
+                />
+
+                <Input
+                    id="password"
+                    name="password"
+                    type="password"
+                    label={$LL.login.password()}
+                    autocomplete="current-password"
+                    required
+                    value={data.password}
+                />
+
+                <div class="flex items-center justify-between">
+                    <Checkbox
+                        id="remember-me"
+                        name="remember-me"
+                        label={$LL.login.notMyComputer()}
+                    />
+                    <div class="text-sm">
+                        <a href="/reset" class="link">
+                            {$LL.login.forgotPassword()}
+                        </a>
+                    </div>
+                </div>
+
+                <Button
+                    text={$LL.common.logIn()}
+                    fullWidth
+                    type="submit"
+                    {loading}
+                />
+            </form>
+        </div>
+    </div>
+</div>
-- 
cgit v1.3

