Deleting users now possible
This commit is contained in:
@@ -442,6 +442,55 @@ pub fn user_by_id_component(props: &UserProps) -> Html {
|
||||
})
|
||||
};
|
||||
|
||||
let deleting = use_state(|| false);
|
||||
let delete_error = use_state(|| None::<String>);
|
||||
|
||||
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! {<p>{ "Loading" }</p>}
|
||||
} else if let Some(e) = &*error {
|
||||
@@ -519,6 +568,13 @@ pub fn user_by_id_component(props: &UserProps) -> Html {
|
||||
<p style="color:red">{ err.clone() }</p>
|
||||
}
|
||||
</form>
|
||||
|
||||
<button onclick={ondelete} disabled={*deleting}>
|
||||
{if *deleting {"Löschen..."} else {"Löschen"}}
|
||||
</button>
|
||||
if let Some(err) = &*delete_error {
|
||||
<p style="color:red">{ err.clone() }</p>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user