From ede248d96135e2d1e8b2c06e994e38373d99aed5 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sat, 23 Nov 2024 00:57:29 -0500 Subject: [PATCH] Add loading and error messages to signup page --- src/pages/signup.rs | 18 +++++++++++++++++- style/signup.scss | 14 ++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/pages/signup.rs b/src/pages/signup.rs index 69fe77d..0d70d3f 100644 --- a/src/pages/signup.rs +++ b/src/pages/signup.rs @@ -4,6 +4,7 @@ use crate::util::state::GlobalState; use leptos::leptos_dom::*; use leptos::*; use leptos_icons::*; +use crate::components::loading::Loading; #[component] pub fn Signup() -> impl IntoView { @@ -13,6 +14,9 @@ pub fn Signup() -> impl IntoView { let (show_password, set_show_password) = create_signal(false); + let loading = create_rw_signal(false); + let error_msg = create_rw_signal(None); + let toggle_password = move |_| { set_show_password.update(|show_password| *show_password = !*show_password); log!("showing password"); @@ -30,12 +34,16 @@ pub fn Signup() -> impl IntoView { }; log!("new user: {:?}", new_user); + loading.set(true); + error_msg.set(None); + let user = GlobalState::logged_in_user(); spawn_local(async move { if let Err(err) = signup(new_user.clone()).await { // Handle the error here, e.g., log it or display to the user log!("Error signing up: {:?}", err); + error_msg.set(Some(err.to_string())); // Since we're not sure what the state is, manually refetch the user user.refetch(); @@ -49,6 +57,8 @@ pub fn Signup() -> impl IntoView { leptos_router::use_navigate()("/", Default::default()); log!("Navigated to home page after signup") } + + loading.set(false); }); }; @@ -99,7 +109,13 @@ pub fn Signup() -> impl IntoView { - +
{ move || error_msg.get() }
+ } + > + + Already Have an Account? Go to Login diff --git a/style/signup.scss b/style/signup.scss index 30f87dc..9a82cbc 100644 --- a/style/signup.scss +++ b/style/signup.scss @@ -17,7 +17,7 @@ top: 50%; left: 50%; width: 27rem; - height: 35rem; + height: 36rem; transform: translate(-50%, -50%); background: $auth-containers; z-index: 1; @@ -92,7 +92,17 @@ .signup-form .input-box input:focus ~ i { height: 2.6rem; } - +.signup-form .error-msg { + color: $error-color; + margin-top: 1rem; + height: 1rem; +} +.signup-form .loading { + margin-top: 4.5rem; + margin-left: auto; + margin-right: auto; + margin-bottom: calc(1.5rem - 10px); +} .signup-form input[type="submit"] { margin-top: 3.5rem; width: 100%;