use leptos::leptos_dom::*; use leptos::*; use leptos_icons::*; use crate::auth::logout; use crate::util::state::GlobalState; #[component] pub fn Personal() -> impl IntoView { view! {
} } #[component] pub fn Profile() -> impl IntoView { let (dropdown_open, set_dropdown_open) = create_signal(false); let user = GlobalState::logged_in_user(); let open_dropdown = move |_| { set_dropdown_open.update(|value| *value = !*value); }; let user_profile_picture = move || { user.get().and_then(|user| { if let Some(user) = user { if user.id.is_none() { return None; } Some(format!("/assets/images/profile/{}.webp", user.id.unwrap())) } else { None } }) }; view! {
Not Logged In }> Not Logged In }>

{move || user.get().map(|user| user.map(|user| user.username))}

}> } >
} } #[component] pub fn DropDownNotLoggedIn() -> impl IntoView { view! { } } #[component] pub fn DropDownLoggedIn() -> impl IntoView { let logout = move |_| { spawn_local(async move { let result = logout().await; if let Err(err) = result { log!("Error logging out: {:?}", err); } else { let user = GlobalState::logged_in_user(); user.refetch(); log!("Logged out successfully"); } }); }; view! { } }