diff --git a/src/auth.rs b/src/auth.rs index 558bfe2..cea063b 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -87,6 +87,7 @@ pub async fn logout() -> Result<(), ServerFnError> { auth_session.logout().await .map_err(|e| ServerFnError::::ServerError(format!("Error getting auth session: {}", e)))?; + leptos_axum::redirect("/login"); Ok(()) } diff --git a/src/components/personal.rs b/src/components/personal.rs index 889a780..ce980df 100644 --- a/src/components/personal.rs +++ b/src/components/personal.rs @@ -1,6 +1,8 @@ use leptos::leptos_dom::*; use leptos::*; use leptos_icons::*; +use crate::auth::logout; +use crate::util::state::GlobalState; #[component] pub fn Personal() -> impl IntoView { @@ -14,18 +16,66 @@ pub fn Personal() -> impl IntoView { #[component] pub fn Profile() -> impl IntoView { let (dropdown_open, set_dropdown_open) = create_signal(false); - - let open_dropdown = move |_| { + let user = GlobalState::logged_in_user(); + + let open_dropdown = move |_| { set_dropdown_open.update(|value| *value = !*value); - log!("opened dropdown"); }; + + 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))}

+
+
+
- + }> + } + > + + + + +
} @@ -33,10 +83,33 @@ pub fn Profile() -> impl IntoView { #[component] pub fn DropDownNotLoggedIn() -> impl IntoView { view! { -