From caf10f10c1e4cc1ec1bcb7dd160a0913c246b889 Mon Sep 17 00:00:00 2001 From: Emilia Date: Fri, 9 Aug 2024 20:33:09 -0400 Subject: [PATCH] feature: Separate add plate button per type --- .../plate_edits_callbacks.rs | 22 +++------ plate-tool-web/src/components/main_window.rs | 8 ++-- .../src/components/new_plate_dialog.rs | 46 +++++++++++++++++-- plate-tool-web/src/components/tree.rs | 29 ++++++------ 4 files changed, 68 insertions(+), 37 deletions(-) diff --git a/plate-tool-web/src/components/callbacks/main_window_callbacks/plate_edits_callbacks.rs b/plate-tool-web/src/components/callbacks/main_window_callbacks/plate_edits_callbacks.rs index 2308193..3c962fc 100644 --- a/plate-tool-web/src/components/callbacks/main_window_callbacks/plate_edits_callbacks.rs +++ b/plate-tool-web/src/components/callbacks/main_window_callbacks/plate_edits_callbacks.rs @@ -1,35 +1,27 @@ #![allow(non_snake_case)] -use js_sys::Array; - -use wasm_bindgen::{prelude::*, JsCast, JsValue}; -use web_sys::{ - Blob, HtmlAnchorElement, HtmlDialogElement, HtmlElement, HtmlFormElement, HtmlInputElement, Url, -}; use yew::prelude::*; use yewdux::prelude::*; -use crate::components::states::{CurrentTransfer, MainState}; - -use crate::state_to_csv; +use crate::components::{new_plate_dialog::{NewPlateDialogType}, states::{CurrentTransfer, MainState}}; type NoParamsCallback = Box; pub fn new_plate_dialog_callback( - new_plate_dialog_is_open: UseStateHandle, + new_plate_dialog_is_open: UseStateHandle>, ) -> NoParamsCallback { let new_plate_dialog_is_open = new_plate_dialog_is_open.clone(); Box::new(move |_| { - new_plate_dialog_is_open.set(false); + new_plate_dialog_is_open.set(None); }) } pub fn open_new_plate_dialog_callback( - new_plate_dialog_is_open: UseStateHandle, -) -> NoParamsCallback { + new_plate_dialog_is_open: UseStateHandle> +) -> Box { let new_plate_dialog_is_open = new_plate_dialog_is_open.clone(); - Box::new(move |_| { - new_plate_dialog_is_open.set(true); + Box::new(move |dt| { + new_plate_dialog_is_open.set(Some(dt)); }) } diff --git a/plate-tool-web/src/components/main_window.rs b/plate-tool-web/src/components/main_window.rs index c16695a..3a5b376 100644 --- a/plate-tool-web/src/components/main_window.rs +++ b/plate-tool-web/src/components/main_window.rs @@ -2,7 +2,7 @@ use yew::prelude::*; use yewdux::prelude::*; -use crate::components::new_plate_dialog::NewPlateDialog; +use crate::components::new_plate_dialog::{NewPlateDialog, NewPlateDialogType}; use crate::components::plates::plate_container::PlateContainer; use crate::components::states::{CurrentTransfer, MainState}; use crate::components::transfer_menu::TransferMenu; @@ -53,7 +53,7 @@ pub fn MainWindow() -> Html { main_window_callbacks::change_csv_export_type_callback(main_dispatch) }; - let new_plate_dialog_is_open = use_state_eq(|| false); + let new_plate_dialog_is_open: UseStateHandle> = use_state_eq(|| None); let new_plate_dialog_callback = main_window_callbacks::new_plate_dialog_callback(new_plate_dialog_is_open.clone()); @@ -124,8 +124,8 @@ pub fn MainWindow() -> Html { - if {*new_plate_dialog_is_open} { - + if {new_plate_dialog_is_open.is_some()} { + } diff --git a/plate-tool-web/src/components/new_plate_dialog.rs b/plate-tool-web/src/components/new_plate_dialog.rs index f50c2d3..a04b3f9 100644 --- a/plate-tool-web/src/components/new_plate_dialog.rs +++ b/plate-tool-web/src/components/new_plate_dialog.rs @@ -10,6 +10,14 @@ use crate::components::callbacks::new_plate_dialog_callbacks; #[derive(PartialEq, Properties)] pub struct NewPlateDialogProps { pub close_callback: Callback<()>, + pub dialog_type: NewPlateDialogType, +} + +#[derive(PartialEq, Clone, Copy, Debug)] +pub enum NewPlateDialogType { + SourceOnly, + DestinationOnly, + Both, } #[function_component] @@ -43,9 +51,15 @@ pub fn NewPlateDialog(props: &NewPlateDialogProps) -> Html { ); } + let header_interior_text = match props.dialog_type { + NewPlateDialogType::Both => "", + NewPlateDialogType::SourceOnly => " source", + NewPlateDialogType::DestinationOnly => " destination", + }; + html! { -

{"Create a plate:"}

+

{format!("Create a{} plate:", header_interior_text)}

- - - - + { plate_type_selector(props.dialog_type) }
} } + +fn plate_type_selector(t: NewPlateDialogType) -> Html { + match t { + NewPlateDialogType::Both => { + html! { + <> + + + + + + } + }, + NewPlateDialogType::SourceOnly => { + html! { + + } + }, + NewPlateDialogType::DestinationOnly => { + html! { + + } + } + } +} diff --git a/plate-tool-web/src/components/tree.rs b/plate-tool-web/src/components/tree.rs index de055fe..434704d 100644 --- a/plate-tool-web/src/components/tree.rs +++ b/plate-tool-web/src/components/tree.rs @@ -7,12 +7,13 @@ use web_sys::{HtmlDialogElement, HtmlInputElement}; use yew::prelude::*; use yewdux::prelude::*; -use crate::components::callbacks::tree_callbacks; +use crate::components::callbacks::{main_window_callbacks, tree_callbacks}; +use crate::components::new_plate_dialog::NewPlateDialogType; use crate::components::states::{CurrentTransfer, MainState}; #[derive(PartialEq, Properties)] pub struct TreeProps { - pub open_new_plate_callback: Callback<()>, + pub open_new_plate_callback: Callback, } #[function_component] @@ -98,13 +99,23 @@ pub fn Tree(props: &TreeProps) -> Html { html! {
-

{"Source Plates:"}

+

{"Source Plates:"} + +

    {source_plates}
-

{"Destination Plates:"}

+

{"Destination Plates:"} + +

    {dest_plates}
@@ -120,14 +131,6 @@ pub fn Tree(props: &TreeProps) -> Html { delete_button_callback={plate_info_delete_callback}/> } -
- -
} } @@ -171,7 +174,7 @@ fn PlateInfoModal(props: &PlateInfoModalProps) -> Html { ]; let plate_format_options = plate_formats.iter().map(|v| { let selected = Some(v) == plate_format.as_ref(); - html!{ + html! { } });