use gloo_net::http::Request; use wasm_bindgen_futures::spawn_local; use yew::prelude::*; use yew_router::prelude::*; /// The main home page component of the application. /// /// This component displays different content based on whether the logged-in user /// is an administrator. It fetches the user's admin status from the /// `/api/users/current` endpoint upon initialization. /// /// # Behavior /// - **Loading**: Displays "Loading..." while fetching user data. /// - **Admin User**: Renders the `TicketCount` utility component. /// - **Non-Admin User**: Renders the `TicketCount` utility component. /// /// # Example /// ```rust /// html! { /// /// } /// ``` #[component(Home)] pub fn home_component() -> Html { let is_admin = use_state(|| None::); { let is_admin = is_admin.clone(); use_effect_with((), move |_| { spawn_local(async move { let response = Request::get("/api/users/current") .credentials(web_sys::RequestCredentials::Include) .send() .await; 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); } _ => is_admin.set(Some(false)), } }); || () }); } match *is_admin { None => html! {
{ "Loading..." }
}, Some(true) => html! {
}, Some(false) => html! {
}, } } /// A basic component displayed when a requested route does not match any defined paths (404 error). /// /// It provides a simple message indicating that the page was not found and includes /// a link to navigate back to the home page. /// /// # Example /// ```rust /// html! { /// /// } /// ``` #[component(NotFound)] pub fn not_found_component() -> Html { let message = "404 Not found"; html! {

{&message}

to={crate::Route::Home}>{ "Zurück zum Start" }>
} } /// A component displayed when a user attempts to access a page for which they do not have sufficient permissions. /// /// It informs the user about the access restriction and provides instructions to contact /// a specific person ("Herr Winter") if they believe this is an error. /// It also includes a link to return to the home page. /// /// # Example /// ```rust /// html! { /// /// } /// ``` #[component(PermissionDenied)] pub fn denied_component() -> Html { html! {

{ "Sie haben nicht die benötigten Rechte um diese Seite aufzurufen" }

{ "Wenn sie denken, dass dies ein Fehler ist kontaktieren sie Herrn Winter" }

to={crate::Route::Home}>{ "Zurück zum Start" }>
} }