diff --git a/src/components/main_window.rs b/src/components/main_window.rs index 260f04b..39d56cd 100644 --- a/src/components/main_window.rs +++ b/src/components/main_window.rs @@ -3,14 +3,32 @@ use yew::prelude::*; use super::plates::plate_container::PlateContainer; use super::tree::Tree; use super::transfer_menu::TransferMenu; +use super::new_plate_dialog::NewPlateDialog; #[function_component] pub fn MainWindow() -> Html { + let new_plate_dialog_is_open = use_state_eq(|| false); + let new_plate_dialog_callback = { + let new_plate_dialog_is_open = new_plate_dialog_is_open.clone(); + Callback::from(move |_| { + new_plate_dialog_is_open.set(false); + }) + }; + let open_new_plate_dialog_callback = { + let new_plate_dialog_is_open = new_plate_dialog_is_open.clone(); + Callback::from(move |_| { + new_plate_dialog_is_open.set(true); + }) + }; + html!{
- + + if {*new_plate_dialog_is_open} { + + }
} } diff --git a/src/components/mod.rs b/src/components/mod.rs index e7265a7..ed345c7 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -3,3 +3,4 @@ pub mod main_window; pub mod tree; pub mod transfer_menu; pub mod plates; +pub mod new_plate_dialog; diff --git a/src/components/new_plate_dialog.rs b/src/components/new_plate_dialog.rs new file mode 100644 index 0000000..ceb44d8 --- /dev/null +++ b/src/components/new_plate_dialog.rs @@ -0,0 +1,76 @@ +use yew::prelude::*; +use yewdux::prelude::*; + +use wasm_bindgen::JsCast; +use web_sys::{EventTarget, HtmlFormElement, FormData}; + +use crate::data::{plate_instances::PlateInstance, transfer::Transfer}; +use crate::data::plate::*; +use crate::components::states::MainState; + +#[derive(PartialEq, Properties)] +pub struct NewPlateDialogProps { + pub close_callback: Callback<()>, +} + +#[function_component] +pub fn NewPlateDialog(props: &NewPlateDialogProps) -> Html { + let (state, dispatch) = use_store::(); + + let new_plate_callback = { + let dispatch = dispatch.clone(); + let close_callback = props.close_callback.clone(); + Callback::from(move |e: SubmitEvent| { + e.prevent_default(); + close_callback.emit(()); + let target: Option = e.target(); + let form = target.and_then(|t| t.dyn_into::().ok()); + if let Some(form) = form { + if let Ok(form_data) = FormData::new_with_form(&form) { + let name = form_data.get("new_plate_name").as_string().unwrap(); + let format = match form_data.get("plate_format").as_string().unwrap().as_str() { + "384" => PlateFormat::W384, + "96" => PlateFormat::W96, + _ => PlateFormat::W6, + }; + let plate_type = match form_data.get("new_plate_type").as_string().unwrap().as_str() { + "src" => PlateType::Source, + "dest" => PlateType::Destination, + _ => PlateType::Source, + }; + dispatch.reduce_mut(|s| { + if plate_type == PlateType::Source { + s.add_source_plate(PlateInstance::new(PlateType::Source, format, name)) + } else { + s.add_dest_plate(PlateInstance::new(PlateType::Destination, format, name)) + } + }); + } + } + }) + }; + + html! { + +
+ + + + + + + +
+
+ } +} + +impl From<&PlateInstance> for String { + fn from(value: &PlateInstance) -> Self { + // Could have other formatting here + format!("{}, {}", value.name, value.plate.plate_format) + } +} diff --git a/src/components/tree.rs b/src/components/tree.rs index 95d4b4e..433ea2c 100644 --- a/src/components/tree.rs +++ b/src/components/tree.rs @@ -1,8 +1,5 @@ #![allow(non_snake_case)] -use std::fmt::format; -use wasm_bindgen::JsCast; -use web_sys::{EventTarget, HtmlFormElement, FormData}; use yew::prelude::*; use yewdux::prelude::*; @@ -10,8 +7,13 @@ use crate::data::{plate_instances::PlateInstance, transfer::Transfer}; use crate::data::plate::*; use crate::components::states::MainState; +#[derive(PartialEq, Properties)] +pub struct TreeProps { + pub open_new_plate_callback: Callback<()>, +} + #[function_component] -pub fn Tree() -> Html { +pub fn Tree(props: &TreeProps) -> Html { let (state, dispatch) = use_store::(); let source_plates = state.source_plates.iter() .map(|spi| { @@ -22,36 +24,6 @@ pub fn Tree() -> Html { html!{
  • {String::from(spi)}
  • } }).collect::(); - let new_plate_callback = { - let dispatch = dispatch.clone(); - Callback::from(move |e: SubmitEvent| { - e.prevent_default(); - let target: Option = e.target(); - let form = target.and_then(|t| t.dyn_into::().ok()); - if let Some(form) = form { - if let Ok(form_data) = FormData::new_with_form(&form) { - let name = form_data.get("new_plate_name").as_string().unwrap(); - let format = match form_data.get("plate_format").as_string().unwrap().as_str() { - "384" => PlateFormat::W384, - "96" => PlateFormat::W96, - _ => PlateFormat::W6, - }; - let plate_type = match form_data.get("new_plate_type").as_string().unwrap().as_str() { - "src" => PlateType::Source, - "dest" => PlateType::Destination, - _ => PlateType::Source, - }; - dispatch.reduce_mut(|s| { - if plate_type == PlateType::Source { - s.add_source_plate(PlateInstance::new(PlateType::Source, format, name)) - } else { - s.add_dest_plate(PlateInstance::new(PlateType::Destination, format, name)) - } - }); - } - } - }) - }; html! {
    @@ -73,28 +45,14 @@ pub fn Tree() -> Html {
    // Temporary -
    -
    - - - - - - - -
    +
    } } - -impl From<&PlateInstance> for String { - fn from(value: &PlateInstance) -> Self { - // Could have other formatting here - format!("{}, {}", value.name, value.plate.plate_format) - } -}