use leptos::leptos_dom::*; use leptos::*; use leptos_icons::*; use crate::auth::get_user; use crate::auth::logout; #[component] pub fn Personal() -> impl IntoView { view! {
} } #[component] pub fn Profile() -> impl IntoView { let (dropdown_open, set_dropdown_open) = create_signal(false); 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 |_| { set_dropdown_open.update(|value| *value = !*value); }; let user_profile_picture = move || { user.get().map(|user| { if let Ok(user) = user { return format!("/assets/images/profile/{}.webp", user.id.unwrap()); } else { return "".to_string(); } }) }; view! {
}>
} } #[component] pub fn DropDownNotLoggedIn() -> impl IntoView { view! { } } #[component] pub fn DropDownLoggedIn(logged_in: Resource) -> 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"); logged_in.set(false); } }); }; view! { } }