This commit is contained in:
Bianca Fürstenau 2025-02-26 07:28:13 +01:00
parent 8a25a5fa82
commit 18814f18e0
5 changed files with 127 additions and 2 deletions

37
Cargo.lock generated
View file

@ -353,6 +353,7 @@ dependencies = [
"console_error_panic_hook",
"curl",
"leptos",
"leptos_router",
"openssl",
"rand 0.8.5",
"ring-compat",
@ -2533,6 +2534,42 @@ dependencies = [
"uuid",
]
[[package]]
name = "leptos_router"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e83cf6033f987f366be6ffa556ee22fa6f9f433cbffd173826fd67327c3ae7ed"
dependencies = [
"any_spawner",
"either_of",
"futures",
"gloo-net",
"js-sys",
"leptos",
"leptos_router_macro",
"once_cell",
"or_poisoned",
"reactive_graph",
"send_wrapper",
"tachys",
"thiserror 2.0.11",
"url",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "leptos_router_macro"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84f580227933b49028cd3b6d7cd29ab7c6d30f9777cf0ac774eda2aab000a912"
dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
"syn 2.0.98",
]
[[package]]
name = "leptos_server"
version = "0.7.7"

View file

@ -35,6 +35,7 @@ tauri-build = { version = "2", features = [] }
[dependencies]
leptos = { version = "^0.7", features = ["csr"] }
leptos_router = { version = "^0.7" }
tauri-sys = { path = "../tauri-sys", features = ["core"] }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1" }

View file

@ -1,6 +1,9 @@
use leptos::prelude::*;
use bkbh_lib::commands::*;
use leptos::task::spawn_local;
use leptos::web_sys::FormData;
use leptos::form::FromFormData;
use std::collections::HashMap;
use bkbh_lib::types::*;
@ -54,6 +57,58 @@ fn StoreInput(store: Store) -> impl IntoView {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Cash(i64);
impl std::str::FromStr for Cash {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
let split: Vec<&str> = s.split(".").collect();
let i = i64::from_str(split.get(0).ok_or(())?)
.map_err(|e| println!("{:?}", e))?;
let f = match split.get(1) {
None => 0,
Some(fs) => i64::from_str(
&format!("00{}", fs)[0..2]
)
.map_err(|e| println!("{:?}", e))?,
};
Ok(Cash(i*100+f))
}
}
#[component]
fn CashInput(value: RwSignal<String>) -> impl IntoView {
let txt = "cash";
view! {
<div
class="labelled-input"
>
<label
for=txt.clone()
>
<img
src="assets/cash.svg"
class="logo"
alt="Bargeld"
/>
</label>
<input
type="number"
name=txt.clone()
id=txt.clone()
min=0
step=0.01
bind:value=value
on:change=move |_| {
println!("{:?}", value.get());
}
/>
</div>
}
}
#[component]
fn AccRadio(acc: Account) -> impl IntoView {
let txt = format!("{}", Into::<String>::into(&acc));
@ -80,9 +135,28 @@ fn AccRadio(acc: Account) -> impl IntoView {
}
#[component]
fn InvForm() -> impl IntoView {
fn SubmitButton() -> impl IntoView {
view! {
<form>
<button
type="submit"
class="shout"
>
"Senden"
</button>
}
}
#[component]
fn InvForm() -> impl IntoView {
let cash = RwSignal::new(String::from("0.00"));
view! {
<form
on:submit=move |ev| {
ev.prevent_default();
let data = FromFormData::from_event(ev.as_ref()).unwrap();
spawn_local(async move {inventory(data).await;});
}
>
<AccRadio acc=Account::Sumpf />
<AccRadio acc=Account::Heinersyndikat />
<StoreInput store=Store::Aldi />
@ -90,6 +164,8 @@ fn InvForm() -> impl IntoView {
<StoreInput store=Store::Lidl />
<StoreInput store=Store::Rewe />
<StoreInput store=Store::Tegut />
<CashInput value=cash />
<SubmitButton />
</form>
}
}

View file

@ -1,6 +1,7 @@
use tauri_sys::Error;
use tauri_sys::core::invoke;
use crate::types::*;
use std::collections::HashMap;
#[derive(serde::Serialize)]
pub struct Swap {
@ -11,3 +12,12 @@ pub async fn swap(store: Store, acc: i64) -> Result<(), Error> {
let args = Swap { store, acc };
invoke("swap", &args).await
}
#[derive(serde::Serialize)]
pub struct Inventory {
data: HashMap<String, String>,
}
pub async fn inventory(data: HashMap<String, String>) -> Result<(), Error> {
let args = Inventory { data };
invoke("inventory", &args).await
}

View file

@ -40,6 +40,7 @@ pub async fn inventory(
data: HashMap<String, String>,
state: State<'_, Mutex<AppState>>,
) -> Result<(), ()> {
println!("{:?}", data);
let now = Utc::now().timestamp();
let state = state.lock().await;
let inv = parse_inventory(data)?;