use crate::locales::init_locales; use crate::pages::home_page::HomePage; use crate::pages::settings::Settings; use leptos::prelude::*; use leptos_meta::*; use leptos_router::components::{Route, Router, Routes}; use leptos_router::hooks::use_location; use leptos_router::path; use crate::components::admin_portal::AdminPortal; use crate::components::header::Header; use crate::components::user_menu::MenuOpener; use crate::pages::all_reservations::Bookings; use crate::pages::appearance_settings::Appearance; use crate::pages::customers::Customers; use crate::pages::login::Login; use crate::pages::mail_settings::MailSettings; use crate::pages::public::Public; #[derive(Clone, Copy, Debug)] pub struct MenuHelper { opened: RwSignal> } impl MenuHelper { pub fn new() -> Self { let opened = RwSignal::new(None); Self { opened } } pub fn set_opened(&self, opened: MenuOpener) { self.opened.set(Some(opened)); } pub fn close(&self) { if let Some(opened) = self.opened.get_untracked() { opened.close(); } } pub fn reset(&self) { self.opened.set(None); } } #[derive(Clone, Copy)] pub struct DialogHelper { opened: RwSignal } impl DialogHelper { pub fn new() -> Self { let opened = RwSignal::new(false); Self { opened } } pub fn set_opened(&self, opened: bool) { self.opened.set(opened); } pub fn is_open(&self) -> bool { self.opened.get() } } #[component] fn app_footer() -> impl IntoView { let loc = use_location(); view! {
{format!(" v {}", env!("CARGO_PKG_VERSION"))}
} } #[component] pub fn App() -> impl IntoView { // Provides context that manages stylesheets, titles, meta tags, etc. provide_meta_context(); init_locales(); provide_context(MenuHelper::new()); // Only one menu can be opened provide_context(MenuOpener::new()); // Drawer opener provide_context(DialogHelper::new()); // Gray dialog background view! {
}/> }/> }/> }/> }/> }/> }/> }/>
} }