use leptos::leptos_dom::*; use leptos::*; use leptos_icons::*; use crate::auth::get_user; use crate::auth::logout; use crate::models::User; #[component] pub fn Personal() -> impl IntoView { view! {
} } #[component] pub fn Profile() -> impl IntoView { let (dropdown_open, set_dropdown_open) = create_signal(false); let logged_in = create_rw_signal(false); let user_signal = create_rw_signal(User::default()); 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 = user; }); } else { logged_in.set(false); } set_dropdown_open.update(|value| *value = !*value); }); }; view! {
} } #[component] pub fn DropDownNotLoggedIn() -> impl IntoView { view! { } } #[component] pub fn DropDownLoggedIn(user_signal: RwSignal, logged_in: RwSignal) -> impl IntoView { let logout = move |_| { spawn_local(async move { let result = logout().await; if let Err(err) = result { log!("Error logging out: {:?}", err); } else { log!("Logged out successfully"); user_signal.update(|value| *value = User::default()); logged_in.set(false); } }); }; view! { } }