import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import React from "react"; import ReactDOM from "react-dom/client"; import { createBrowserRouter, Navigate, RouterProvider } from "react-router-dom"; import { permissions } from "@mrp/shared"; import { AppShell } from "./components/AppShell"; import { ProtectedRoute } from "./components/ProtectedRoute"; import { AuthProvider } from "./auth/AuthProvider"; import { DashboardPage } from "./modules/dashboard/DashboardPage"; import { LoginPage } from "./modules/login/LoginPage"; import { ThemeProvider } from "./theme/ThemeProvider"; import "./index.css"; const queryClient = new QueryClient(); const CompanySettingsPage = React.lazy(() => import("./modules/settings/CompanySettingsPage").then((module) => ({ default: module.CompanySettingsPage })) ); const AdminDiagnosticsPage = React.lazy(() => import("./modules/settings/AdminDiagnosticsPage").then((module) => ({ default: module.AdminDiagnosticsPage })) ); const UserManagementPage = React.lazy(() => import("./modules/settings/UserManagementPage").then((module) => ({ default: module.UserManagementPage })) ); const CustomersPage = React.lazy(() => import("./modules/crm/CustomersPage").then((module) => ({ default: module.CustomersPage })) ); const VendorsPage = React.lazy(() => import("./modules/crm/VendorsPage").then((module) => ({ default: module.VendorsPage })) ); const CrmDetailPage = React.lazy(() => import("./modules/crm/CrmDetailPage").then((module) => ({ default: module.CrmDetailPage })) ); const CrmFormPage = React.lazy(() => import("./modules/crm/CrmFormPage").then((module) => ({ default: module.CrmFormPage })) ); const InventoryItemsPage = React.lazy(() => import("./modules/inventory/InventoryItemsPage").then((module) => ({ default: module.InventoryItemsPage })) ); const InventoryDetailPage = React.lazy(() => import("./modules/inventory/InventoryDetailPage").then((module) => ({ default: module.InventoryDetailPage })) ); const InventoryFormPage = React.lazy(() => import("./modules/inventory/InventoryFormPage").then((module) => ({ default: module.InventoryFormPage })) ); const InventorySkuMasterPage = React.lazy(() => import("./modules/inventory/InventorySkuMasterPage").then((module) => ({ default: module.InventorySkuMasterPage })) ); const WarehousesPage = React.lazy(() => import("./modules/inventory/WarehousesPage").then((module) => ({ default: module.WarehousesPage })) ); const WarehouseDetailPage = React.lazy(() => import("./modules/inventory/WarehouseDetailPage").then((module) => ({ default: module.WarehouseDetailPage })) ); const WarehouseFormPage = React.lazy(() => import("./modules/inventory/WarehouseFormPage").then((module) => ({ default: module.WarehouseFormPage })) ); const ProjectsPage = React.lazy(() => import("./modules/projects/ProjectsPage").then((module) => ({ default: module.ProjectsPage })) ); const ProjectDetailPage = React.lazy(() => import("./modules/projects/ProjectDetailPage").then((module) => ({ default: module.ProjectDetailPage })) ); const ProjectFormPage = React.lazy(() => import("./modules/projects/ProjectFormPage").then((module) => ({ default: module.ProjectFormPage })) ); const ManufacturingPage = React.lazy(() => import("./modules/manufacturing/ManufacturingPage").then((module) => ({ default: module.ManufacturingPage })) ); const WorkOrderDetailPage = React.lazy(() => import("./modules/manufacturing/WorkOrderDetailPage").then((module) => ({ default: module.WorkOrderDetailPage })) ); const WorkOrderFormPage = React.lazy(() => import("./modules/manufacturing/WorkOrderFormPage").then((module) => ({ default: module.WorkOrderFormPage })) ); const PurchaseListPage = React.lazy(() => import("./modules/purchasing/PurchaseListPage").then((module) => ({ default: module.PurchaseListPage })) ); const PurchaseDetailPage = React.lazy(() => import("./modules/purchasing/PurchaseDetailPage").then((module) => ({ default: module.PurchaseDetailPage })) ); const PurchaseFormPage = React.lazy(() => import("./modules/purchasing/PurchaseFormPage").then((module) => ({ default: module.PurchaseFormPage })) ); const SalesListPage = React.lazy(() => import("./modules/sales/SalesListPage").then((module) => ({ default: module.SalesListPage })) ); const SalesDetailPage = React.lazy(() => import("./modules/sales/SalesDetailPage").then((module) => ({ default: module.SalesDetailPage })) ); const SalesFormPage = React.lazy(() => import("./modules/sales/SalesFormPage").then((module) => ({ default: module.SalesFormPage })) ); const ShipmentListPage = React.lazy(() => import("./modules/shipping/ShipmentListPage").then((module) => ({ default: module.ShipmentListPage })) ); const ShipmentDetailPage = React.lazy(() => import("./modules/shipping/ShipmentDetailPage").then((module) => ({ default: module.ShipmentDetailPage })) ); const ShipmentFormPage = React.lazy(() => import("./modules/shipping/ShipmentFormPage").then((module) => ({ default: module.ShipmentFormPage })) ); const GanttPage = React.lazy(() => import("./modules/gantt/GanttPage").then((module) => ({ default: module.GanttPage })) ); function RouteFallback() { return (
Loading module...
); } function lazyElement(element: React.ReactNode) { return }>{element}; } const router = createBrowserRouter([ { path: "/login", element: }, { element: , children: [ { element: , children: [ { path: "/", element: }, { element: , children: [{ path: "/settings/company", element: lazyElement() }], }, { element: , children: [ { path: "/settings/admin-diagnostics", element: lazyElement() }, { path: "/settings/users", element: lazyElement() }, ], }, { element: , children: [ { path: "/crm/customers", element: lazyElement() }, { path: "/crm/customers/:customerId", element: lazyElement() }, { path: "/crm/vendors", element: lazyElement() }, { path: "/crm/vendors/:vendorId", element: lazyElement() }, ], }, { element: , children: [ { path: "/inventory/items", element: lazyElement() }, { path: "/inventory/items/:itemId", element: lazyElement() }, { path: "/inventory/sku-master", element: lazyElement() }, { path: "/inventory/warehouses", element: lazyElement() }, { path: "/inventory/warehouses/:warehouseId", element: lazyElement() }, ], }, { element: , children: [ { path: "/projects", element: lazyElement() }, { path: "/projects/:projectId", element: lazyElement() }, ], }, { element: , children: [ { path: "/manufacturing/work-orders", element: lazyElement() }, { path: "/manufacturing/work-orders/:workOrderId", element: lazyElement() }, ], }, { element: , children: [ { path: "/purchasing/orders", element: lazyElement() }, { path: "/purchasing/orders/:orderId", element: lazyElement() }, ], }, { element: , children: [ { path: "/sales/quotes", element: lazyElement() }, { path: "/sales/quotes/:quoteId", element: lazyElement() }, { path: "/sales/orders", element: lazyElement() }, { path: "/sales/orders/:orderId", element: lazyElement() }, ], }, { element: , children: [ { path: "/shipping/shipments", element: lazyElement() }, { path: "/shipping/shipments/:shipmentId", element: lazyElement() }, ], }, { element: , children: [ { path: "/crm/customers/new", element: lazyElement() }, { path: "/crm/customers/:customerId/edit", element: lazyElement() }, { path: "/crm/vendors/new", element: lazyElement() }, { path: "/crm/vendors/:vendorId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/projects/new", element: lazyElement() }, { path: "/projects/:projectId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/manufacturing/work-orders/new", element: lazyElement() }, { path: "/manufacturing/work-orders/:workOrderId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/purchasing/orders/new", element: lazyElement() }, { path: "/purchasing/orders/:orderId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/sales/quotes/new", element: lazyElement() }, { path: "/sales/quotes/:quoteId/edit", element: lazyElement() }, { path: "/sales/orders/new", element: lazyElement() }, { path: "/sales/orders/:orderId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/shipping/shipments/new", element: lazyElement() }, { path: "/shipping/shipments/:shipmentId/edit", element: lazyElement() }, ], }, { element: , children: [ { path: "/inventory/items/new", element: lazyElement() }, { path: "/inventory/items/:itemId/edit", element: lazyElement() }, { path: "/inventory/warehouses/new", element: lazyElement() }, { path: "/inventory/warehouses/:warehouseId/edit", element: lazyElement() }, ], }, { element: , children: [{ path: "/planning/gantt", element: lazyElement() }], }, ], }, ], }, { path: "*", element: }, ]); ReactDOM.createRoot(document.getElementById("root")!).render( );