use gloo_net::http::Request;
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
/// 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 name = use_state(|| "".to_string());
{
let name = name.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 name_value = format!(
"{} {}",
dequote!(user_data["data"]["first_name"].to_string()),
dequote!(user_data["data"]["last_name"].to_string())
);
name.set(name_value);
}
_ => name.set("Unknown".to_string()),
}
});
|| ()
});
}
html! {
{ "You are logged in as: " }
{ &*name }
}
}
/// 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" }