diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-10-23 02:24:29 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-10-23 02:24:29 +0200 |
| commit | 427ce16023613536b8176e6dee7c1580a5980c97 (patch) | |
| tree | ab39dffcf89eacbcb19a251d540c46d9ee5b38d0 /src/pages | |
| parent | feat(buy): Provide basic buy interface (diff) | |
| download | web-client-427ce16023613536b8176e6dee7c1580a5980c97.zip | |
feat(treewide): Make usage more intuitive
Diffstat (limited to '')
| -rw-r--r-- | src/pages/buy.rs (renamed from src/components/buy.rs) | 0 | ||||
| -rw-r--r-- | src/pages/inventory.rs | 54 | ||||
| -rw-r--r-- | src/pages/mod.rs | 3 | ||||
| -rw-r--r-- | src/pages/recipies.rs | 8 |
4 files changed, 65 insertions, 0 deletions
diff --git a/src/components/buy.rs b/src/pages/buy.rs index cb4cff4..cb4cff4 100644 --- a/src/components/buy.rs +++ b/src/pages/buy.rs diff --git a/src/pages/inventory.rs b/src/pages/inventory.rs new file mode 100644 index 0000000..e5ff6ae --- /dev/null +++ b/src/pages/inventory.rs @@ -0,0 +1,54 @@ +use leptos::{ + IntoView, component, + prelude::{ClassAttribute, ElementChild}, + view, +}; +use rocie_client::models::{Product, ProductAmount, Unit}; + +use crate::{ + api::{get_full_product_by_id, get_products}, + components::{async_fetch::AsyncFetch, site_header::SiteHeader}, +}; + +#[component] +pub fn Inventory() -> impl IntoView { + view! { + <SiteHeader logo=icondata_io::IoArrowBack back_location="/" name="Inventory" /> + + <ul class="flex flex-col p-2 m-2"> + { + AsyncFetch! { + @map_error_in_producer + fetcher = get_products(), + producer = render_products, + } + } + </ul> + } +} + +fn render_products(products: Vec<Product>) -> impl IntoView { + products + .into_iter() + .map(|product| { + AsyncFetch! { + @map_error_in_producer + fetcher = get_full_product_by_id(product.id), + producer = format_full_product, + } + }) + .collect::<Vec<_>>() +} + +fn format_full_product((product, amount, unit): (Product, ProductAmount, Unit)) -> impl IntoView { + view! { + <ul class="my-3"> + <li class="m-2">{product.name}</li> + <li class="m-2"> + <span class="bg-gray-200 p-1 px-2 rounded-lg"> + {format!("{} {}", amount.amount.value, unit.short_name)} + </span> + </li> + </ul> + } +} diff --git a/src/pages/mod.rs b/src/pages/mod.rs index 8829694..a6057cd 100644 --- a/src/pages/mod.rs +++ b/src/pages/mod.rs @@ -1,2 +1,5 @@ +pub mod buy; pub mod home; +pub mod inventory; pub mod not_found; +pub mod recipies; diff --git a/src/pages/recipies.rs b/src/pages/recipies.rs new file mode 100644 index 0000000..1fc9dcc --- /dev/null +++ b/src/pages/recipies.rs @@ -0,0 +1,8 @@ +use leptos::{IntoView, component, view}; + +use crate::components::site_header::SiteHeader; + +#[component] +pub fn Recipies() -> impl IntoView { + view! { <SiteHeader logo=icondata_io::IoArrowBack back_location="/" name="Recipies" /> } +} |
