import type { ComponentType } from "react"; import { Navigate, Route, Routes } from "react-router-dom"; import { Suspense, lazy } from "react"; import { AppLayout } from "@/components/layout/AppLayout"; import { useAuthStore } from "@/store/authStore"; import { Spinner } from "./components/ui/spinner"; function lazyNamed, TModule extends Record>( importer: () => Promise, exportName: keyof TModule, ) { return lazy(async () => ({ default: (await importer())[exportName], })); } // Lazy load pages const LoginPage = lazyNamed(() => import("@/pages/LoginPage"), "LoginPage"); const DashboardPage = lazyNamed(() => import("@/pages/DashboardPage"), "DashboardPage"); const ReservationsPage = lazyNamed(() => import("@/pages/ReservationsPage"), "ReservationsPage"); const BookingsPage = lazyNamed(() => import("@/pages/BookingsPage"), "BookingsPage"); const NewBookingPage = lazyNamed(() => import("@/pages/NewBookingPage"), "NewBookingPage"); const BookingDetailPage = lazyNamed(() => import("@/pages/BookingDetailPage"), "BookingDetailPage"); const CalendarPage = lazyNamed(() => import("@/pages/CalendarPage"), "CalendarPage"); const RoomsPage = lazyNamed(() => import("@/pages/RoomsPage"), "RoomsPage"); const GuestServicesPage = lazyNamed(() => import("@/pages/GuestServicesPage"), "GuestServicesPage"); const LoyaltyPointsPage = lazyNamed(() => import("@/pages/LoyaltyPointsPage"), "LoyaltyPointsPage"); const HotelRafflesPage = lazyNamed(() => import("@/pages/HotelRafflesPage"), "HotelRafflesPage"); const CustomersPage = lazyNamed(() => import("@/pages/CustomersPage"), "CustomersPage"); const TransactionsPage = lazyNamed(() => import("@/pages/TransactionsPage"), "TransactionsPage"); const PaymentsPage = lazyNamed(() => import("@/pages/PaymentsPage"), "PaymentsPage"); const VisitsPage = lazyNamed(() => import("@/pages/VisitsPage"), "VisitsPage"); const DiscountCodesPage = lazyNamed(() => import("@/pages/DiscountCodesPage"), "DiscountCodesPage"); const ReferralCodesPage = lazyNamed(() => import("@/pages/ReferralCodesPage"), "ReferralCodesPage"); const ManageUsersPage = lazyNamed(() => import("@/pages/ManageUsersPage"), "ManageUsersPage"); const SettingsPage = lazyNamed(() => import("@/pages/SettingsPage"), "SettingsPage"); function ProtectedLayout() { const accessToken = useAuthStore((s) => s.accessToken); const bootstrapped = useAuthStore((s) => s.bootstrapped); if (!bootstrapped) { return (
); } if (!accessToken) return ; return ; } export default function App() { return ( Loading...}> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }