Give plate components their instance

This commit is contained in:
Emilia Allison 2023-05-24 16:10:33 -04:00
parent 6e8c1eff55
commit 0414ddba3a
Signed by: emilia
GPG Key ID: 7A3F8997BFE894E0
4 changed files with 33 additions and 28 deletions

View File

@ -15,18 +15,12 @@ pub fn MainWindow() -> Html {
let (main_state, main_dispatch) = use_store::<MainState>();
let (selection_state, selection_dispatch) = use_store::<NewTransferState>();
let source_plate_instance = main_state.source_plates.iter()
.find(|spi| {spi.get_uuid() == selection_state.source_id});
let source_dims = match source_plate_instance {
Some(spi) => Some(spi.plate.size()),
None => None,
};
let destination_plate_instance = main_state.destination_plates.iter()
.find(|dpi| {dpi.get_uuid() == selection_state.destination_id});
let destination_dims = match destination_plate_instance {
Some(dpi) => Some(dpi.plate.size()),
None => None,
};
let source_plate_instance: Option<PlateInstance> = main_state.source_plates.iter()
.find(|spi| {spi.get_uuid() == selection_state.source_id})
.cloned();
let destination_plate_instance: Option<PlateInstance> = main_state.destination_plates.iter()
.find(|dpi| {dpi.get_uuid() == selection_state.destination_id})
.cloned();
let new_plate_dialog_is_open = use_state_eq(|| false);
let new_plate_dialog_callback = {
@ -46,7 +40,8 @@ pub fn MainWindow() -> Html {
<div class="main_container">
<Tree open_new_plate_callback={open_new_plate_dialog_callback}/>
<TransferMenu />
<PlateContainer source_dims={source_dims} destination_dims={destination_dims}/>
<PlateContainer source_dims={source_plate_instance}
destination_dims={destination_plate_instance}/>
if {*new_plate_dialog_is_open} {
<NewPlateDialog close_callback={new_plate_dialog_callback}/>
}

View File

@ -1,16 +1,16 @@
#![allow(non_snake_case)]
use yew::prelude::*;
use yewdux::prelude::*;
use std::intrinsics::discriminant_value;
use std::rc::Rc;
use crate::data::plate_instances::PlateInstance;
use super::super::states::NewTransferState;
use super::super::transfer_menu::RegionDisplay;
#[derive(Properties, PartialEq)]
pub struct DestinationPlateProps {
pub width: u8,
pub height: u8,
pub plate: PlateInstance,
}
#[function_component]
@ -80,8 +80,8 @@ pub fn DestinationPlate(props: &DestinationPlateProps) -> Html {
let mouseleave_callback = Callback::clone(&mouseup_callback);
let rows = (1..=props.height).map(|i| {
let row = (1..=props.width).map(|j| {
let rows = (1..=props.plate.plate.size().1).map(|i| {
let row = (1..=props.plate.plate.size().0).map(|j| {
html! {
<DestPlateCell i={i} j={j}
selected={super::source_plate::in_rect(*m_start.clone(), *m_end.clone(), (i,j))}

View File

@ -1,26 +1,34 @@
#![allow(non_snake_case)]
use yew::prelude::*;
use crate::data::plate_instances::PlateInstance;
use super::source_plate::SourcePlate;
use super::destination_plate::DestinationPlate;
#[derive(Properties, PartialEq)]
pub struct PlateContainerProps {
pub source_dims: Option<(u8,u8)>,
pub destination_dims: Option<(u8,u8)>,
pub source_dims: Option<PlateInstance>,
pub destination_dims: Option<PlateInstance>,
}
#[function_component]
pub fn PlateContainer(props: &PlateContainerProps) -> Html {
html! {
<div class="plate_container">
if let Some((w,h)) = props.source_dims {
<SourcePlate width={w} height={h} />
if let Some(spi) = props.source_dims.clone() {
<div>
<h2>{spi.name.clone()}</h2>
<SourcePlate plate={spi} />
</div>
} else {
<h2>{"No Source Plate Selected"}</h2>
}
if let Some((w,h)) = props.destination_dims {
<DestinationPlate width={w} height={h} />
if let Some(dpi) = props.destination_dims.clone() {
<div>
<h2>{dpi.name.clone()}</h2>
<DestinationPlate plate={dpi} />
</div>
} else {
<h2>{"No Destination Plate Selected"}</h2>
}

View File

@ -4,13 +4,15 @@ use yew::prelude::*;
use yewdux::prelude::*;
use std::rc::Rc;
use crate::data::plate_instances::PlateInstance;
use crate::data::transfer_region::TransferRegion;
use super::super::states::NewTransferState;
use super::super::transfer_menu::RegionDisplay;
#[derive(PartialEq, Properties)]
pub struct SourcePlateProps {
pub width: u8,
pub height: u8,
pub plate: PlateInstance,
}
#[function_component]
@ -79,8 +81,8 @@ pub fn SourcePlate(props: &SourcePlateProps) -> Html {
let mouseleave_callback = Callback::clone(&mouseup_callback);
let rows = (1..=props.height).map(|i| {
let row = (1..=props.width).map(|j| {
let rows = (1..=props.plate.plate.size().1).map(|i| {
let row = (1..=props.plate.plate.size().0).map(|j| {
html! {
<SourcePlateCell i={i} j={j}
selected={in_rect(*m_start.clone(), *m_end.clone(), (i,j))}