diff --git a/src/components/callbacks/mod.rs b/src/components/callbacks/mod.rs index dacd723..175182a 100644 --- a/src/components/callbacks/mod.rs +++ b/src/components/callbacks/mod.rs @@ -1,3 +1,4 @@ pub mod main_window_callbacks; pub mod new_plate_dialog_callbacks; pub mod transfer_menu_callbacks; +pub mod tree_callbacks; diff --git a/src/components/callbacks/tree_callbacks.rs b/src/components/callbacks/tree_callbacks.rs new file mode 100644 index 0000000..68db2e4 --- /dev/null +++ b/src/components/callbacks/tree_callbacks.rs @@ -0,0 +1,114 @@ +use std::rc::Rc; +use uuid::Uuid; +use wasm_bindgen::JsCast; +use web_sys::{EventTarget, HtmlElement}; +use yew::prelude::*; +use yewdux::prelude::*; + +use crate::components::states::{CurrentTransfer, MainState}; +use crate::data::transfer_region::Region; + +pub fn open_plate_info_callback( + plate_menu_id: UseStateHandle>, +) -> Callback { + Callback::from(move |e: MouseEvent| { + let target: Option = e.target(); + let li = target.and_then(|t| t.dyn_into::().ok()); + if let Some(li) = li { + if let Ok(id) = li.id().as_str().parse::() { + plate_menu_id.set(Some(Uuid::from_u128(id))); + } + } + }) +} + +pub fn plate_info_close_callback( + plate_menu_id: UseStateHandle>, +) -> Callback { + Callback::from(move |_| { + plate_menu_id.set(None); + }) +} + +pub fn plate_info_delete_callback( + main_dispatch: Dispatch, + plate_menu_id: UseStateHandle>, +) -> Callback { + Callback::from(move |_| { + if let Some(id) = *plate_menu_id { + main_dispatch.reduce_mut(|state| { + state.del_plate(id); + }); + } + }) +} + +pub fn source_plate_select_callback( + main_dispatch: Dispatch, + ct_dispatch: Dispatch, +) -> Callback { + Callback::from(move |e: MouseEvent| { + let target: Option = e.target(); + let li = target.and_then(|t| t.dyn_into::().ok()); + if let Some(li) = li { + if let Ok(id) = li.id().as_str().parse::() { + ct_dispatch.reduce_mut(|state| { + state.transfer.transfer_region.source_region = Region::default(); + state.transfer.transfer_region.dest_region = Region::default(); + }); + main_dispatch.reduce_mut(|state| { + state.selected_source_plate = Uuid::from_u128(id); + state.selected_transfer = Uuid::nil(); + }); + } + } + }) +} + +pub fn destination_plate_select_callback( + main_dispatch: Dispatch, + ct_dispatch: Dispatch, +) -> Callback { + Callback::from(move |e: MouseEvent| { + let target: Option = e.target(); + let li = target.and_then(|t| t.dyn_into::().ok()); + if let Some(li) = li { + if let Ok(id) = li.id().as_str().parse::() { + ct_dispatch.reduce_mut(|state| { + state.transfer.transfer_region.source_region = Region::default(); + state.transfer.transfer_region.dest_region = Region::default(); + }); + main_dispatch.reduce_mut(|state| { + state.selected_dest_plate = Uuid::from_u128(id); + state.selected_transfer = Uuid::nil(); + }); + } + } + }) +} + +pub fn transfer_select_callback(main_state: Rc) -> Callback { + Callback::from(move |e: MouseEvent| { + let target: Option = e.target(); + let li = target.and_then(|t| t.dyn_into::().ok()); + if let Some(li) = li { + if let Ok(id) = li.id().as_str().parse::() { + let id = Uuid::from_u128(id); + if let Some(transfer) = main_state + .transfers + .iter() + .find(|transfer| transfer.get_uuid() == id) + { + main_dispatch.reduce_mut(|state| { + state.selected_source_plate = transfer.source_id; + state.selected_dest_plate = transfer.dest_id; + state.selected_transfer = id; + }); + ct_dispatch.reduce_mut(|state| { + state.transfer = transfer.clone(); + }); + } + } + } + }) +} diff --git a/src/components/tree.rs b/src/components/tree.rs index fbe7b8a..90359c5 100644 --- a/src/components/tree.rs +++ b/src/components/tree.rs @@ -2,12 +2,12 @@ use uuid::Uuid; use wasm_bindgen::JsCast; -use web_sys::{EventTarget, HtmlDialogElement, HtmlElement, HtmlInputElement}; +use web_sys::{HtmlDialogElement, HtmlInputElement}; use yew::prelude::*; use yewdux::prelude::*; use crate::components::states::{CurrentTransfer, MainState}; -use crate::data::transfer_region::Region; +use crate::components::callbacks::tree_callbacks; #[derive(PartialEq, Properties)] pub struct TreeProps { @@ -22,102 +22,31 @@ pub fn Tree(props: &TreeProps) -> Html { let open_plate_info_callback = { let plate_menu_id = plate_modal_id.clone(); - Callback::from(move |e: MouseEvent| { - let target: Option = e.target(); - let li = target.and_then(|t| t.dyn_into::().ok()); - if let Some(li) = li { - if let Ok(id) = li.id().as_str().parse::() { - plate_menu_id.set(Some(Uuid::from_u128(id))); - } - } - }) + tree_callbacks::open_plate_info_callback(plate_menu_id) }; let plate_info_close_callback = { let plate_menu_id = plate_modal_id.clone(); - Callback::from(move |_| { - plate_menu_id.set(None); - }) + tree_callbacks::plate_info_close_callback(plate_menu_id) }; let plate_info_delete_callback = { - let dispatch = main_dispatch.clone(); + let main_dispatch = main_dispatch.clone(); let plate_menu_id = plate_modal_id.clone(); - Callback::from(move |_| { - if let Some(id) = *plate_menu_id { - dispatch.reduce_mut(|state| { - state.del_plate(id); - }); - } - }) + tree_callbacks::plate_info_delete_callback(main_dispatch, plate_menu_id) }; let source_plate_select_callback = { let main_dispatch = main_dispatch.clone(); let ct_dispatch = ct_dispatch.clone(); - - Callback::from(move |e: MouseEvent| { - let target: Option = e.target(); - let li = target.and_then(|t| t.dyn_into::().ok()); - if let Some(li) = li { - if let Ok(id) = li.id().as_str().parse::() { - ct_dispatch.reduce_mut(|state| { - state.transfer.transfer_region.source_region = Region::default(); - state.transfer.transfer_region.dest_region = Region::default(); - }); - main_dispatch.reduce_mut(|state| { - state.selected_source_plate = Uuid::from_u128(id); - state.selected_transfer = Uuid::nil(); - }); - } - } - }) + tree_callbacks::source_plate_select_callback(main_dispatch, ct_dispatch) }; let destination_plate_select_callback = { let main_dispatch = main_dispatch.clone(); let ct_dispatch = ct_dispatch.clone(); - - Callback::from(move |e: MouseEvent| { - let target: Option = e.target(); - let li = target.and_then(|t| t.dyn_into::().ok()); - if let Some(li) = li { - if let Ok(id) = li.id().as_str().parse::() { - ct_dispatch.reduce_mut(|state| { - state.transfer.transfer_region.source_region = Region::default(); - state.transfer.transfer_region.dest_region = Region::default(); - }); - main_dispatch.reduce_mut(|state| { - state.selected_dest_plate = Uuid::from_u128(id); - state.selected_transfer = Uuid::nil(); - }); - } - } - }) + tree_callbacks::destination_plate_select_callback(main_dispatch, ct_dispatch) }; let transfer_select_callback = { let main_state = main_state.clone(); - - Callback::from(move |e: MouseEvent| { - let target: Option = e.target(); - let li = target.and_then(|t| t.dyn_into::().ok()); - if let Some(li) = li { - if let Ok(id) = li.id().as_str().parse::() { - let id = Uuid::from_u128(id); - if let Some(transfer) = main_state - .transfers - .iter() - .find(|transfer| transfer.get_uuid() == id) - { - main_dispatch.reduce_mut(|state| { - state.selected_source_plate = transfer.source_id; - state.selected_dest_plate = transfer.dest_id; - state.selected_transfer = id; - }); - ct_dispatch.reduce_mut(|state| { - state.transfer = transfer.clone(); - }); - } - } - } - }) + tree_callbacks::transfer_select_callback(main_state) }; let source_plates = main_state