From f6a3fb9c4d8dd86f78c9f75a23c1ac35bf35d4eb Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Thu, 19 Mar 2026 07:45:14 +0100 Subject: feat(treewide): Commit MVP --- src/pages/product.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/pages/product.rs (limited to 'src/pages/product.rs') diff --git a/src/pages/product.rs b/src/pages/product.rs new file mode 100644 index 0000000..0e4ac04 --- /dev/null +++ b/src/pages/product.rs @@ -0,0 +1,52 @@ +use leptos::{ + IntoView, component, + prelude::{ElementChild, Get, IntoAny}, + view, +}; +use leptos_router::hooks::use_params_map; +use rocie_client::models::product; + +use crate::{ + api::product_by_name_wrapped, + components::{ + async_fetch::{AsyncFetch, AsyncResource}, + catch_errors::CatchErrors, + login_wall::LoginWall, + site_header::SiteHeader, + }, +}; + +#[component] +pub fn Product() -> impl IntoView { + let name = || { + use_params_map() + .get() + .get("name") + .expect("Should always have a name, because the router would otherwise not match") + }; + + view! { + + + + { + AsyncFetch! { + @map_error_in_producer + from_resource=AsyncResource! { + (name: String = name().clone()) + -> Result { + product_by_name_wrapped(&name).await + + } + }, + producer=render_product + } + } + + + } +} + +fn render_product(product: product::Product) -> impl IntoView { + view! {

{product.name}

} +} -- cgit 1.4.1