cloudflare_dns/tasks/
delete_task.rs1use iocraft::prelude::*;
3use std::sync::Arc;
4
5use crate::api::CloudflareClient;
6use crate::ui::state::{AppState, AppView};
7use crate::utils::{extract_unique_ips, format_records};
8
9pub struct DeleteParams {
11 pub client: Arc<CloudflareClient>,
12 pub state: Arc<AppState>,
13 pub record_id: String,
14 pub record_name: String,
15 pub record_type: String,
16 pub view: State<AppView>,
17 pub is_deleting: State<bool>,
18 pub status: State<String>,
19 pub records_display: State<String>,
20}
21
22pub async fn delete_task(mut params: DeleteParams) {
24 match params.client.delete_dns_record(¶ms.record_id).await {
25 Ok(_) => {
26 params.state.dns_cache.lock().unwrap().invalidate();
28
29 params.status.set(format!(
30 "Deleted {} ({})",
31 params.record_name, params.record_type
32 ));
33 params.view.set(AppView::List);
34 params.is_deleting.set(false);
35
36 if let Ok(f) = params.client.list_dns_records().await {
37 params.records_display.set(format_records(&f));
38 *params.state.existing_ips.lock().unwrap() = extract_unique_ips(&f);
39 *params.state.records.lock().unwrap() = f.clone();
40 params.state.dns_cache.lock().unwrap().set(f);
41 } else {
42 params.status.set(format!(
43 "Deleted {} ({}), but refresh failed — press R to reload",
44 params.record_name, params.record_type
45 ));
46 }
47 }
48 Err(e) => {
49 params.status.set(format!("Failed: {}", e));
50 params.is_deleting.set(false);
51 }
52 }
53}