diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-10-25 02:15:31 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-10-25 02:15:31 +0200 |
| commit | 3a0e91bda1e93afa33dd182c2e820c94b3e94593 (patch) | |
| tree | 436fb1b1e1b0bbe450436ccb5e105b8bea8db17f /src/components | |
| parent | feat(treewide): Make usage more intuitive (diff) | |
| download | web-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.rs | 0 | ||||
| -rw-r--r-- | src/components/container.rs | 2 | ||||
| -rw-r--r-- | src/components/inventory.rs | 43 | ||||
| -rw-r--r-- | src/components/mod.rs | 2 | ||||
| -rw-r--r-- | src/components/product_overview.rs | 25 | ||||
| -rw-r--r-- | src/components/unit_overview.rs | 21 |
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> + } +} |
