import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { Suspense, lazy } from 'react'; import { AuthProvider } from './contexts/AuthContext'; import { ThemeProvider } from './contexts/ThemeContext'; import { ToastProvider } from './contexts/ToastContext'; import { ErrorBoundary } from './components/common/ErrorBoundary'; import { LoadingSpinner } from './components/ui/LoadingSpinner'; import { queryClient } from './lib/queryClient'; import { useAuth } from './contexts/AuthContext'; import { Layout } from './components/layout/Layout'; // Lazy load pages for better code splitting const Login = lazy(() => import('./pages/Login').then(module => ({ default: module.Login }))); const Dashboard = lazy(() => import('./pages/Dashboard').then(module => ({ default: module.Dashboard }))); const Users = lazy(() => import('./pages/Users').then(module => ({ default: module.Users }))); const Reports = lazy(() => import('./pages/Reports').then(module => ({ default: module.Reports }))); const Notifications = lazy(() => import('./pages/Notifications').then(module => ({ default: module.Notifications }))); // Lazy load admin pages for better code splitting // Roles Pages const RolesListPage = lazy(() => import('./pages/roles/roles-list/RolesListPage')); const RoleFormPage = lazy(() => import('./pages/roles/role-form/RoleFormPage')); const RoleDetailPage = lazy(() => import('./pages/roles/role-detail/RoleDetailPage')); const RolePermissionsPage = lazy(() => import('./pages/roles/role-permissions/RolePermissionsPage')); // Admin Users Pages const AdminUsersListPage = lazy(() => import('./pages/admin-users/admin-users-list/AdminUsersListPage')); const AdminUserFormPage = lazy(() => import('./pages/admin-users/admin-user-form/AdminUserFormPage')); const AdminUserDetailPage = lazy(() => import('./pages/admin-users/admin-user-detail/AdminUserDetailPage')); // Permissions Pages const PermissionsListPage = lazy(() => import('./pages/permissions/permissions-list/PermissionsListPage')); const PermissionFormPage = lazy(() => import('./pages/permissions/permission-form/PermissionFormPage')); // Product Options Pages const ProductOptionsListPage = lazy(() => import('./pages/product-options/product-options-list/ProductOptionsListPage')); const ProductOptionFormPage = lazy(() => import('./pages/product-options/product-option-form/ProductOptionFormPage')); // Categories Pages const CategoriesListPage = lazy(() => import('./pages/categories/categories-list/CategoriesListPage')); const CategoryFormPage = lazy(() => import('./pages/categories/category-form/CategoryFormPage')); // Discount Codes Pages const DiscountCodesListPage = lazy(() => import('./pages/discount-codes/discount-codes-list/DiscountCodesListPage')); const DiscountCodeFormPage = lazy(() => import('./pages/discount-codes/discount-code-form/DiscountCodeFormPage')); // Orders Pages const OrdersListPage = lazy(() => import('./pages/orders/orders-list/OrdersListPage')); const OrderDetailPage = lazy(() => import('./pages/orders/order-detail/OrderDetailPage')); // Users Admin Pages const UsersAdminListPage = lazy(() => import('./pages/users-admin/users-admin-list/UsersAdminListPage')); const UserAdminDetailPage = lazy(() => import('./pages/users-admin/user-admin-detail/UserAdminDetailPage')); const UserAdminFormPage = lazy(() => import('./pages/users-admin/user-admin-form/UserAdminFormPage')); // Products Pages const ProductsListPage = lazy(() => import('./pages/products/products-list/ProductsListPage')); const ProductFormPage = lazy(() => import('./pages/products/product-form/ProductFormPage')); const ProductDetailPage = lazy(() => import('./pages/products/product-detail/ProductDetailPage')); // Landing Hero Page const HeroSliderPage = lazy(() => import('./pages/landing-hero/HeroSliderPage')); // Shipping Methods Pages const ShippingMethodsListPage = lazy(() => import('./pages/shipping-methods/shipping-methods-list/ShippingMethodsListPage')); const ShippingMethodFormPage = lazy(() => import('./pages/shipping-methods/shipping-method-form/ShippingMethodFormPage')); const TicketsListPage = lazy(() => import('./pages/tickets/tickets-list/TicketsListPage')); const TicketDetailPage = lazy(() => import('./pages/tickets/ticket-detail/TicketDetailPage')); const TicketConfigPage = lazy(() => import('./pages/tickets/ticket-config/TicketConfigPage')); // Payment IPG Page const IPGListPage = lazy(() => import('./pages/payment-ipg/ipg-list/IPGListPage')); // Payment Card Page const CardFormPage = lazy(() => import('./pages/payment-card/card-form/CardFormPage')); // Wallet Page const WalletListPage = lazy(() => import('./pages/wallet/wallet-list/WalletListPage')); // Reports Pages const DiscountUsageReportPage = lazy(() => import('./pages/reports/discount-statistics/discount-usage-report/DiscountUsageReportPage')); const CustomerDiscountUsagePage = lazy(() => import('./pages/reports/discount-statistics/customer-discount-usage/CustomerDiscountUsagePage')); const PaymentMethodsReportPage = lazy(() => import('./pages/reports/payment-statistics/payment-methods-report/PaymentMethodsReportPage')); const ShipmentsByMethodReportPage = lazy(() => import('./pages/reports/shipment-statistics/shipments-by-method-report/ShipmentsByMethodReportPage')); // Product Comments Page const ProductCommentsListPage = lazy(() => import('./pages/products/comments/comments-list/ProductCommentsListPage')); const ProtectedRoute = ({ children }: { children: any }) => { const { user, isLoading } = useAuth(); if (isLoading) { return (
); } return user ? children : ; }; const AppRoutes = () => { return ( } /> }> } /> } /> } /> } /> } /> {/* Roles Routes */} } /> } /> } /> } /> } /> {/* Admin Users Routes */} } /> } /> } /> } /> {/* Permissions Routes */} } /> } /> } /> {/* Product Options Routes */} } /> } /> } /> {/* Categories Routes */} } /> } /> } /> {/* Discount Codes Routes */} } /> } /> } /> {/* Orders Routes */} } /> } /> {/* Users Admin Routes */} } /> } /> } /> } /> {/* Landing Hero Route */} } /> {/* Shipping Methods Routes */} } /> } /> } /> } /> } /> } /> {/* Products Routes */} } /> } /> } /> } /> {/* Payment IPG Route */} } /> {/* Payment Card Route */} } /> {/* Wallet Route */} } /> {/* Reports Routes */} } /> } /> } /> } /> ); }; const App = () => { return (
}>
); }; export default App;