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! { { 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"); }); }; } } } }