add user session check to profile icon

This commit is contained in:
Danny Zou 2024-04-12 19:10:45 -04:00
parent 6c74220458
commit 8556aa21ff
2 changed files with 41 additions and 13 deletions

View File

@ -1,13 +1,13 @@
use crate::error_template::{AppError, ErrorTemplate};
use crate::pages::login::*;
use crate::pages::signup::*;
use crate::playbar::PlayBar; use crate::playbar::PlayBar;
use crate::playstatus::PlayStatus; use crate::playstatus::PlayStatus;
use crate::queue::Queue; use crate::queue::Queue;
use leptos::*; use leptos::*;
use leptos_meta::*; use leptos_meta::*;
use leptos_router::*; use leptos_router::*;
use crate::pages::login::*; use leptos::leptos_dom::*;
use crate::pages::signup::*;
use crate::error_template::{AppError, ErrorTemplate};
#[component] #[component]
pub fn App() -> impl IntoView { pub fn App() -> impl IntoView {
@ -42,19 +42,38 @@ pub fn App() -> impl IntoView {
} }
} }
use crate::components::sidebar::*;
use crate::components::dashboard::*; use crate::components::dashboard::*;
use crate::components::search::*;
use crate::components::personal::*; use crate::components::personal::*;
use crate::components::search::*;
use crate::components::sidebar::*;
/// Renders the home page of your application. /// Renders the home page of your application.
#[component] #[component]
fn HomePage() -> impl IntoView { fn HomePage() -> impl IntoView {
use crate::auth::check_auth;
let play_status = PlayStatus::default(); let play_status = PlayStatus::default();
let play_status = create_rw_signal(play_status); let play_status = create_rw_signal(play_status);
let (logged_in, set_logged_in) = create_signal(false);
let (dashboard_open, set_dashboard_open) = create_signal(true); let (dashboard_open, set_dashboard_open) = create_signal(true);
create_effect(move |_| {
spawn_local(async move {
let auth_result = check_auth().await;
if let Err(err) = auth_result {
log!("Error checking auth: {:?}", err);
} else if let Ok(true) = auth_result {
log!("User is logged in");
set_logged_in.update(|value| *value = true);
} else if let Ok(false) = auth_result {
log!("User is not logged in");
set_logged_in.update(|value| *value = false);
}
});
});
view! { view! {
<div class="home-container"> <div class="home-container">
<Sidebar setter=set_dashboard_open active=dashboard_open /> <Sidebar setter=set_dashboard_open active=dashboard_open />
@ -64,7 +83,7 @@ fn HomePage() -> impl IntoView {
> >
<Dashboard /> <Dashboard />
</Show> </Show>
<Personal /> <Personal logged_in=logged_in/>
<PlayBar status=play_status/> <PlayBar status=play_status/>
<Queue status=play_status/> <Queue status=play_status/>
</div> </div>

View File

@ -2,17 +2,20 @@ use leptos::leptos_dom::*;
use leptos::*; use leptos::*;
use leptos_icons::*; use leptos_icons::*;
use crate::auth::check_auth;
#[component] #[component]
pub fn Personal() -> impl IntoView { pub fn Personal(logged_in: ReadSignal<bool>) -> impl IntoView {
view! { view! {
<div class=" personal-container"> <div class=" personal-container">
<Profile /> <Profile logged_in=logged_in/>
</div> </div>
} }
} }
#[component] #[component]
pub fn Profile() -> impl IntoView { pub fn Profile(logged_in: ReadSignal<bool>) -> impl IntoView {
let (dropdown_open, set_dropdown_open) = create_signal(false); let (dropdown_open, set_dropdown_open) = create_signal(false);
let open_dropdown = move |_| { let open_dropdown = move |_| {
@ -25,7 +28,13 @@ pub fn Profile() -> impl IntoView {
<Icon icon=icondata::CgProfile /> <Icon icon=icondata::CgProfile />
</div> </div>
<div class="dropdown-container" style={move || if dropdown_open() {"display: flex"} else {"display: none"}}> <div class="dropdown-container" style={move || if dropdown_open() {"display: flex"} else {"display: none"}}>
<DropDownNotLoggedIn /> <Show
when=move || {logged_in() == true}
fallback=move || view!{<DropDownNotLoggedIn />}
>
<h1>Hello</h1>
</Show>
</div> </div>
</div> </div>
} }