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)
- }
-}