summary refs log tree commit diff stats
path: root/src/components
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-25 02:15:31 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-25 02:15:31 +0200
commit3a0e91bda1e93afa33dd182c2e820c94b3e94593 (patch)
tree436fb1b1e1b0bbe450436ccb5e105b8bea8db17f /src/components
parentfeat(treewide): Make usage more intuitive (diff)
downloadweb-client-3a0e91bda1e93afa33dd182c2e820c94b3e94593.zip
feat(treewide): Add further buttons
The register product > associate barcode > buy barcode workflow is now
usable.

The only missing features for an MVP are unit and unit property
creation.
Diffstat (limited to 'src/components')
-rw-r--r--src/components/buy.rs0
-rw-r--r--src/components/container.rs2
-rw-r--r--src/components/inventory.rs43
-rw-r--r--src/components/mod.rs2
-rw-r--r--src/components/product_overview.rs25
-rw-r--r--src/components/unit_overview.rs21
6 files changed, 74 insertions, 19 deletions
diff --git a/src/components/buy.rs b/src/components/buy.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/buy.rs
diff --git a/src/components/container.rs b/src/components/container.rs
index 83b9584..d6d2f03 100644
--- a/src/components/container.rs
+++ b/src/components/container.rs
@@ -31,7 +31,7 @@ pub fn Container(
                         .into_iter()
                         .map(|(name, path)| {
                             view! {
-                                <li class="bg-green-400/40 p-2 first:rounded-l-full last:rounded-r-full">
+                                <li class="bg-green-400/40 p-2 text-nowrap first:rounded-l-full last:rounded-r-full">
                                     <button on:click=move |_| {
                                         use_navigate()(path, NavigateOptions::default());
                                     }>{name}</button>
diff --git a/src/components/inventory.rs b/src/components/inventory.rs
new file mode 100644
index 0000000..275dd0b
--- /dev/null
+++ b/src/components/inventory.rs
@@ -0,0 +1,43 @@
+use leptos::{IntoView, component, view};
+
+use crate::{
+    api::products_in_storage_wrapped,
+    components::{async_fetch::AsyncFetch, container::Container, icon_p::IconP},
+};
+
+#[component]
+pub fn Inventory() -> impl IntoView {
+    view! {
+        <Container
+            header="Inventory"
+            buttons=vec![
+                (view! { <IconP icon=icondata_io::IoClipboard text="Inventory" /> }, "inventory"),
+                (view! { <IconP icon=icondata_io::IoPricetags text="Consume" /> }, "consume"),
+                (view! { <IconP icon=icondata_io::IoStorefront text="Buy" /> }, "buy"),
+            ]
+        >
+            {
+                AsyncFetch! {
+                    @map_error_in_producer
+                    fetcher = products_in_storage_wrapped(),
+                    producer = |products| {
+                        let products_num = products.len();
+                        let plural_s = if products_num == 1 { "" } else { "s" };
+                        let products_value = 2;
+                        let products_currency = "EUR";
+
+                        view! {
+                            <p>
+                                {format!(
+                                    "You have {products_num} product{plural_s} \
+                                         in stock with a value \
+                                         of {products_value} {products_currency}.",
+                                )}
+                            </p>
+                        }
+                    }
+                }
+            }
+        </Container>
+    }
+}
diff --git a/src/components/mod.rs b/src/components/mod.rs
index efc4842..2c3d79a 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -10,9 +10,11 @@ pub mod input_placeholder;
 pub mod select_placeholder;
 
 // Specific
+pub mod inventory;
 pub mod product_overview;
 pub mod recipies;
 pub mod site_header;
+pub mod unit_overview;
 
 fn get_id() -> u32 {
     static ID: AtomicU32 = AtomicU32::new(0);
diff --git a/src/components/product_overview.rs b/src/components/product_overview.rs
index 5413dc1..bf81624 100644
--- a/src/components/product_overview.rs
+++ b/src/components/product_overview.rs
@@ -1,7 +1,7 @@
 use leptos::{IntoView, component, view};
 
 use crate::{
-    api::get_products,
+    api::products_registered_wrapped,
     components::{async_fetch::AsyncFetch, container::Container, icon_p::IconP},
 };
 
@@ -9,31 +9,20 @@ use crate::{
 pub fn ProductOverview() -> impl IntoView {
     view! {
         <Container
-            header="Inventory"
+            header="Products"
             buttons=vec![
-                (view! { <IconP icon=icondata_io::IoClipboard text="Inventory" /> }, "inventory"),
-                (view! { <IconP icon=icondata_io::IoPricetags text="Consume" /> }, "consume"),
-                (view! { <IconP icon=icondata_io::IoStorefront text="Buy" /> }, "buy"),
+                (view! { <IconP icon=icondata_io::IoClipboard text="Show products" /> }, "products"),
+                (view! { <IconP icon=icondata_io::IoPricetags text="Create product" /> }, "create-product"),
+                (view! { <IconP icon=icondata_io::IoPricetags text="Associate barcode with product" /> }, "associate-barcode-product"),
             ]
         >
             {
                 AsyncFetch! {
                     @map_error_in_producer
-                    fetcher = get_products(),
+                    fetcher = products_registered_wrapped(),
                     producer = |products| {
-                        let products_num = products.len();
-                        let plural_s = if products_num == 1 { "" } else { "s" };
-                        let products_value = 2;
-                        let products_currency = "EUR";
-
                         view! {
-                            <p>
-                                {format!(
-                                    "You have {products_num} product{plural_s} \
-                                         in stock with a value \
-                                         of {products_value} {products_currency}.",
-                                )}
-                            </p>
+                            <p>{format!("You have {} products", products.len())}</p>
                         }
                     }
                 }
diff --git a/src/components/unit_overview.rs b/src/components/unit_overview.rs
new file mode 100644
index 0000000..25e5675
--- /dev/null
+++ b/src/components/unit_overview.rs
@@ -0,0 +1,21 @@
+use leptos::{IntoView, component, view};
+
+use crate::components::{container::Container, icon_p::IconP};
+
+#[component]
+pub fn UnitOverview() -> impl IntoView {
+    view! {
+        <Container
+            header="Units"
+            buttons=vec![
+                (view! { <IconP icon=icondata_io::IoClipboard text="Show unit" /> }, "units"),
+                (view! { <IconP icon=icondata_io::IoClipboard text="Create unit" /> }, "create-unit"),
+                (view! { <IconP icon=icondata_io::IoPricetags text="Create unit property" /> }, "create-unit-property"),
+            ]
+        >
+            {
+                "You have units"
+            }
+        </Container>
+    }
+}