diff --git a/frontend/src/pages/user.rs b/frontend/src/pages/user.rs index 1f59e16..375e5b9 100644 --- a/frontend/src/pages/user.rs +++ b/frontend/src/pages/user.rs @@ -442,6 +442,55 @@ pub fn user_by_id_component(props: &UserProps) -> Html { }) }; + let deleting = use_state(|| false); + let delete_error = use_state(|| None::); + + let ondelete = { + let deleting = deleting.clone(); + let delete_error = delete_error.clone(); + let user_state = user.clone(); // or ticket + let id = id; + + Callback::from(move |e: MouseEvent| { + e.prevent_default(); + // confirm + if !web_sys::window() + .and_then(|w| { + w.confirm_with_message("Are you sure you want to delete this item?") + .ok() + }) + .unwrap_or(false) + { + return; + } + + deleting.set(true); + delete_error.set(None); + + let deleting = deleting.clone(); + let delete_error = delete_error.clone(); + let user_state = user_state.clone(); + + spawn_local(async move { + let url = format!("/api/users/{}", id); // or /api/tickets/{} + let req = Request::delete(&url).credentials(web_sys::RequestCredentials::Include); + + match req.send().await { + Ok(resp) if resp.status() == 200 || resp.status() == 204 => { + // remove local state or navigate away + user_state.set(None); // clears the shown item + } + Ok(resp) => { + let txt = resp.text().await.unwrap_or_else(|_| "Unknown".into()); + delete_error.set(Some(format!("HTTP {}: {}", resp.status(), txt))); + } + Err(err) => delete_error.set(Some(format!("Network error: {}", err))), + } + deleting.set(false); + }); + }) + }; + if *loading { html! {

{ "Loading" }

} } else if let Some(e) = &*error { @@ -519,6 +568,13 @@ pub fn user_by_id_component(props: &UserProps) -> Html {

{ err.clone() }

} + + + if let Some(err) = &*delete_error { +

{ err.clone() }

+ } } } else {