Dynamic sizing of plate cells
Calculates available size and allocates
This commit is contained in:
parent
4665788a27
commit
9275a866d0
|
@ -18,6 +18,7 @@ use super::super::transfer_menu::{num_to_letters, RegionDisplay};
|
||||||
pub struct DestinationPlateProps {
|
pub struct DestinationPlateProps {
|
||||||
pub source_plate: PlateInstance,
|
pub source_plate: PlateInstance,
|
||||||
pub destination_plate: PlateInstance,
|
pub destination_plate: PlateInstance,
|
||||||
|
pub cell_height: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
|
@ -112,6 +113,7 @@ pub fn DestinationPlate(props: &DestinationPlateProps) -> Html {
|
||||||
mouse={mouse_callback.clone()}
|
mouse={mouse_callback.clone()}
|
||||||
in_transfer={destination_wells.contains(&(i,j))}
|
in_transfer={destination_wells.contains(&(i,j))}
|
||||||
color={color_map.get(&(i,j)).copied()}
|
color={color_map.get(&(i,j)).copied()}
|
||||||
|
cell_height={props.cell_height}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
}).collect::<Html>();
|
}).collect::<Html>();
|
||||||
|
@ -152,6 +154,7 @@ pub struct DestPlateCellProps {
|
||||||
pub mouse: Callback<(u8, u8, MouseEventType)>,
|
pub mouse: Callback<(u8, u8, MouseEventType)>,
|
||||||
pub in_transfer: Option<bool>,
|
pub in_transfer: Option<bool>,
|
||||||
color: Option<u8>,
|
color: Option<u8>,
|
||||||
|
cell_height: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
|
@ -174,6 +177,7 @@ fn DestPlateCell(props: &DestPlateCellProps) -> Html {
|
||||||
|
|
||||||
html! {
|
html! {
|
||||||
<td class={classes!("plate_cell", selected_class, in_transfer_class)}
|
<td class={classes!("plate_cell", selected_class, in_transfer_class)}
|
||||||
|
style={format!("height: {}px;", props.cell_height)}
|
||||||
onmousedown={move |_| {
|
onmousedown={move |_| {
|
||||||
mouse.emit((i,j, MouseEventType::Mousedown))
|
mouse.emit((i,j, MouseEventType::Mousedown))
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
use wasm_bindgen::JsCast;
|
||||||
|
use wasm_bindgen::prelude::Closure;
|
||||||
use yew::prelude::*;
|
use yew::prelude::*;
|
||||||
|
|
||||||
use crate::data::plate_instances::PlateInstance;
|
use crate::data::plate_instances::PlateInstance;
|
||||||
|
@ -14,17 +16,35 @@ pub struct PlateContainerProps {
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
pub fn PlateContainer(props: &PlateContainerProps) -> Html {
|
pub fn PlateContainer(props: &PlateContainerProps) -> Html {
|
||||||
|
let height = web_sys::window().unwrap().inner_height().unwrap().as_f64().unwrap();
|
||||||
|
let cell_height = {
|
||||||
|
if let (Some(src_d), Some(dest_d)) = (&props.source_dims, &props.destination_dims) {
|
||||||
|
(0.78*height)/(src_d.plate.size().0 + dest_d.plate.size().0) as f64
|
||||||
|
} else {
|
||||||
|
1f64
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let resize_trigger = use_force_update();
|
||||||
|
let onresize = Closure::<dyn FnMut(_)>::new(move |_: Event| {
|
||||||
|
resize_trigger.force_update();
|
||||||
|
});
|
||||||
|
web_sys::window().unwrap().set_onresize(Some(onresize.as_ref().unchecked_ref()));
|
||||||
|
onresize.forget(); // Magic!
|
||||||
|
|
||||||
html! {
|
html! {
|
||||||
<div class="plate_container">
|
<div class="plate_container">
|
||||||
if let Some(spi) = props.source_dims.clone() {
|
if let Some(spi) = props.source_dims.clone() {
|
||||||
if let Some(dpi) = props.destination_dims.clone() {
|
if let Some(dpi) = props.destination_dims.clone() {
|
||||||
<div>
|
<div class="plate_container--source">
|
||||||
<h2>{spi.name.clone()}</h2>
|
<h2>{spi.name.clone()}</h2>
|
||||||
<SourcePlate source_plate={spi.clone()} destination_plate={dpi.clone()} />
|
<SourcePlate source_plate={spi.clone()} destination_plate={dpi.clone()}
|
||||||
|
cell_height={cell_height}/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="plate_container--destination">
|
||||||
<h2>{dpi.name.clone()}</h2>
|
<h2>{dpi.name.clone()}</h2>
|
||||||
<DestinationPlate source_plate={spi.clone()} destination_plate={dpi.clone()} />
|
<DestinationPlate source_plate={spi.clone()} destination_plate={dpi.clone()}
|
||||||
|
cell_height={cell_height}/>
|
||||||
</div>
|
</div>
|
||||||
} else {
|
} else {
|
||||||
<h2>{"No Destination Plate Selected"}</h2>
|
<h2>{"No Destination Plate Selected"}</h2>
|
||||||
|
|
|
@ -18,6 +18,7 @@ use super::super::transfer_menu::{num_to_letters, RegionDisplay};
|
||||||
pub struct SourcePlateProps {
|
pub struct SourcePlateProps {
|
||||||
pub source_plate: PlateInstance,
|
pub source_plate: PlateInstance,
|
||||||
pub destination_plate: PlateInstance,
|
pub destination_plate: PlateInstance,
|
||||||
|
pub cell_height: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[function_component]
|
#[function_component]
|
||||||
|
@ -114,6 +115,7 @@ pub fn SourcePlate(props: &SourcePlateProps) -> Html {
|
||||||
mouse={mouse_callback.clone()}
|
mouse={mouse_callback.clone()}
|
||||||
in_transfer={source_wells.contains(&(i,j))}
|
in_transfer={source_wells.contains(&(i,j))}
|
||||||
color={color_map.get(&(i,j)).copied()}
|
color={color_map.get(&(i,j)).copied()}
|
||||||
|
cell_height={props.cell_height}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -150,6 +152,7 @@ pub struct SourcePlateCellProps {
|
||||||
mouse: Callback<(u8, u8, MouseEventType)>,
|
mouse: Callback<(u8, u8, MouseEventType)>,
|
||||||
in_transfer: Option<bool>,
|
in_transfer: Option<bool>,
|
||||||
color: Option<u8>,
|
color: Option<u8>,
|
||||||
|
cell_height: f64,
|
||||||
}
|
}
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum MouseEventType {
|
pub enum MouseEventType {
|
||||||
|
@ -177,6 +180,7 @@ fn SourcePlateCell(props: &SourcePlateCellProps) -> Html {
|
||||||
|
|
||||||
html! {
|
html! {
|
||||||
<td class={classes!("plate_cell", selected_class, in_transfer_class)}
|
<td class={classes!("plate_cell", selected_class, in_transfer_class)}
|
||||||
|
style={format!("height: {}px;", props.cell_height)}
|
||||||
id={format!("color={:?}", props.color)}
|
id={format!("color={:?}", props.color)}
|
||||||
onmousedown={move |_| {
|
onmousedown={move |_| {
|
||||||
mouse.emit((i,j, MouseEventType::Mousedown))
|
mouse.emit((i,j, MouseEventType::Mousedown))
|
||||||
|
|
Loading…
Reference in New Issue