From 1bb0a2be8afd06a858a37bd2b3efaccaedc73249 Mon Sep 17 00:00:00 2001 From: Araozu Date: Wed, 8 May 2024 08:36:20 -0500 Subject: [PATCH] extract registration to a component --- src/pages/Index.tsx | 128 ++++++++++++++++++++++++-------------------- src/utils.ts | 4 +- 2 files changed, 72 insertions(+), 60 deletions(-) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 631fded..9a8229b 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -4,12 +4,11 @@ import { backend, UserInfo } from "../utils"; import { Card } from "../components/Card"; import { AxiosError } from "axios"; +const userIdKey = "UserId"; +const usernameKey = "Username"; export function Index() { - const [loading, setLoading] = createSignal(false); - const [userInfo] = createSignal(null); - const [error, setError] = createSignal(""); - const [username, setUsername] = createSignal(""); + const [userInfo, setUserInfo] = createSignal(null); onMount(() => { // attempt to get userinfo from localstorage @@ -17,34 +16,6 @@ export function Index() { console.log("validating userinfo in localstorage"); }); - // Register a user in the backend, get their user_id, store it in localStorage. - const registerUser = async(ev: Event) => { - ev.preventDefault(); - - setLoading(true); - setError(""); - try { - const user = username(); - - if (user.length === 0) { - throw new Error("Username is empty"); - } - - const response = await backend.get(`/register?username=${user}`); - console.log(response.data); - } catch (_e) { - const e = _e as AxiosError<{error: string}>; - - if (e.response && e.response.data && e.response.data.error) { - setError(e.response.data.error); - } else { - setError(e.message); - } - } finally { - setLoading(false); - } - }; - return (

@@ -55,34 +26,10 @@ export function Index() {

Play:

-
registerUser(ev)}> - -
- setUsername(ev.target.value)} - /> -
- -
+
-

:D

-
- -

Error: {error()}

+

:D (user registered)


@@ -112,3 +59,68 @@ export function Index() {

); } + +function UserRegistration(props: {setUserInfo: (u: UserInfo) => void}) { + const [loading, setLoading] = createSignal(false); + const [error, setError] = createSignal(""); + const [username, setUsername] = createSignal(""); + + // Register a user in the backend, get their user_id, store it in localStorage. + const registerUser = async(ev: Event) => { + ev.preventDefault(); + + setLoading(true); + setError(""); + try { + const user = username(); + + if (user.length === 0) { + throw new Error("Username is empty"); + } + + const response = await backend.get(`/register?username=${user}`); + props.setUserInfo(response.data); + localStorage.setItem(userIdKey, response.data.UserId); + localStorage.setItem(usernameKey, response.data.Username); + } catch (_e) { + const e = _e as AxiosError<{error: string}>; + + if (e.response && e.response.data && e.response.data.error) { + setError(e.response.data.error); + } else { + setError(e.message); + } + } finally { + setLoading(false); + } + }; + + return ( +
registerUser(ev)}> + +
+ setUsername(ev.target.value)} + /> +
+ + +

Error: {error()}

+
+
+ ); +} + diff --git a/src/utils.ts b/src/utils.ts index 0a846a3..ecd9c9f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,7 +5,7 @@ export const backend = axios.create({ }); export type UserInfo = { - useruiid: number, - username: string, + UserId: number, + Username: string, }