Add option to change volume
This commit is contained in:
		
							parent
							
								
									85670fe86e
								
							
						
					
					
						commit
						afc06d7dd5
					
				| 
						 | 
					@ -58,4 +58,7 @@ input {
 | 
				
			||||||
	&[type="number"] {
 | 
						&[type="number"] {
 | 
				
			||||||
		width: 2em;
 | 
							width: 2em;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						&.volume_input {
 | 
				
			||||||
 | 
							width: 4em;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,11 +9,13 @@ use crate::data::transfer::Transfer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize, Store)]
 | 
					#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize, Store)]
 | 
				
			||||||
#[store(storage = "session")]
 | 
					#[store(storage = "session")]
 | 
				
			||||||
 | 
					#[non_exhaustive]
 | 
				
			||||||
pub struct CurrentTransfer {
 | 
					pub struct CurrentTransfer {
 | 
				
			||||||
    pub transfer: Transfer,
 | 
					    pub transfer: Transfer,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Default, PartialEq, Clone, Serialize, Deserialize)]
 | 
					#[derive(Default, PartialEq, Clone, Serialize, Deserialize)]
 | 
				
			||||||
 | 
					#[non_exhaustive]
 | 
				
			||||||
pub struct MainState {
 | 
					pub struct MainState {
 | 
				
			||||||
    pub source_plates: Vec<PlateInstance>,
 | 
					    pub source_plates: Vec<PlateInstance>,
 | 
				
			||||||
    pub destination_plates: Vec<PlateInstance>,
 | 
					    pub destination_plates: Vec<PlateInstance>,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,6 +134,20 @@ pub fn TransferMenu() -> Html {
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let on_volume_change = {
 | 
				
			||||||
 | 
					        let ct_dispatch = ct_dispatch.clone();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        Callback::from(move |e: Event| {
 | 
				
			||||||
 | 
					            let input = e.target().expect("Event must have target")
 | 
				
			||||||
 | 
					                        .dyn_into::<HtmlInputElement>().ok().expect("Must have been emitted by input");
 | 
				
			||||||
 | 
					            if let Ok(num) = input.value().parse::<f32>() {
 | 
				
			||||||
 | 
					                ct_dispatch.reduce_mut(|state| {
 | 
				
			||||||
 | 
					                    state.transfer.volume = num;
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let new_transfer_button_callback = {
 | 
					    let new_transfer_button_callback = {
 | 
				
			||||||
        let main_dispatch = main_dispatch.clone();
 | 
					        let main_dispatch = main_dispatch.clone();
 | 
				
			||||||
        let main_state = main_state.clone();
 | 
					        let main_state = main_state.clone();
 | 
				
			||||||
| 
						 | 
					@ -267,6 +281,13 @@ pub fn TransferMenu() -> Html {
 | 
				
			||||||
            onchange={on_dest_interleave_y_change}
 | 
					            onchange={on_dest_interleave_y_change}
 | 
				
			||||||
            value={ct_state.transfer.transfer_region.interleave_dest.1.to_string()}/>
 | 
					            value={ct_state.transfer.transfer_region.interleave_dest.1.to_string()}/>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					            <label for="volume"><h3>{"Volume"}</h3></label>
 | 
				
			||||||
 | 
					            <input type="number" name="volume" class="volume_input"
 | 
				
			||||||
 | 
					            min="0" step="0.1"
 | 
				
			||||||
 | 
					            onchange={on_volume_change}
 | 
				
			||||||
 | 
					            value={ct_state.transfer.volume.to_string()}/>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <div id="controls">
 | 
					            <div id="controls">
 | 
				
			||||||
            <input type="button" name="new_transfer" onclick={new_transfer_button_callback}
 | 
					            <input type="button" name="new_transfer" onclick={new_transfer_button_callback}
 | 
				
			||||||
            value={"New"} />
 | 
					            value={"New"} />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,9 +16,9 @@ struct TransferRecord {
 | 
				
			||||||
    #[serde(rename = "Destination Well")]
 | 
					    #[serde(rename = "Destination Well")]
 | 
				
			||||||
    destination_well: String,
 | 
					    destination_well: String,
 | 
				
			||||||
    #[serde(rename = "Volume")]
 | 
					    #[serde(rename = "Volume")]
 | 
				
			||||||
    volume: f64,
 | 
					    volume: f32,
 | 
				
			||||||
    #[serde(rename = "Concentration")]
 | 
					    #[serde(rename = "Concentration")]
 | 
				
			||||||
    concentration: Option<f64>,
 | 
					    concentration: Option<f32>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn state_to_csv(state: &MainState) -> Result<String, Box<dyn Error>> {
 | 
					pub fn state_to_csv(state: &MainState) -> Result<String, Box<dyn Error>> {
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ fn transfer_to_records(
 | 
				
			||||||
                    source_well: format!("{}{}", num_to_letters(s_well.0).unwrap(), s_well.1),
 | 
					                    source_well: format!("{}{}", num_to_letters(s_well.0).unwrap(), s_well.1),
 | 
				
			||||||
                    destination_plate: dest_barcode.to_string(),
 | 
					                    destination_plate: dest_barcode.to_string(),
 | 
				
			||||||
                    destination_well: format!("{}{}", num_to_letters(d_well.0).unwrap(), d_well.1),
 | 
					                    destination_well: format!("{}{}", num_to_letters(d_well.0).unwrap(), d_well.1),
 | 
				
			||||||
                    volume: 2.5, // Default value since not yet implemented
 | 
					                    volume: tr.volume,
 | 
				
			||||||
                    concentration: None,
 | 
					                    concentration: None,
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,19 @@ use serde::Serialize;
 | 
				
			||||||
use uuid::Uuid;
 | 
					use uuid::Uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(PartialEq, Clone, Default, Debug, Serialize, Deserialize)]
 | 
					#[derive(PartialEq, Clone, Default, Debug, Serialize, Deserialize)]
 | 
				
			||||||
 | 
					#[non_exhaustive]
 | 
				
			||||||
pub struct Transfer {
 | 
					pub struct Transfer {
 | 
				
			||||||
    pub source_id: Uuid,
 | 
					    pub source_id: Uuid,
 | 
				
			||||||
    pub dest_id: Uuid,
 | 
					    pub dest_id: Uuid,
 | 
				
			||||||
    pub name: String,
 | 
					    pub name: String,
 | 
				
			||||||
    id: Uuid,
 | 
					    id: Uuid,
 | 
				
			||||||
    pub transfer_region: TransferRegion,
 | 
					    pub transfer_region: TransferRegion,
 | 
				
			||||||
 | 
					    #[serde(default = "default_volume")]
 | 
				
			||||||
 | 
					    pub volume: f32,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn default_volume() -> f32 {
 | 
				
			||||||
 | 
					    2.5f32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Transfer {
 | 
					impl Transfer {
 | 
				
			||||||
| 
						 | 
					@ -26,6 +33,7 @@ impl Transfer {
 | 
				
			||||||
            name,
 | 
					            name,
 | 
				
			||||||
            id: Uuid::new_v4(),
 | 
					            id: Uuid::new_v4(),
 | 
				
			||||||
            transfer_region: tr,
 | 
					            transfer_region: tr,
 | 
				
			||||||
 | 
					            volume: 2.5,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue