Spaces:
Running
Running
File size: 2,945 Bytes
07e8920 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
import { AuthProvider, useAuth } from "./contexts/AuthContext";
import { LeaveProvider } from "./contexts/LeaveContext";
import { NotificationProvider } from "./contexts/NotificationContext";
import { EmployeeProvider } from "./contexts/EmployeeContext";
import { Navbar } from "./components/common/Navbar";
import { Login } from "./pages/Login";
import { Home } from "./pages/Home";
import { EmployeeDashboard } from "./pages/EmployeeDashboard";
import { ManagerDashboard } from "./pages/ManagerDashboard";
import { HRDashboard } from "./pages/HRDashboard";
import { ChatPage } from "./pages/ChatPage";
function ProtectedRoute({ children, allowedRoles }) {
const { user, loading } = useAuth();
if (loading) return <div className="flex items-center justify-center min-h-screen"><p className="text-gray-500">Loading...</p></div>;
if (!user) return <Navigate to="/login" />;
if (allowedRoles && !allowedRoles.includes(user.role)) {
if (user.role === "employee") return <Navigate to="/dashboard" />;
if (user.role === "manager") return <Navigate to="/manager-dashboard" />;
if (user.role === "hr") return <Navigate to="/hr/dashboard" />;
return <Navigate to="/login" />;
}
return children;
}
function AppLayout({ children, allowedRoles }) {
return (
<ProtectedRoute allowedRoles={allowedRoles}>
<div className="min-h-screen bg-gray-50">
<Navbar />
<main>{children}</main>
</div>
</ProtectedRoute>
);
}
export default function App() {
return (
<BrowserRouter>
<AuthProvider>
<NotificationProvider>
<LeaveProvider>
<EmployeeProvider>
<Routes>
<Route path="/login" element={<Login />} />
<Route path="/" element={<Home />} />
<Route path="/dashboard" element={<AppLayout allowedRoles={["employee"]}><EmployeeDashboard /></AppLayout>} />
<Route path="/apply" element={<AppLayout allowedRoles={["employee"]}><EmployeeDashboard /></AppLayout>} />
<Route path="/manager-dashboard" element={<AppLayout allowedRoles={["manager"]}><ManagerDashboard /></AppLayout>} />
<Route path="/manager/team" element={<AppLayout allowedRoles={["manager"]}><ManagerDashboard /></AppLayout>} />
<Route path="/hr/dashboard" element={<AppLayout allowedRoles={["hr"]}><HRDashboard /></AppLayout>} />
<Route path="/hr/employees" element={<AppLayout allowedRoles={["hr"]}><HRDashboard /></AppLayout>} />
<Route path="/chat" element={<AppLayout allowedRoles={["manager"]}><ChatPage /></AppLayout>} />
<Route path="*" element={<Navigate to="/" />} />
</Routes>
</EmployeeProvider>
</LeaveProvider>
</NotificationProvider>
</AuthProvider>
</BrowserRouter>
);
}
|