108 lines
3.3 KiB
Rust
108 lines
3.3 KiB
Rust
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! {
|
|
/// <Home />
|
|
/// }
|
|
/// ```
|
|
#[component(Home)]
|
|
pub fn home_component() -> Html {
|
|
let is_admin = use_state(|| None::<bool>);
|
|
|
|
{
|
|
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! { <div>{ "Loading..." }</div> },
|
|
Some(true) => html! {
|
|
<div>
|
|
<crate::utilities::TicketCount/>
|
|
</div>
|
|
},
|
|
Some(false) => html! {
|
|
<div>
|
|
<crate::utilities::TicketCount/>
|
|
</div>
|
|
},
|
|
}
|
|
}
|
|
|
|
/// 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! {
|
|
/// <NotFound />
|
|
/// }
|
|
/// ```
|
|
#[component(NotFound)]
|
|
pub fn not_found_component() -> Html {
|
|
let message = "404 Not found";
|
|
html! {
|
|
<div>
|
|
<h1>{&message}</h1>
|
|
<Link<crate::Route> to={crate::Route::Home}>{ "Zurück zum Start" }</Link<crate::Route>>
|
|
</div>
|
|
}
|
|
}
|
|
|
|
/// 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! {
|
|
/// <PermissionDenied />
|
|
/// }
|
|
/// ```
|
|
#[component(PermissionDenied)]
|
|
pub fn denied_component() -> Html {
|
|
html! {
|
|
<div>
|
|
<h1>{ "Sie haben nicht die benötigten Rechte um diese Seite aufzurufen" }</h1>
|
|
<h3>{ "Wenn sie denken, dass dies ein Fehler ist kontaktieren sie Herrn Winter" }</h3>
|
|
<Link<crate::Route> to={crate::Route::Home}>{ "Zurück zum Start" }</Link<crate::Route>>
|
|
</div>
|
|
}
|
|
}
|