summary refs log tree commit diff stats
path: root/src/pages
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-23 02:24:29 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-23 02:24:29 +0200
commit427ce16023613536b8176e6dee7c1580a5980c97 (patch)
treeab39dffcf89eacbcb19a251d540c46d9ee5b38d0 /src/pages
parentfeat(buy): Provide basic buy interface (diff)
downloadweb-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.rs54
-rw-r--r--src/pages/mod.rs3
-rw-r--r--src/pages/recipies.rs8
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" /> }
+}