summaryrefslogtreecommitdiffstats
path: root/src/pages/buy.rs
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-03-19 07:45:14 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-03-19 07:45:14 +0100
commitf6a3fb9c4d8dd86f78c9f75a23c1ac35bf35d4eb (patch)
tree5f28fbca03d83921b568f7cb1708374456d9ec42 /src/pages/buy.rs
parentfeat(treewide): Add further buttons (diff)
downloadweb-client-f6a3fb9c4d8dd86f78c9f75a23c1ac35bf35d4eb.zip
feat(treewide): Commit MVP
Diffstat (limited to '')
-rw-r--r--src/pages/buy.rs63
1 files changed, 42 insertions, 21 deletions
diff --git a/src/pages/buy.rs b/src/pages/buy.rs
index f3335f6..e4cd599 100644
--- a/src/pages/buy.rs
+++ b/src/pages/buy.rs
@@ -4,12 +4,16 @@ use leptos::{
task::spawn_local,
view,
};
+use leptos_router::{NavigateOptions, hooks::use_navigate};
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},
+ components::{
+ banner::Banner, catch_errors::CatchErrors, form::Form, login_wall::LoginWall,
+ site_header::SiteHeader,
+ },
};
#[component]
@@ -17,29 +21,44 @@ 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" />
+ <CatchErrors>
+ <LoginWall back=move || "/buy".to_owned()>
+ <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>
+ <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!();
+ {
+ Form! {
+ on_submit = |barcode_number, times| {
+ let config = get_config!();
+ let navigate = use_navigate();
- 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}");
+ spawn_local(async move {
+ match buy_barcode_external_wrapped(
+ &config,
+ BarcodeId { value: barcode_number },
+ u32::from(times)
+ ).await {
+ Ok(()) => {
+ navigate("/buy", NavigateOptions::default());
+ on_submit_errored_set.set(None);
+ },
+ Err(err) => {
+ let error =
+ format!(
+ "Error in form \
+ on-submit for barcode \
+ `{barcode_number}`: {err}"
+ );
+ on_submit_errored_set.set(Some(error));
+ },
+ }
- on_submit_errored_set.set(Some(error));
- } else {
- on_submit_errored_set.set(None);
- }
-
- info!("Bought barcode {barcode_number} {times} times");
- });
+ info!("Bought barcode {barcode_number} {times} times");
+ });
};
<Input
@@ -55,7 +74,9 @@ pub fn Buy() -> impl IntoView {
html_type="number",
label="Times"
/>
- }
- }
+ }
+ }
+ </LoginWall>
+ </CatchErrors>
}
}