From f59bf07d570c906ec796990c0674a0d7432df366 Mon Sep 17 00:00:00 2001
From: Ilion Beyst <ilion.beyst@gmail.com>
Date: Sat, 9 Apr 2022 10:18:49 +0200
Subject: show registration errors on register form

---
 web/pw-server/src/routes/register.svelte | 36 +++++++++++++++++++++++++-------
 1 file changed, 28 insertions(+), 8 deletions(-)

(limited to 'web/pw-server/src/routes/register.svelte')

diff --git a/web/pw-server/src/routes/register.svelte b/web/pw-server/src/routes/register.svelte
index 51cc106..a303025 100644
--- a/web/pw-server/src/routes/register.svelte
+++ b/web/pw-server/src/routes/register.svelte
@@ -2,7 +2,9 @@
   let username: string | undefined;
   let password: string | undefined;
 
-  const onSubmit = () => {
+  let registrationErrors: string[] = [];
+
+  const onSubmit = async () => {
     if (username === undefined || username.trim() === "") {
       return;
     }
@@ -11,7 +13,9 @@
       return;
     }
 
-    fetch("/api/register", {
+    registrationErrors = [];
+
+    const response = await fetch("/api/register", {
       method: "POST",
       headers: {
         "Content-Type": "application/json",
@@ -20,17 +24,29 @@
         username,
         password,
       }),
-    })
-      .then((resp) => resp.json())
-      .then((data) => {
-        console.log(data);
-      });
+    });
+
+    if (!response.ok) {
+      const resp = await response.json();
+      const error = resp["error"];
+      if (response.status == 422 && error["type"] === "validation_failed") {
+        registrationErrors = error["validation_errors"];
+      }
+    }
   };
 </script>
 
 <div class="page-card">
   <div class="page-card-content">
     <h1 class="page-card-header">Create account</h1>
+    {#if registrationErrors.length > 0}
+      <ul class="error-message-list">
+        {#each registrationErrors as errorMessage}
+          <li class="error-message">{errorMessage}</li>
+        {/each}
+      </ul>
+    {/if}
+
     <form class="account-form" on:submit|preventDefault={onSubmit}>
       <label for="username">Username</label>
       <input name="username" bind:value={username} />
@@ -43,4 +59,8 @@
 
 <style lang="scss">
   @import "src/styles/account_forms.scss";
-</style>
\ No newline at end of file
+
+  .error-message-list {
+    color: red;
+  }
+</style>
-- 
cgit v1.2.3

