// rocie - An enterprise grocery management system - Web app // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . pub mod associate_barcode; pub mod buy; pub mod create_product; pub mod create_product_parent; pub mod create_recipe; pub mod home; pub mod inventory; pub mod login; pub mod not_found; pub mod product; pub mod products; pub mod provision; pub mod recipe; pub mod recipies; pub mod units; macro_rules! mk_render_parents { ( self = $self:ident, parent_type = $parent_type:ty, item_type = $item_type:ty, value_renderer = $value_renderer:ident, under_parent_fetcher = $under_parent_fetcher:ident, indirect_fetcher = $indirect_fetcher:ident, direct_fetcher = $direct_fetcher:ident $(,)? ) => { fn $self( parents: Option>, toplevel_items: Option>, ) -> impl IntoView { use leptos::prelude::IntoAny; view! { { parents.map(|parents| { parents .into_iter() .map(|parent| { view! {
  • {parent.name} {" ("} { AsyncFetch! { @map_error_in_producer fetcher = $indirect_fetcher(parent.id), producer = |products| {products.len()} } } {")"}
      { AsyncFetch! { @map_error_in_producer fetcher = $under_parent_fetcher(parent.id), producer = |val| $self(val, None) } } { AsyncFetch! { @map_error_in_producer fetcher = $direct_fetcher(parent.id), producer = $value_renderer } }
  • } .into_any() }) .collect::>() }) } { if let Some(toplevel_items) = toplevel_items { $value_renderer(toplevel_items).into_any() } else { ().into_any() } } } } }; } use mk_render_parents;