Persist state on reload

This commit is contained in:
Emilia Allison 2023-05-22 20:48:03 -04:00
parent 282369346c
commit e0ff131cd7
Signed by: emilia
GPG Key ID: 7A3F8997BFE894E0
9 changed files with 36 additions and 15 deletions

2
.cargo/config.toml Normal file
View File

@ -0,0 +1,2 @@
[build]
target = "wasm32-unknown-unknown"

4
Cargo.lock generated
View File

@ -533,10 +533,10 @@ dependencies = [
name = "plate-tool" name = "plate-tool"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"getrandom",
"lazy_static", "lazy_static",
"log", "log",
"regex", "regex",
"serde",
"uuid", "uuid",
"wasm-bindgen", "wasm-bindgen",
"wasm-logger", "wasm-logger",
@ -858,7 +858,9 @@ checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
dependencies = [ dependencies = [
"getrandom", "getrandom",
"rand", "rand",
"serde",
"uuid-macro-internal", "uuid-macro-internal",
"wasm-bindgen",
] ]
[[package]] [[package]]

View File

@ -9,10 +9,10 @@ edition = "2021"
yew = { version = "0.20.0", features = ["csr"] } yew = { version = "0.20.0", features = ["csr"] }
yewdux = "0.9" yewdux = "0.9"
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = ["FormData", "HtmlFormElement"] } web-sys = { version = "0.3", features = ["FormData", "HtmlFormElement", "HtmlDialogElement"] }
log = "0.4" log = "0.4"
wasm-logger = "0.2" wasm-logger = "0.2"
regex = "1" regex = "1"
lazy_static = "1.4" lazy_static = "1.4"
uuid = { version = "1.3", features = ["v4", "fast-rng", "macro-diagnostics"] } uuid = { version = "1.3", features = ["v4", "fast-rng", "macro-diagnostics", "js", "serde"] }
getrandom = { version = "0.2", features = ["js"] } serde = { version = "1.0", features = ["derive"] }

View File

@ -1,10 +1,12 @@
use yewdux::prelude::*; use serde::{Serialize, Deserialize};
use yewdux::{prelude::*, storage};
use super::transfer_menu::RegionDisplay; use super::transfer_menu::RegionDisplay;
use crate::data::plate_instances::PlateInstance; use crate::data::plate_instances::PlateInstance;
use crate::data::transfer::Transfer; use crate::data::transfer::Transfer;
use crate::data::plate::*; use crate::data::plate::*;
#[derive(Debug, Default, Clone, PartialEq, Store)] #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize, Store)]
#[store(storage = "session")]
pub struct NewTransferState { pub struct NewTransferState {
pub source_region: RegionDisplay, pub source_region: RegionDisplay,
pub destination_region: RegionDisplay, pub destination_region: RegionDisplay,
@ -12,7 +14,7 @@ pub struct NewTransferState {
pub interleave_y: u8, pub interleave_y: u8,
} }
#[derive(Default, PartialEq, Clone)] #[derive(Default, PartialEq, Clone, Serialize, Deserialize)]
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>,
@ -21,11 +23,18 @@ pub struct MainState {
impl Store for MainState { impl Store for MainState {
fn new() -> Self { fn new() -> Self {
init_listener(storage::StorageListener::<Self>::new(storage::Area::Local));
storage::load(storage::Area::Local)
.expect("Unable to load state")
.unwrap_or_default()
/*
Self { Self {
source_plates: Vec::new(), source_plates: Vec::new(),
destination_plates: Vec::new(), destination_plates: Vec::new(),
transfers: Vec::new(), transfers: Vec::new(),
} }
*/
} }
fn should_notify(&self, old: &Self) -> bool { fn should_notify(&self, old: &Self) -> bool {

View File

@ -1,5 +1,6 @@
#![allow(non_snake_case)] #![allow(non_snake_case)]
use serde::{Serialize, Deserialize};
use yew::prelude::*; use yew::prelude::*;
use yewdux::prelude::*; use yewdux::prelude::*;
use wasm_bindgen::JsCast; use wasm_bindgen::JsCast;
@ -86,7 +87,7 @@ pub fn TransferMenu() -> Html {
} }
} }
#[derive(PartialEq, Eq, Debug, Clone, Default)] #[derive(PartialEq, Eq, Debug, Clone, Default, Serialize, Deserialize)]
pub struct RegionDisplay { pub struct RegionDisplay {
pub text: String, pub text: String,
pub col_start: u8, pub col_start: u8,

View File

@ -1,4 +1,6 @@
#[derive(PartialEq, Eq, Clone, Copy)] use serde::{Serialize, Deserialize};
#[derive(PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub struct Plate { pub struct Plate {
pub plate_type: PlateType, pub plate_type: PlateType,
pub plate_format: PlateFormat, pub plate_format: PlateFormat,
@ -17,13 +19,13 @@ impl Plate {
} }
} }
#[derive(PartialEq, Eq, Clone, Copy)] #[derive(PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum PlateType { pub enum PlateType {
Source, Source,
Destination, Destination,
} }
#[derive(PartialEq, Eq, Clone, Copy)] #[derive(PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum PlateFormat { pub enum PlateFormat {
W6, W6,
W12, W12,

View File

@ -1,7 +1,8 @@
use uuid::Uuid; use uuid::Uuid;
use serde::{Serialize, Deserialize};
use super::plate::*; use super::plate::*;
#[derive(PartialEq, Clone)] #[derive(PartialEq, Clone, Serialize, Deserialize)]
pub struct PlateInstance { pub struct PlateInstance {
pub plate: Plate, pub plate: Plate,
id: Uuid, id: Uuid,

View File

@ -1,8 +1,10 @@
use serde::Deserialize;
use serde::Serialize;
use uuid::Uuid; use uuid::Uuid;
use super::transfer_region::*; use super::transfer_region::*;
use super::plate_instances::*; use super::plate_instances::*;
#[derive(PartialEq, Clone, Copy)] #[derive(PartialEq, Clone, Copy, Serialize, Deserialize)]
pub struct Transfer { pub struct Transfer {
pub source_id: Uuid, pub source_id: Uuid,
pub dest_id: Uuid, pub dest_id: Uuid,

View File

@ -1,6 +1,8 @@
use serde::{Serialize, Deserialize};
use super::plate::Plate; use super::plate::Plate;
#[derive(Clone, Copy, PartialEq, Eq)] #[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Region { pub enum Region {
Rect((u8, u8), (u8, u8)), Rect((u8, u8), (u8, u8)),
Point((u8, u8)), Point((u8, u8)),
@ -17,7 +19,7 @@ impl TryFrom<Region> for ((u8, u8), (u8, u8)) {
} }
} }
#[derive(PartialEq, Eq, Clone, Copy)] #[derive(PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub struct TransferRegion { pub struct TransferRegion {
pub source_plate: Plate, pub source_plate: Plate,
pub source_region: Region, // Even if it is just a point, we don't want corners. pub source_region: Region, // Even if it is just a point, we don't want corners.