summary refs log tree commit diff stats
path: root/src/components/buy.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/buy.rs')
-rw-r--r--src/components/buy.rs56
1 files changed, 26 insertions, 30 deletions
diff --git a/src/components/buy.rs b/src/components/buy.rs
index 86e9952..0c294ee 100644
--- a/src/components/buy.rs
+++ b/src/components/buy.rs
@@ -1,38 +1,34 @@
-use leptos::{
-    IntoView, component,
-    html::Input,
-    prelude::{ClassAttribute, ElementChild, Get, NodeRef, OnAttribute, Set, signal},
-    view,
-    web_sys::SubmitEvent,
-};
+use leptos::{IntoView, component, view};
+use log::info;
 
-use crate::components::{input_placeholder::InputPlaceholder, site_header::SiteHeader};
+use crate::components::{form::Form, input_placeholder::InputPlaceholder, site_header::SiteHeader};
 
 #[component]
 pub fn Buy() -> impl IntoView {
-    let (product_barcode, set_product_barcode) = signal(String::new());
-
-    let input_element: NodeRef<Input> = NodeRef::new();
-
-    let on_submit = move |ev: SubmitEvent| {
-        // stop the page from reloading!
-        ev.prevent_default();
-
-        let value = input_element
-            .get()
-            // event handlers can only fire after the view
-            // is mounted to the DOM, so the `NodeRef` will be `Some`
-            .expect("<input> to exist")
-            .value();
-        set_product_barcode.set(value);
-    };
-
     view! {
         <SiteHeader logo=icondata_io::IoPricetag back_location="/" name="Buy" />
-        <form class="flex flex-col contents-start m-2 g-2" on:submit=on_submit>
-            <InputPlaceholder input_type="number" label="Product Barcode" node_ref=input_element />
-            <input type="submit" value="Submit" />
-        </form>
-        <p>"Name is: " {product_barcode}</p>
+
+        {Form! {
+            on_submit = |Inputs {product_barcode, amount}| {
+                info!("Got product barcode: {product_barcode} with amount: {amount}");
+            }
+
+            <Input
+                name=product_barcode,
+                signal_name_get=product_barcode_get,
+                signal_name_set=product_barcode_set,
+                rust_type=u32,
+                html_type="number",
+                label="Product Barcode"
+            />
+            <Input
+                name=amount,
+                signal_name_get=amount_get,
+                signal_name_set=amount_set,
+                rust_type=u16,
+                html_type="number",
+                label="Amount"
+            />
+        }}
     }
 }