import React, { useEffect, useState } from 'react'; import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import { bootstrapFrappeUserFromSession } from './utils/bootstrapFrappeUserFromSession'; import Login from './pages/Login'; import Sidebar from './components/Sidebar'; import Header from './components/Header'; import UserProfilePage from './pages/UserProfilePage'; import ProjectModulePage from './pages/ProjectModulePage'; import ProjectReportsDashboard from './pages/ProjectReportsDashboard'; import ProjectList from './pages/ProjectList'; import ProjectDetail from './pages/ProjectDetail'; import TaskList from './pages/TaskList'; import TaskDetail from './pages/TaskDetail'; import TimesheetList from './pages/TimesheetList'; import TimesheetDetail from './pages/TimesheetDetail'; import ActivityTypeList from './pages/ActivityTypeList'; import ActivityTypeDetail from './pages/ActivityTypeDetail'; import ProjectTemplateList from './pages/ProjectTemplateList'; import ProjectTemplateDetail from './pages/ProjectTemplateDetail'; import CustomerList from './pages/CustomerList'; import CustomerDetail from './pages/CustomerDetail'; import EmployeeList from './pages/EmployeeList'; import EmployeeDetail from './pages/EmployeeDetail'; import SalesInvoiceList from './pages/SalesInvoiceList'; import SalesInvoiceDetail from './pages/SalesInvoiceDetail'; import SalesOrderList from './pages/SalesOrderList'; import SalesOrderDetail from './pages/SalesOrderDetail'; import PurchaseOrderList from './pages/PurchaseOrderList'; import PurchaseOrderDetail from './pages/PurchaseOrderDetail'; import DeliveryNoteList from './pages/DeliveryNoteList'; import DeliveryNoteDetail from './pages/DeliveryNoteDetail'; import MaterialRequestList from './pages/MaterialRequestList'; import MaterialRequestDetail from './pages/MaterialRequestDetail'; import PurchaseReceiptList from './pages/PurchaseReceiptList'; import PurchaseReceiptDetail from './pages/PurchaseReceiptDetail'; import PaymentEntryList from './pages/PaymentEntryList'; import PaymentEntryDetail from './pages/PaymentEntryDetail'; import { SidebarLayoutProvider } from './contexts/SidebarLayoutContext'; const LayoutWithSidebar: React.FC<{ children: React.ReactNode }> = ({ children }) => { const user = localStorage.getItem('user'); const userEmail = user ? JSON.parse(user).email : ''; return (
{children}
); }; const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [status, setStatus] = useState<'loading' | 'authed' | 'guest'>('loading'); useEffect(() => { let cancelled = false; (async () => { if (localStorage.getItem('user')) { if (!cancelled) setStatus('authed'); return; } const result = await bootstrapFrappeUserFromSession(); if (!cancelled) setStatus(result.ok ? 'authed' : 'guest'); })(); return () => { cancelled = true; }; }, []); if (status === 'loading') { return (
Loading…
); } if (status === 'guest') { return ; } return <>{children}; }; const App: React.FC = () => ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); export default App;