diff --git a/src/components/personal.rs b/src/components/personal.rs index bce2901..9a68575 100644 --- a/src/components/personal.rs +++ b/src/components/personal.rs @@ -17,23 +17,11 @@ pub fn Personal() -> impl IntoView { #[component] pub fn Profile() -> impl IntoView { let (dropdown_open, set_dropdown_open) = create_signal(false); - let logged_in = create_rw_signal(false); - // user signal is an option because the user may not be logged in - let user_signal = create_rw_signal(None); + let user = create_local_resource(move || dropdown_open.get(), |_| async move { get_user().await }); + let logged_in = create_local_resource(move || dropdown_open.get(), |_| async move { get_user().await.is_ok() }); let open_dropdown = move |_| { - spawn_local(async move { - let user = get_user().await; - if let Ok(user) = user { - logged_in.set(true); - user_signal.update(|value| { - *value = Some(user); - }); - } else { - logged_in.set(false); - } - set_dropdown_open.update(|value| *value = !*value); - }); + set_dropdown_open.update(|value| *value = !*value); }; view! { @@ -43,11 +31,11 @@ pub fn Profile() -> impl IntoView { @@ -64,7 +52,7 @@ pub fn DropDownNotLoggedIn() -> impl IntoView { } } #[component] -pub fn DropDownLoggedIn(user_signal: RwSignal>, logged_in: RwSignal) -> impl IntoView { +pub fn DropDownLoggedIn(logged_in: Resource) -> impl IntoView { let logout = move |_| { spawn_local(async move { @@ -73,7 +61,6 @@ pub fn DropDownLoggedIn(user_signal: RwSignal>, logged_in: RwSignal log!("Error logging out: {:?}", err); } else { log!("Logged out successfully"); - user_signal.update(|value| *value = None); logged_in.set(false); } }); @@ -82,15 +69,6 @@ pub fn DropDownLoggedIn(user_signal: RwSignal>, logged_in: RwSignal view! { }