Deleting tickets now possible
This commit is contained in:
@@ -16,8 +16,8 @@ serde = { version = "1.0.228", features = ["derive"] }
|
|||||||
wasm-bindgen = "0.2.118"
|
wasm-bindgen = "0.2.118"
|
||||||
wasm-bindgen-futures = "0.4.68"
|
wasm-bindgen-futures = "0.4.68"
|
||||||
web-sys = { version = "0.3.95", features = [
|
web-sys = { version = "0.3.95", features = [
|
||||||
"Window","Document","Request","Response","Headers", "HtmlSelectElement",
|
"Window","Document","Request","Response","Headers", "HtmlSelectElement", "RequestCredentials",
|
||||||
"SubmitEvent","InputEvent","HtmlInputElement","Event", "HtmlFormElement"
|
"SubmitEvent","InputEvent","HtmlInputElement","Event", "HtmlFormElement", "MouseEvent"
|
||||||
] }
|
] }
|
||||||
gloo-net = "0.7.0"
|
gloo-net = "0.7.0"
|
||||||
yew-router = "0.20.0"
|
yew-router = "0.20.0"
|
||||||
|
|||||||
@@ -242,6 +242,52 @@ pub fn ticket_by_id_component(props: &TicketProps) -> 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 ticket_state = ticket.clone();
|
||||||
|
let id = id;
|
||||||
|
|
||||||
|
Callback::from(move |e: MouseEvent| {
|
||||||
|
e.prevent_default();
|
||||||
|
if !web_sys::window()
|
||||||
|
.and_then(|w| w.confirm_with_message("Sicher löschen?").ok())
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
deleting.set(true);
|
||||||
|
delete_error.set(None);
|
||||||
|
|
||||||
|
let deleting = deleting.clone();
|
||||||
|
let delete_error = delete_error.clone();
|
||||||
|
let ticket_state = ticket_state.clone();
|
||||||
|
|
||||||
|
spawn_local(async move {
|
||||||
|
let url = format!("/api/tickets/{}", id);
|
||||||
|
let request =
|
||||||
|
Request::delete(&url).credentials(web_sys::RequestCredentials::Include);
|
||||||
|
|
||||||
|
match request.send().await {
|
||||||
|
Ok(resp) if resp.status() == 200 || resp.status() == 204 => {
|
||||||
|
// remove local state or navigate away
|
||||||
|
ticket_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 {
|
if *loading {
|
||||||
html! {<p>{ "Loading" }</p>}
|
html! {<p>{ "Loading" }</p>}
|
||||||
} else if let Some(e) = &*error {
|
} else if let Some(e) = &*error {
|
||||||
@@ -274,6 +320,13 @@ pub fn ticket_by_id_component(props: &TicketProps) -> Html {
|
|||||||
</label>
|
</label>
|
||||||
<button type="submit">{ "Aktualisieren" }</button>
|
<button type="submit">{ "Aktualisieren" }</button>
|
||||||
</form>
|
</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>
|
</div>
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user