From 04733dc806a83563d189dd6b97fd9d51743c120a Mon Sep 17 00:00:00 2001 From: Franklin Date: Tue, 25 Apr 2023 07:44:20 -0400 Subject: [PATCH] Made unit deletion work --- src/api/backend/mod.rs | 3 +++ src/components/admin_project.rs | 8 ++++---- src/components/admin_unit.rs | 23 ++++++++++++++++++++--- src/pages/admin/edit.rs | 2 +- src/pages/admin/projects.rs | 2 +- src/pages/admin/units.rs | 21 ++++++++++++++++++--- 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/api/backend/mod.rs b/src/api/backend/mod.rs index 2011b2f..aef413f 100644 --- a/src/api/backend/mod.rs +++ b/src/api/backend/mod.rs @@ -119,6 +119,7 @@ pub async fn get_all_page_visits_count() -> Result { ) .await } + pub async fn get_all_contacts_count() -> Result { perform_request_without_client::( BASE_URL.into(), @@ -131,6 +132,7 @@ pub async fn get_all_contacts_count() -> Result { ) .await } + pub async fn get_all_contacts() -> Result, err::Error> { perform_request_without_client::>( BASE_URL.into(), @@ -143,6 +145,7 @@ pub async fn get_all_contacts() -> Result, err::Error> { ) .await } + pub async fn create_new_contact_request(contact: ContactPayload) -> Result<(), err::Error> { perform_request_without_client( BASE_URL.into(), diff --git a/src/components/admin_project.rs b/src/components/admin_project.rs index f6814f7..53c49c1 100644 --- a/src/components/admin_project.rs +++ b/src/components/admin_project.rs @@ -16,16 +16,16 @@ pub fn admin_project(props: &AdminProjectProps) -> Html { let delete_project = { let is_attempting_delete = is_attempting_delete.clone(); let project_id = props.project.id.clone(); - let force_update_handle = props.forceupdate.clone(); + let deletecb = props.deletecb.clone(); let index = props.index; Callback::from(move |event: MouseEvent| { if *is_attempting_delete { let project_id = project_id.clone(); - let force_update_handle = force_update_handle.clone(); + let deletecb = deletecb.clone(); let index = index.clone(); wasm_bindgen_futures::spawn_local(async move { match delete_project(&project_id).await { - Ok(_) => force_update_handle.emit(index), + Ok(_) => deletecb.emit(index), Err(error) => { log::error!("Error deleting project: {error}") } @@ -82,5 +82,5 @@ pub fn admin_project(props: &AdminProjectProps) -> Html { pub struct AdminProjectProps { pub project: ProjectCardDto, pub index: usize, - pub forceupdate: Callback, + pub deletecb: Callback, } diff --git a/src/components/admin_unit.rs b/src/components/admin_unit.rs index b58342b..08a516b 100644 --- a/src/components/admin_unit.rs +++ b/src/components/admin_unit.rs @@ -5,12 +5,13 @@ use yew_router::prelude::use_navigator; use crate::{ pages::admin::edit::{EditItem, EditType}, - routes::main_router::Route, + routes::main_router::Route, api::backend::delete_unit, }; #[function_component(AdminUnit)] -pub fn admin_project(props: &AdminUnitProps) -> Html { +pub fn admin_unit(props: &AdminUnitProps) -> Html { let navigator = use_navigator().unwrap(); + let is_attempting_delete = use_state(|| false); let price_usd = format!("${}", { let price_separated = props.unit.price_usd.separate_with_commas(); if price_separated.contains(".") { @@ -19,12 +20,27 @@ pub fn admin_project(props: &AdminUnitProps) -> Html { format!("{price_separated}.00") } }); - let is_attempting_delete = use_state(|| false); + let delete_unit = { let is_attempting_delete = is_attempting_delete.clone(); + let deletecb = props.deletecb.clone(); + let index = props.index.clone(); + let unit_id = props.unit.id.clone(); Callback::from(move |event: MouseEvent| { if *is_attempting_delete { // Call delete + let is_attempting_delete = is_attempting_delete.clone(); + let deletecb = deletecb.clone(); + let index = index.clone(); + let unit_id = unit_id.clone(); + wasm_bindgen_futures::spawn_local(async move { + match delete_unit(&unit_id).await { + Ok(_) => deletecb.emit(index), + Err(error) => { + log::error!("Error deleting unit: {error}") + } + }; + }); is_attempting_delete.set(false); } else { is_attempting_delete.set(true); @@ -73,4 +89,5 @@ pub fn admin_project(props: &AdminUnitProps) -> Html { pub struct AdminUnitProps { pub unit: Unit, pub index: usize, + pub deletecb: Callback } diff --git a/src/pages/admin/edit.rs b/src/pages/admin/edit.rs index 8027967..d15f2bd 100644 --- a/src/pages/admin/edit.rs +++ b/src/pages/admin/edit.rs @@ -483,7 +483,7 @@ pub fn generate_fields_for_project(props: &ProjectFieldsProps) -> Html {
{"Actualizar"}
- + } } diff --git a/src/pages/admin/projects.rs b/src/pages/admin/projects.rs index f3c234b..ae26e9c 100644 --- a/src/pages/admin/projects.rs +++ b/src/pages/admin/projects.rs @@ -36,7 +36,7 @@ pub fn admin_projects() -> Html {
{(*projects).clone().into_iter().enumerate().map(|(key, project)| html! { <> - Html { + + let units_handle = props.units.clone(); html! {
{"Unidades"}
- {props.units.clone().into_iter().enumerate().map(|(key, unit)| html! { + {(*units_handle).clone().into_iter().enumerate().map(|(key, unit)| html! { <> - + cb.emit(String::new()), + None => {} + }; + let mut units = (*units_handle).clone(); + units.remove(index); + units_handle.set(units); + }) + }/>
}).collect::()} @@ -23,5 +37,6 @@ pub fn admin_units(props: &AdminUnitProps) -> Html { #[derive(PartialEq, Properties, Clone)] pub struct AdminUnitProps { - pub units: Vec, + pub units: UseStateHandle>, + pub onchange: Option>, }