Echo client export now available
This commit is contained in:
parent
d99c03d441
commit
a05c62cd9b
|
|
@ -2,7 +2,9 @@ use std::ops::DerefMut;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use eframe::egui::{self};
|
use eframe::egui::{self};
|
||||||
use plate_tool_lib::csv::{TransferRecord, records_to_csv, transfer_to_records};
|
use plate_tool_lib::csv::{
|
||||||
|
records_to_csv, records_to_echo_client_csv, transfer_to_records, TransferRecord,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::file_handling::save_file;
|
use crate::file_handling::save_file;
|
||||||
use crate::main_state::{construct_fake_mainstate, MainState};
|
use crate::main_state::{construct_fake_mainstate, MainState};
|
||||||
|
|
@ -16,6 +18,7 @@ use crate::tree::tree;
|
||||||
struct MainWindowState {
|
struct MainWindowState {
|
||||||
show_side_panel: bool,
|
show_side_panel: bool,
|
||||||
plate_display_options: PlateDisplayOptions,
|
plate_display_options: PlateDisplayOptions,
|
||||||
|
csv_export_type: CsvExportType,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for MainWindowState {
|
impl Default for MainWindowState {
|
||||||
|
|
@ -23,6 +26,24 @@ impl Default for MainWindowState {
|
||||||
Self {
|
Self {
|
||||||
show_side_panel: true,
|
show_side_panel: true,
|
||||||
plate_display_options: PlateDisplayOptions::default(),
|
plate_display_options: PlateDisplayOptions::default(),
|
||||||
|
csv_export_type: CsvExportType::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[non_exhaustive]
|
||||||
|
#[derive(Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, std::default::Default)]
|
||||||
|
enum CsvExportType {
|
||||||
|
#[default]
|
||||||
|
Normal,
|
||||||
|
EchoClient,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for CsvExportType {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::Normal => write!(f, "Normal"),
|
||||||
|
Self::EchoClient => write!(f, "Echo Client"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -92,52 +113,77 @@ impl eframe::App for PlateToolEframe {
|
||||||
ui.menu_button("Export", |ui| {
|
ui.menu_button("Export", |ui| {
|
||||||
if ui.button("Export as CSV").clicked() {
|
if ui.button("Export as CSV").clicked() {
|
||||||
/*
|
/*
|
||||||
let mut records: Vec<TransferRecord> = Vec::new();
|
let mut records: Vec<TransferRecord> = Vec::new();
|
||||||
for transfer in &self.main_state.transfers {
|
for transfer in &self.main_state.transfers {
|
||||||
let maybe_src_barcode = self
|
let maybe_src_barcode = self
|
||||||
.main_state
|
.main_state
|
||||||
.source_plates
|
.source_plates
|
||||||
.iter()
|
.iter()
|
||||||
.find(|spi| spi.get_uuid() == transfer.source_id);
|
.find(|spi| spi.get_uuid() == transfer.source_id);
|
||||||
let maybe_dest_barcode = self
|
let maybe_dest_barcode = self
|
||||||
.main_state
|
.main_state
|
||||||
.destination_plates
|
.destination_plates
|
||||||
.iter()
|
.iter()
|
||||||
.find(|dpi| dpi.get_uuid() == transfer.dest_id);
|
.find(|dpi| dpi.get_uuid() == transfer.dest_id);
|
||||||
|
|
||||||
if let (Some(src_barcode), Some(dest_barcode)) =
|
if let (Some(src_barcode), Some(dest_barcode)) =
|
||||||
(maybe_src_barcode, maybe_dest_barcode)
|
(maybe_src_barcode, maybe_dest_barcode)
|
||||||
{
|
{
|
||||||
records.append(&mut transfer_to_records(
|
records.append(&mut transfer_to_records(
|
||||||
transfer,
|
transfer,
|
||||||
&src_barcode.name,
|
&src_barcode.name,
|
||||||
&dest_barcode.name,
|
&dest_barcode.name,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
let records: Vec<TransferRecord> = self
|
let records: Vec<TransferRecord> = self
|
||||||
.main_state
|
.main_state
|
||||||
.transfers
|
.transfers
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|transfer| {
|
.flat_map(|transfer| {
|
||||||
let src_barcode = self.main_state.source_plates
|
let src_barcode = self
|
||||||
|
.main_state
|
||||||
|
.source_plates
|
||||||
.iter()
|
.iter()
|
||||||
.find(|spi| spi.get_uuid() == transfer.source_id)?;
|
.find(|spi| spi.get_uuid() == transfer.source_id)?;
|
||||||
let dest_barcode = self.main_state.destination_plates
|
let dest_barcode = self
|
||||||
|
.main_state
|
||||||
|
.destination_plates
|
||||||
.iter()
|
.iter()
|
||||||
.find(|dpi| dpi.get_uuid() == transfer.dest_id)?;
|
.find(|dpi| dpi.get_uuid() == transfer.dest_id)?;
|
||||||
Some(transfer_to_records(transfer, &src_barcode.name, &dest_barcode.name))
|
|
||||||
|
if self.main_window_state.csv_export_type
|
||||||
|
!= CsvExportType::EchoClient
|
||||||
|
|| self
|
||||||
|
.main_state
|
||||||
|
.get_current_source_uuid()
|
||||||
|
.is_some_and(|x| x != src_barcode.get_uuid())
|
||||||
|
|| self
|
||||||
|
.main_state
|
||||||
|
.get_current_destination_uuid()
|
||||||
|
.is_some_and(|x| x != dest_barcode.get_uuid())
|
||||||
|
{
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(transfer_to_records(
|
||||||
|
transfer,
|
||||||
|
&src_barcode.name,
|
||||||
|
&dest_barcode.name,
|
||||||
|
))
|
||||||
})
|
})
|
||||||
.flatten()
|
.flatten()
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if let Ok(data) = records_to_csv(records)
|
let data = match self.main_window_state.csv_export_type {
|
||||||
{
|
CsvExportType::Normal => records_to_csv(records),
|
||||||
|
CsvExportType::EchoClient => records_to_echo_client_csv(records),
|
||||||
|
};
|
||||||
|
if let Ok(data) = data {
|
||||||
let bytes: &[u8] = data.as_bytes();
|
let bytes: &[u8] = data.as_bytes();
|
||||||
save_file(bytes, Some("transfers.csv"));
|
save_file(bytes, Some("transfers.csv"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ui.button("Export as JSON").clicked() {}
|
if ui.button("Export as JSON").clicked() {}
|
||||||
});
|
});
|
||||||
|
|
@ -178,7 +224,18 @@ impl eframe::App for PlateToolEframe {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
ui.menu_button("Exports", |ui| {
|
ui.menu_button("Exports", |ui| {
|
||||||
if ui.button("Change CSV export type").clicked() {}
|
ui.menu_button("CSV Export Type", |ui| {
|
||||||
|
ui.radio_value(
|
||||||
|
&mut self.main_window_state.csv_export_type,
|
||||||
|
CsvExportType::Normal,
|
||||||
|
format!("{}", CsvExportType::Normal),
|
||||||
|
);
|
||||||
|
ui.radio_value(
|
||||||
|
&mut self.main_window_state.csv_export_type,
|
||||||
|
CsvExportType::EchoClient,
|
||||||
|
format!("{}", CsvExportType::EchoClient),
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
ui.menu_button("Windows", |ui| {
|
ui.menu_button("Windows", |ui| {
|
||||||
ui.toggle_value(
|
ui.toggle_value(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue