// 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 . use leptos::{ IntoView, component, error::Error, prelude::{Children, IntoAny}, view, }; use leptos_router::{NavigateOptions, hooks::use_navigate}; use crate::{ api::{can_be_provisioned_wrapped, is_logged_in_wrapped}, components::async_fetch::{AsyncFetch, AsyncResource}, }; #[component] pub fn LoginWall( back: impl Fn() -> String + Send + Sync + 'static, children: Children, ) -> impl IntoView { view! { { AsyncFetch! { @map_error_in_producer from_resource = AsyncResource!( () -> Result<(bool, bool), Error> { Ok((can_be_provisioned_wrapped().await?, is_logged_in_wrapped().await?)) } ), producer = |(can_be_provisioned, is_logged_in)| { if is_logged_in { children() } else if can_be_provisioned { use_navigate()(format!("/provision/?back={}", back()).as_str(), NavigateOptions::default()); ().into_any() } else { use_navigate()(format!("/login/?back={}", back()).as_str(), NavigateOptions::default()); ().into_any() } } } } } }