Home page and sidebar update

Home page now shows who is logged in and the sidebar has a button to
home
This commit is contained in:
2026-05-11 13:03:00 +02:00
parent 535d940857
commit d9ef5746a2
2 changed files with 24 additions and 18 deletions

View File

@@ -3,6 +3,12 @@ use wasm_bindgen_futures::spawn_local;
use yew::prelude::*; use yew::prelude::*;
use yew_router::prelude::*; use yew_router::prelude::*;
macro_rules! dequote {
($str:expr) => {
$str.trim_matches('"').to_string()
};
}
/// The main home page component of the application. /// The main home page component of the application.
/// ///
/// This component displays different content based on whether the logged-in user /// This component displays different content based on whether the logged-in user
@@ -22,10 +28,9 @@ use yew_router::prelude::*;
/// ``` /// ```
#[component(Home)] #[component(Home)]
pub fn home_component() -> Html { pub fn home_component() -> Html {
let is_admin = use_state(|| None::<bool>); let name = use_state(|| "".to_string());
{ {
let is_admin = is_admin.clone(); let name = name.clone();
use_effect_with((), move |_| { use_effect_with((), move |_| {
spawn_local(async move { spawn_local(async move {
let response = Request::get("/api/users/current") let response = Request::get("/api/users/current")
@@ -36,28 +41,27 @@ pub fn home_component() -> Html {
match response { match response {
Ok(resp) if resp.status() == 200 => { Ok(resp) if resp.status() == 200 => {
let user_data: serde_json::Value = resp.json().await.unwrap_or_default(); let user_data: serde_json::Value = resp.json().await.unwrap_or_default();
let admin_value = user_data["data"]["is_admin"].as_bool(); let name_value = format!(
is_admin.set(admin_value); "{} {}",
dequote!(user_data["data"]["first_name"].to_string()),
dequote!(user_data["data"]["last_name"].to_string())
);
name.set(name_value);
} }
_ => is_admin.set(Some(false)), _ => name.set("Unknown".to_string()),
} }
}); });
|| () || ()
}); });
} }
match *is_admin { html! {
None => html! { <div>{ "Loading..." }</div> },
Some(true) => html! {
<div> <div>
<crate::utilities::TicketCount/> <crate::utilities::TicketCount/>
<p>{ "You are logged in as: " }</p>
<p>{ &*name }</p>
</div> </div>
},
Some(false) => html! {
<div>
<crate::utilities::TicketCount/>
</div>
},
} }
} }

View File

@@ -381,6 +381,7 @@ pub fn sidebar() -> Html {
<SidebarStateProvider> <SidebarStateProvider>
<nav class="sidebar user"> <nav class="sidebar user">
<ul> <ul>
<Link<crate::Route> to={crate::Route::Home}>{ "󰟒" }</Link<crate::Route>>
<TicketMenu/> <TicketMenu/>
<li class="logout-item"> <li class="logout-item">
<button <button
@@ -400,6 +401,7 @@ pub fn sidebar() -> Html {
<SidebarStateProvider> <SidebarStateProvider>
<nav class="sidebar admin"> <nav class="sidebar admin">
<ul> <ul>
<Link<crate::Route> to={crate::Route::Home}>{ "󰟒" }</Link<crate::Route>>
<TicketMenu/> <TicketMenu/>
<UsersMenu/> <UsersMenu/>
<Link<crate::Route> to={crate::Route::Diagnostics}>{ "Statistiken" }</Link<crate::Route>> <Link<crate::Route> to={crate::Route::Diagnostics}>{ "Statistiken" }</Link<crate::Route>>