From 94cb59310f5cde903d8c94942b0c56dceb80bf79 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sat, 26 Nov 2022 19:28:56 +0900 Subject: refactor: Add and use FormError class to handle form error logic --- code/app/src/lib/models/internal/FormError.ts | 24 ++++++++++ .../lib/services/abstractions/IAccountService.ts | 3 +- code/app/src/lib/services/account-service.ts | 9 +++- .../(main)/(public)/reset-password/+page.svelte | 19 +++----- .../routes/(main)/(public)/sign-in/+page.svelte | 53 ++++++++++------------ 5 files changed, 65 insertions(+), 43 deletions(-) create mode 100644 code/app/src/lib/models/internal/FormError.ts (limited to 'code') diff --git a/code/app/src/lib/models/internal/FormError.ts b/code/app/src/lib/models/internal/FormError.ts new file mode 100644 index 0000000..f6d8978 --- /dev/null +++ b/code/app/src/lib/models/internal/FormError.ts @@ -0,0 +1,24 @@ +import type { KnownProblem } from "./KnownProblem"; + +export class FormError { + title: string; + subtitle: string; + constructor(title: string = "", subtitle: string = "") { + this.title = title; + this.title = subtitle; + } + + set(title: string = "", subtitle: string = "") { + this.title = title; + this.subtitle = subtitle; + } + + set_from_known_problem(knownProblem: KnownProblem) { + this.title = knownProblem.title ?? ""; + this.subtitle = knownProblem.subtitle ?? ""; + } + + has_error() { + return this.title?.length > 0 || this.subtitle?.length > 0; + } +} \ No newline at end of file diff --git a/code/app/src/lib/services/abstractions/IAccountService.ts b/code/app/src/lib/services/abstractions/IAccountService.ts index 736c3ae..2beeb08 100644 --- a/code/app/src/lib/services/abstractions/IAccountService.ts +++ b/code/app/src/lib/services/abstractions/IAccountService.ts @@ -25,7 +25,8 @@ export type LoginPayload = { } export type LoginResponse = { - isLoggedIn: boolean + isLoggedIn: boolean, + knownProblem?: KnownProblem } export type CreateAccountPayload = { diff --git a/code/app/src/lib/services/account-service.ts b/code/app/src/lib/services/account-service.ts index 90af163..dedf39e 100644 --- a/code/app/src/lib/services/account-service.ts +++ b/code/app/src/lib/services/account-service.ts @@ -7,7 +7,14 @@ export class AccountService implements IAccountService { session: Session; async login_async(payload: LoginPayload): Promise { const response = await http_post_async(api_base("_/account/login"), payload); - return { isLoggedIn: response.ok }; + if (response.ok) return { isLoggedIn: true }; + if (is_known_problem(response)) return { + isLoggedIn: false, + knownProblem: await response.json() + }; + return { + isLoggedIn: false + } } async logout_async(): Promise { const response = await http_get_async(api_base("_/account/logout")); diff --git a/code/app/src/routes/(main)/(public)/reset-password/+page.svelte b/code/app/src/routes/(main)/(public)/reset-password/+page.svelte index 8bda3dc..eb02b45 100644 --- a/code/app/src/routes/(main)/(public)/reset-password/+page.svelte +++ b/code/app/src/routes/(main)/(public)/reset-password/+page.svelte @@ -1,6 +1,7 @@ @@ -108,9 +105,9 @@
{#if showErrorAlert} - + {/if} -
+
@@ -137,7 +134,7 @@ id="remember-me" _pwKey={signInPageTestKeys.rememberMeCheckbox} name="remember-me" - bind:checked={data.persist} + bind:checked={formData.persist.value} label={$LL.signInPage.notMyComputer()} />
-- cgit v1.3