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::playstatus::PlayStatus;
use crate::queue::Queue;
use leptos::*;
use leptos_meta::*;
use leptos_router::*;
use crate::pages::login::*;
use crate::pages::signup::*;
use crate::error_template::{AppError, ErrorTemplate};
use leptos::leptos_dom::*;
#[component]
pub fn App() -> impl IntoView {
@ -42,29 +42,48 @@ pub fn App() -> impl IntoView {
}
}
use crate::components::sidebar::*;
use crate::components::dashboard::*;
use crate::components::search::*;
use crate::components::personal::*;
use crate::components::search::*;
use crate::components::sidebar::*;
/// Renders the home page of your application.
#[component]
fn HomePage() -> impl IntoView {
use crate::auth::check_auth;
let play_status = PlayStatus::default();
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);
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! {
<div class="home-container">
<Sidebar setter=set_dashboard_open active=dashboard_open />
<Show
<Show
when=move || {dashboard_open() == true}
fallback=move || view! { <Search /> }
>
<Dashboard />
</Show>
<Personal />
<Personal logged_in=logged_in/>
<PlayBar status=play_status/>
<Queue status=play_status/>
</div>

View File

@ -2,17 +2,20 @@ use leptos::leptos_dom::*;
use leptos::*;
use leptos_icons::*;
use crate::auth::check_auth;
#[component]
pub fn Personal() -> impl IntoView {
pub fn Personal(logged_in: ReadSignal<bool>) -> impl IntoView {
view! {
<div class=" personal-container">
<Profile />
<Profile logged_in=logged_in/>
</div>
}
}
#[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 open_dropdown = move |_| {
@ -25,7 +28,13 @@ pub fn Profile() -> impl IntoView {
<Icon icon=icondata::CgProfile />
</div>
<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>
}