1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
use leptos::{
IntoView, component,
prelude::{Get, Show, signal},
task::spawn_local,
view,
};
use log::info;
use rocie_client::models::BarcodeId;
use crate::{
api::{buy_barcode_external_wrapped, get_config},
components::{banner::Banner, form::Form, site_header::SiteHeader},
};
#[component]
pub fn Buy() -> impl IntoView {
let (on_submit_errored, on_submit_errored_set) = signal(None);
view! {
<SiteHeader logo=icondata_io::IoPricetag back_location="/" name="Buy" />
<Show when=move || on_submit_errored.get().is_some()>
<Banner text=move || on_submit_errored.get().expect("Should be some") />
</Show>
{
Form! {
on_submit = |barcode_number, times| {
let config = get_config!();
spawn_local(async move {
if let Err(err) = buy_barcode_external_wrapped(&config, BarcodeId { value: barcode_number }, u32::from(times)).await {
let error = format!("Error in form on-submit for barcode `{barcode_number}`: {err}");
on_submit_errored_set.set(Some(error));
} else {
on_submit_errored_set.set(None);
}
info!("Bought barcode {barcode_number} {times} times");
});
};
<Input
name=barcode_number,
rust_type=u32,
html_type="number",
label="Barcode Number",
/>
<Input
name=times,
rust_type=u16,
html_type="number",
label="Times"
/>
}
}
}
}
|