web: auto button

This commit is contained in:
Emilia Allison 2024-02-13 20:27:58 -05:00
parent 1aa4c1b7bb
commit c2a64d679a
Signed by: emilia
GPG Key ID: 05D5D1107E5100A1
2 changed files with 34 additions and 8 deletions

View File

@ -24,7 +24,7 @@ const W384_ROW_MAX: u8 = 16;
const W1536_COL_MAX: u8 = 48; const W1536_COL_MAX: u8 = 48;
const W1536_ROW_MAX: u8 = 32; const W1536_ROW_MAX: u8 = 32;
pub fn auto(records: &Vec<TransferRecord>) -> AutoOutput { pub fn auto(records: &[TransferRecord]) -> AutoOutput {
let unique_plates = find_unique_plates(records); let unique_plates = find_unique_plates(records);
let transfers = get_transfer_for_all_pairs(records, &unique_plates); let transfers = get_transfer_for_all_pairs(records, &unique_plates);

View File

@ -1,22 +1,19 @@
use std::collections::HashSet; use std::collections::HashSet;
use lazy_static::lazy_static;
use regex::Regex;
use wasm_bindgen::{prelude::*, JsCast}; use wasm_bindgen::{prelude::*, JsCast};
use web_sys::{ use web_sys::{
FileReader, HtmlButtonElement, HtmlDialogElement, HtmlFormElement, HtmlInputElement, FileReader, HtmlButtonElement, HtmlDialogElement, HtmlElement, HtmlFormElement,
HtmlOptionElement, HtmlSelectElement, HtmlInputElement, HtmlOptionElement, HtmlSelectElement,
}; };
use yew::prelude::*; use yew::prelude::*;
use yewdux::prelude::*; use yewdux::prelude::*;
use crate::components::states::MainState; use crate::components::states::MainState;
use plate_tool_lib::util::letters_to_num;
use plate_tool_lib::transfer::Transfer; use plate_tool_lib::transfer::Transfer;
use plate_tool_lib::transfer_region::{Region, TransferRegion}; use plate_tool_lib::transfer_region::{Region, TransferRegion};
use plate_tool_lib::csv::{TransferRecord, string_well_to_pt}; use plate_tool_lib::csv::{auto, string_well_to_pt, TransferRecord};
use super::main_window_callbacks::create_close_button; use super::main_window_callbacks::create_close_button;
@ -115,6 +112,17 @@ pub fn import_transfer_csv_onload_callback(
let window = web_sys::window().unwrap(); let window = web_sys::window().unwrap();
let document = window.document().unwrap(); let document = window.document().unwrap();
let auto_button = document
.create_element("button")
.unwrap()
.dyn_into::<HtmlElement>()
.unwrap();
auto_button.set_inner_text("Auto");
let auto_button_callback = auto_callback(main_dispatch.clone(), &records);
auto_button.set_onclick(Some(auto_button_callback.as_ref().unchecked_ref()));
auto_button_callback.forget();
let form = document let form = document
.create_element("form") .create_element("form")
.unwrap() .unwrap()
@ -211,6 +219,7 @@ pub fn import_transfer_csv_onload_callback(
form.append_child(&to_dest).unwrap(); form.append_child(&to_dest).unwrap();
modal.append_child(&submit).unwrap(); modal.append_child(&submit).unwrap();
modal.append_child(&form).unwrap(); modal.append_child(&form).unwrap();
modal.append_child(&auto_button).unwrap();
} }
}) })
} }
@ -236,7 +245,7 @@ pub fn import_transfer_csv_submit_callback(
.map(|record| { .map(|record| {
( (
string_well_to_pt(&record.source_well).unwrap(), string_well_to_pt(&record.source_well).unwrap(),
string_well_to_pt(&record.destination_well).unwrap() string_well_to_pt(&record.destination_well).unwrap(),
) )
}) })
.collect(); .collect();
@ -277,3 +286,20 @@ pub fn import_transfer_csv_submit_callback(
}); });
}) })
} }
fn auto_callback(
main_dispatch: Dispatch<MainState>,
records: &[TransferRecord],
) -> Closure<dyn FnMut(Event)> {
let records = Vec::from(records);
Closure::<dyn FnMut(_)>::new(move |_| {
let res = auto(&records);
main_dispatch.reduce_mut(|state| {
state.source_plates.extend(res.sources.into_iter());
state
.destination_plates
.extend(res.destinations.into_iter());
state.transfers.extend(res.transfers.into_iter());
});
})
}