diff --git a/plate-tool-web/src/components/callbacks/tree_callbacks/info_dialog_callbacks.rs b/plate-tool-web/src/components/callbacks/tree_callbacks/info_dialog_callbacks.rs new file mode 100644 index 0000000..307a991 --- /dev/null +++ b/plate-tool-web/src/components/callbacks/tree_callbacks/info_dialog_callbacks.rs @@ -0,0 +1,74 @@ +use uuid::Uuid; +use wasm_bindgen::JsCast; +use web_sys::{EventTarget, HtmlElement, HtmlInputElement, HtmlOptionElement, HtmlSelectElement}; +use yew::prelude::*; +use yewdux::prelude::*; + +use crate::components::states::MainState; +use plate_tool_lib::plate::PlateFormat; + +type NoParamsCallback = Box; + +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>) -> NoParamsCallback { + Box::new(move |_| { + plate_menu_id.set(None); + }) +} + +pub fn plate_info_delete_callback( + main_dispatch: Dispatch, + plate_menu_id: UseStateHandle>, +) -> NoParamsCallback { + Box::new(move |_| { + if let Some(id) = *plate_menu_id { + main_dispatch.reduce_mut(|state| { + state.del_plate(id); + }); + } + }) +} + +pub fn rename_onchange(id: Uuid, main_dispatch: Dispatch) -> Callback { + Callback::from(move |e: Event| { + log::debug!("Changed name"); + let input = e + .target() + .expect("Event must have target") + .dyn_into::() + .unwrap(); + main_dispatch.reduce_mut(|state| state.rename_plate(id, &input.value())) + }) +} + +pub fn format_onchange(id: Uuid, main_dispatch: Dispatch) -> Callback { + Callback::from(move |e: Event| { + log::debug!("Changing plate format"); + let new_format: Option = e + .target() + .expect("Event must have target") + .dyn_into::() + .unwrap() + .selected_options() + .get_with_index(0) + .map(|el| el.dyn_into::().unwrap()) + .map(|opt_el| opt_el.value()) + .and_then(|value| PlateFormat::try_from(value.as_str()).ok()); + if let Some(format) = new_format { + main_dispatch.reduce_mut(|state| state.change_format(id, &format)); + } + }) +} diff --git a/plate-tool-web/src/components/callbacks/tree_callbacks/mod.rs b/plate-tool-web/src/components/callbacks/tree_callbacks/mod.rs new file mode 100644 index 0000000..7d60f88 --- /dev/null +++ b/plate-tool-web/src/components/callbacks/tree_callbacks/mod.rs @@ -0,0 +1,6 @@ +mod select_callbacks; +mod info_dialog_callbacks; + +pub use select_callbacks::*; + +pub use info_dialog_callbacks::*; diff --git a/plate-tool-web/src/components/callbacks/tree_callbacks.rs b/plate-tool-web/src/components/callbacks/tree_callbacks/select_callbacks.rs similarity index 54% rename from plate-tool-web/src/components/callbacks/tree_callbacks.rs rename to plate-tool-web/src/components/callbacks/tree_callbacks/select_callbacks.rs index f005fab..14540cb 100644 --- a/plate-tool-web/src/components/callbacks/tree_callbacks.rs +++ b/plate-tool-web/src/components/callbacks/tree_callbacks/select_callbacks.rs @@ -1,81 +1,12 @@ use std::rc::Rc; use uuid::Uuid; use wasm_bindgen::JsCast; -use web_sys::{EventTarget, HtmlElement, HtmlInputElement, HtmlSelectElement, HtmlOptionElement}; +use web_sys::{EventTarget, HtmlElement}; use yew::prelude::*; use yewdux::prelude::*; use crate::components::states::{CurrentTransfer, MainState}; -use plate_tool_lib::{transfer_region::Region, plate::PlateFormat}; - -type NoParamsCallback = Box; - -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>, -) -> NoParamsCallback { - Box::new(move |_| { - plate_menu_id.set(None); - }) -} - -pub fn plate_info_delete_callback( - main_dispatch: Dispatch, - plate_menu_id: UseStateHandle>, -) -> NoParamsCallback { - Box::new(move |_| { - if let Some(id) = *plate_menu_id { - main_dispatch.reduce_mut(|state| { - state.del_plate(id); - }); - } - }) -} - -pub fn rename_onchange(id: Uuid, main_dispatch: Dispatch) -> Callback { - Callback::from(move |e: Event| { - log::debug!("Changed name"); - let input = e - .target() - .expect("Event must have target") - .dyn_into::() - .unwrap(); - main_dispatch.reduce_mut(|state| state.rename_plate(id, &input.value())) - }) -} - -pub fn format_onchange(id: Uuid, main_dispatch: Dispatch) -> Callback { - Callback::from(move |e: Event| { - log::debug!("Changing plate format"); - let new_format: Option = e.target() - .expect("Event must have target") - .dyn_into::() - .unwrap() - .selected_options() - .get_with_index(0) - .map(|el| { - el.dyn_into::().unwrap() - }) - .map(|opt_el| opt_el.value()) - .and_then(|value| PlateFormat::try_from(value.as_str()).ok()); - if let Some(format) = new_format { - main_dispatch.reduce_mut(|state| state.change_format(id, &format)); - } - }) -} +use plate_tool_lib::transfer_region::Region; pub fn source_plate_select_callback( main_dispatch: Dispatch, @@ -121,7 +52,11 @@ pub fn destination_plate_select_callback( }) } -pub fn transfer_select_callback(main_state: Rc, main_dispatch: Dispatch, ct_dispatch: Dispatch) -> Callback { +pub fn transfer_select_callback( + main_state: Rc, + 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());