71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import React from 'react';
|
|
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { AuthProvider, useAuth } from './context/AuthContext';
|
|
import Login from './components/Login';
|
|
import RHDashboard from './components/RHDashboard';
|
|
|
|
// Composant pour protéger les routes
|
|
const ProtectedRoute = ({ children }) => {
|
|
const { isAuthorized } = useAuth();
|
|
|
|
return isAuthorized ? children : <Navigate to="/login" replace />;
|
|
};
|
|
|
|
// Composant pour rediriger si déjà connecté
|
|
const PublicRoute = ({ children }) => {
|
|
const { isAuthorized } = useAuth();
|
|
|
|
return !isAuthorized ? children : <Navigate to="/dashboard" replace />;
|
|
};
|
|
|
|
function AppContent() {
|
|
return (
|
|
<div className="min-h-screen bg-gray-50">
|
|
<Routes>
|
|
{/* Route de login - accessible seulement si non connecté */}
|
|
<Route
|
|
path="/login"
|
|
element={
|
|
<PublicRoute>
|
|
<Login />
|
|
</PublicRoute>
|
|
}
|
|
/>
|
|
|
|
{/* Route du dashboard - accessible seulement si connecté */}
|
|
<Route
|
|
path="/dashboard"
|
|
element={
|
|
<ProtectedRoute>
|
|
<RHDashboard />
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
|
|
{/* Route par défaut - redirige vers login ou dashboard selon l'état */}
|
|
<Route
|
|
path="/"
|
|
element={<Navigate to="/login" replace />}
|
|
/>
|
|
|
|
{/* Route catch-all pour les URLs non trouvées */}
|
|
<Route
|
|
path="*"
|
|
element={<Navigate to="/login" replace />}
|
|
/>
|
|
</Routes>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
<AuthProvider>
|
|
<Router>
|
|
<AppContent />
|
|
</Router>
|
|
</AuthProvider>
|
|
);
|
|
}
|
|
|
|
export default App; |