diff --git a/src/components/inventory.rs b/src/components/inventory.rs
deleted file mode 100644
index 5855b33..0000000
--- a/src/components/inventory.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-use leptos::{
- IntoView, component,
- prelude::{ClassAttribute, ElementChild},
- view,
-};
-
-use crate::{
- api::{get_full_product_by_id, get_products},
- components::{async_fetch::AsyncFetch, site_header::SiteHeader},
-};
-
-#[component]
-pub fn Inventory() -> impl IntoView {
- view! {
-
-
-
- {
- AsyncFetch! {
- fetcher = {get_products()}
- producer = |products| {
- products
- .into_iter()
- .map(|product| {
- view! {
- {AsyncFetch! {
- fetcher = {get_full_product_by_id(product.id)}
- producer = |(product, amount, unit)| {
- view! {
-
- - {product.name}
- -
-
- {
- format!(
- "{} {}",
- amount.amount.value,
- unit.short_name
- )
- }
-
-
-
- }
- }
- }}
- }
- })
- .collect::>()
- }
- }
- }
-
- }
-}
diff --git a/src/components/mod.rs b/src/components/mod.rs
index ca2ac10..efc4842 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -2,16 +2,14 @@ use std::sync::atomic::{AtomicU32, Ordering};
// Generic
pub mod async_fetch;
+pub mod banner;
pub mod container;
pub mod form;
pub mod icon_p;
pub mod input_placeholder;
pub mod select_placeholder;
-pub mod banner;
// Specific
-pub mod buy;
-pub mod inventory;
pub mod product_overview;
pub mod recipies;
pub mod site_header;
diff --git a/src/components/product_overview.rs b/src/components/product_overview.rs
index 777baef..5413dc1 100644
--- a/src/components/product_overview.rs
+++ b/src/components/product_overview.rs
@@ -11,33 +11,31 @@ pub fn ProductOverview() -> impl IntoView {
},
- "inventory",
- ),
+ (view! {
}, "inventory"),
(view! {
}, "consume"),
(view! {
}, "buy"),
]
>
{
AsyncFetch! {
- fetcher = {get_products()}
- producer = |products| {
- let products_num = products.len();
- let plural_s = if products_num == 1 { "" } else { "s" };
- let products_value = 2;
- let products_currency = "EUR";
+ @map_error_in_producer
+ fetcher = get_products(),
+ 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! {
-
- {format!(
- "You have {products_num} product{plural_s} \
- in stock with a value \
- of {products_value} {products_currency}.",
- )}
-
- }
- }
+ view! {
+
+ {format!(
+ "You have {products_num} product{plural_s} \
+ in stock with a value \
+ of {products_value} {products_currency}.",
+ )}
+
+ }
+ }
}
}
diff --git a/src/components/recipies.rs b/src/components/recipies.rs
index 1bd3a0d..f7903e4 100644
--- a/src/components/recipies.rs
+++ b/src/components/recipies.rs
@@ -1,11 +1,17 @@
use leptos::{IntoView, component, prelude::ElementChild, view};
-use crate::components::container::Container;
+use crate::components::{container::Container, icon_p::IconP};
#[component]
pub fn Recipies() -> impl IntoView {
view! {
-
+ }, "recipies"),
+ (view! { }, "mealplan"),
+ ]
+ >
"You have 0 recipies."
}
diff --git a/src/components/select_placeholder.rs b/src/components/select_placeholder.rs
index 2e0f783..7289793 100644
--- a/src/components/select_placeholder.rs
+++ b/src/components/select_placeholder.rs
@@ -41,16 +41,18 @@ pub fn SelectPlaceholder(
"
node_ref=node_ref
>
- {move || AsyncFetch! {
- @map_error_in_producer
- from_resource = options
- producer = |options| {
- options
- .into_iter()
- .map(|(label, value)| {
- view! {
}
- })
- .collect_view()
+ {move || {
+ AsyncFetch! {
+ @map_error_in_producer
+ from_resource = options,
+ producer = |options| {
+ options
+ .into_iter()
+ .map(|(label, value)| {
+ view! {
}
+ })
+ .collect_view()
+ }
}
}}
diff --git a/src/lib.rs b/src/lib.rs
index 3813ebb..b5ca65a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -30,9 +30,8 @@ use leptos_router::{
use reactive_stores::Store;
use rocie_client::apis::configuration::Configuration;
-use crate::{
- components::{buy::Buy, inventory::Inventory},
- pages::{home::Home, not_found::NotFound},
+use crate::pages::{
+ buy::Buy, home::Home, inventory::Inventory, not_found::NotFound, recipies::Recipies,
};
#[derive(Debug, Clone, Store)]
@@ -84,6 +83,12 @@ pub fn App() -> impl IntoView {
view! {
}
}
/>
+
}
+ }
+ />
}
diff --git a/src/pages/buy.rs b/src/pages/buy.rs
new file mode 100644
index 0000000..cb4cff4
--- /dev/null
+++ b/src/pages/buy.rs
@@ -0,0 +1,193 @@
+use leptos::{
+ IntoView, component,
+ prelude::{Get, Read, Show, WriteSignal, expect_context, signal},
+ task::spawn_local,
+ view,
+};
+use leptos_router::{NavigateOptions, hooks::use_navigate};
+use log::info;
+use reactive_stores::Store;
+use rocie_client::{
+ apis::Error,
+ models::{Product, Unit},
+};
+use uuid::Uuid;
+
+use crate::{
+ ConfigState, ConfigStateStoreFields,
+ api::{
+ buy_barcode_wrapper, get_product_by_name, get_product_unit_by_id,
+ get_products_by_part_name, get_unit_by_id,
+ },
+ components::{async_fetch::AsyncResource, banner::Banner, form::Form, site_header::SiteHeader},
+};
+
+#[component]
+pub fn Buy() -> impl IntoView {
+ let (on_submit_errored, on_submit_errored_set) = signal(None);
+
+ view! {
+
+
+
+
+
+
+ {
+ Form! {
+ on_submit = |barcode_number, amount| {
+ let config = expect_context::
>();
+ let config = config.config().read();
+
+ spawn_local(async move {
+ if let Err(err) = buy_barcode_wrapper(&config, barcode_number).await {
+ let error = format!("Error in form on-submit for barcode `{barcode_number}`: {err}");
+ on_submit_errored_set.set(Some(error));
+ } else {
+ on_submit_errored_set.set(None);
+
+ info!("Bought barcode {barcode_number} {amount} times");
+ }
+
+ });
+ };
+
+
+
+
+ }
+ }
+ }
+}
+
+#[component]
+pub fn AssociateBarcode() -> impl IntoView {
+ let product_name_signal;
+
+ let (show_units, show_units_set) = signal(false);
+
+ view! {
+
+
+ {
+ Form! {
+ on_submit = |product_name, amount, unit_id| {
+ spawn_local(async move {
+ let navigate = use_navigate();
+
+ info!("Got product barcode: {product_name} with amount: {amount}, and {unit_id}");
+
+ navigate("/", NavigateOptions::default());
+ });
+ };
+
+
+
+
+
+
+
+ }
+ }
+ }
+}
+
+async fn generate_suggest_products(
+ optional_product_name: Option,
+) -> Result