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

View File

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