Pages link to each other

This commit is contained in:
2026-05-02 10:41:11 +02:00
parent 6d8fcc6b53
commit 3d1366e704
3 changed files with 26 additions and 14 deletions

View File

@@ -1,6 +1,7 @@
use gloo_net::http::Request; use gloo_net::http::Request;
use wasm_bindgen_futures::spawn_local; use wasm_bindgen_futures::spawn_local;
use yew::prelude::*; use yew::prelude::*;
use yew_router::prelude::*;
#[component(Home)] #[component(Home)]
pub fn home_component() -> Html { pub fn home_component() -> Html {
@@ -31,7 +32,7 @@ pub fn home_component() -> Html {
match *is_admin { match *is_admin {
None => html! { <div>{ "Loading..." }</div> }, None => html! { <div>{ "Loading..." }</div> },
Some(true) => html! { <div>{ "You are admin" }</div> }, Some(true) => html! { <div>{ "You are admin" }</div> },
Some(false) => html! { <div>{ "You are a normal user" }</div> }, Some(false) => html! { <Redirect<crate::Route> to={crate::Route::Ticket}/> },
} }
} }

View File

@@ -5,6 +5,7 @@ use wasm_bindgen::JsCast;
use wasm_bindgen_futures::spawn_local; use wasm_bindgen_futures::spawn_local;
use web_sys::HtmlSelectElement; use web_sys::HtmlSelectElement;
use yew::prelude::*; use yew::prelude::*;
use yew_router::prelude::*;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct TicketCreateScheme { pub struct TicketCreateScheme {
@@ -155,6 +156,8 @@ pub fn submit_ticket_component() -> Html {
<br/> <br/>
<button type="submit">{ "Send" }</button> <button type="submit">{ "Send" }</button>
<Link<crate::Route> to={crate::Route::AllTickets}>{ "Tickets ansehen" }</Link<crate::Route>>
{ {
if let Some(s) = &*status { if let Some(s) = &*status {
html!{ <p>{ s }</p> } html!{ <p>{ s }</p> }
@@ -338,6 +341,8 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html {
<button onclick={ondelete} disabled={*deleting}> <button onclick={ondelete} disabled={*deleting}>
{if *deleting {"Löschen..."} else {"Löschen"}} {if *deleting {"Löschen..."} else {"Löschen"}}
</button> </button>
<Link<crate::Route> to={crate::Route::AllTickets}>{ "Zurück zur Ticketübersicht" }</Link<crate::Route>>
if let Some(err) = &*delete_error { if let Some(err) = &*delete_error {
<p style="color:red">{ err.clone() }</p> <p style="color:red">{ err.clone() }</p>
} }
@@ -428,8 +433,9 @@ pub fn all_tickets_component() -> Html {
html! { html! {
<ul> <ul>
{ for tickets.iter().filter(|t| if user.is_admin { true } else if let Some(uid) = user.id { t.user_id == uid } else { false }).map(|t| html! { { for tickets.iter().filter(|t| if user.is_admin { true } else if let Some(uid) = user.id { t.user_id == uid } else { false }).map(|t| html! {
<div>
<li key={t.id.to_string()}> <li key={t.id.to_string()}>
<h3>{ format!("{} - #{}", t.betreff, t.id) }</h3> <Link<crate::Route> to={crate::Route::TicketById{id: t.id}}><h3>{ format!("{} - #{}", t.betreff, t.id) }</h3></Link<crate::Route>>
<p>{ &t.description }</p> <p>{ &t.description }</p>
<p>{ match t.status.as_str() { <p>{ match t.status.as_str() {
"ToDo" => "Zu tun", "ToDo" => "Zu tun",
@@ -439,6 +445,9 @@ pub fn all_tickets_component() -> Html {
_ => "Ungültiger Status" _ => "Ungültiger Status"
}}</p> }}</p>
</li> </li>
<Link<crate::Route> to={crate::Route::Ticket}>{ "Zurück zur Startseite" }</Link<crate::Route>>
</div>
})} })}
</ul> </ul>
} }

View File

@@ -2,7 +2,7 @@ use gloo_net::http::Request;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use wasm_bindgen_futures::spawn_local; use wasm_bindgen_futures::spawn_local;
use yew::prelude::*; use yew::prelude::*;
use yew_router::prelude::use_navigator; use yew_router::prelude::*;
// #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] // #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
// pub struct User { // pub struct User {
@@ -298,7 +298,7 @@ pub fn all_users_component() -> Html {
<ul> <ul>
{ for users.iter().map(|t| html! { { for users.iter().map(|t| html! {
<li key={t.id.to_string()}> <li key={t.id.to_string()}>
<h3>{ format!("{} {}- #{}", t.first_name, t.last_name, t.id) }</h3> <Link<crate::Route> to={crate::Route::UserByID{id: t.id}}><h3>{ format!("{} {}- #{}", t.first_name, t.last_name, t.id) }</h3></Link<crate::Route>>
</li> </li>
})} })}
</ul> </ul>
@@ -576,6 +576,8 @@ pub fn user_by_id_component(props: &UserProps) -> Html {
<button onclick={ondelete} disabled={*deleting}> <button onclick={ondelete} disabled={*deleting}>
{if *deleting {"Löschen..."} else {"Löschen"}} {if *deleting {"Löschen..."} else {"Löschen"}}
</button> </button>
<Link<crate::Route> to={crate::Route::AllUsers}>{ "Zurück zur Benutzerübersicht" }</Link<crate::Route>>
if let Some(err) = &*delete_error { if let Some(err) = &*delete_error {
<p style="color:red">{ err.clone() }</p> <p style="color:red">{ err.clone() }</p>
} }