83 lines
2.1 KiB
React
83 lines
2.1 KiB
React
|
|
import React from 'react';
|
||
|
|
import { Routes, Route, Navigate } from 'react-router-dom';
|
||
|
|
import { AuthProvider, useAuth } from './contexts/AuthContext';
|
||
|
|
import LoginPage from './pages/LoginPage';
|
||
|
|
import Dashboard from './pages/Dashboard';
|
||
|
|
import ChatPage from './pages/ChatPage';
|
||
|
|
import DocumentsPage from './pages/DocumentsPage';
|
||
|
|
import ToolsPage from './pages/ToolsPage';
|
||
|
|
import AdminPage from './pages/AdminPage';
|
||
|
|
import Layout from './components/Layout';
|
||
|
|
|
||
|
|
function ProtectedRoute({ children }) {
|
||
|
|
const { user, loading } = useAuth();
|
||
|
|
|
||
|
|
if (loading) {
|
||
|
|
return (
|
||
|
|
<div style={{
|
||
|
|
display: 'flex',
|
||
|
|
justifyContent: 'center',
|
||
|
|
alignItems: 'center',
|
||
|
|
height: '100vh',
|
||
|
|
flexDirection: 'column',
|
||
|
|
gap: '1rem'
|
||
|
|
}}>
|
||
|
|
<div style={{
|
||
|
|
width: '2rem',
|
||
|
|
height: '2rem',
|
||
|
|
border: '3px solid #e2e8f0',
|
||
|
|
borderTop: '3px solid #3b82f6',
|
||
|
|
borderRadius: '50%',
|
||
|
|
animation: 'spin 1s linear infinite'
|
||
|
|
}}></div>
|
||
|
|
<p>Loading...</p>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!user) {
|
||
|
|
return <Navigate to="/login" replace />;
|
||
|
|
}
|
||
|
|
|
||
|
|
return <Layout>{children}</Layout>;
|
||
|
|
}
|
||
|
|
|
||
|
|
function App() {
|
||
|
|
return (
|
||
|
|
<AuthProvider>
|
||
|
|
<Routes>
|
||
|
|
<Route path="/login" element={<LoginPage />} />
|
||
|
|
<Route path="/dashboard" element={
|
||
|
|
<ProtectedRoute>
|
||
|
|
<Dashboard />
|
||
|
|
</ProtectedRoute>
|
||
|
|
} />
|
||
|
|
<Route path="/chat" element={
|
||
|
|
<ProtectedRoute>
|
||
|
|
<ChatPage />
|
||
|
|
</ProtectedRoute>
|
||
|
|
} />
|
||
|
|
<Route path="/documents" element={
|
||
|
|
<ProtectedRoute>
|
||
|
|
<DocumentsPage />
|
||
|
|
</ProtectedRoute>
|
||
|
|
} />
|
||
|
|
<Route path="/tools" element={
|
||
|
|
<ProtectedRoute>
|
||
|
|
<ToolsPage />
|
||
|
|
</ProtectedRoute>
|
||
|
|
} />
|
||
|
|
<Route path="/admin" element={
|
||
|
|
<ProtectedRoute>
|
||
|
|
<AdminPage />
|
||
|
|
</ProtectedRoute>
|
||
|
|
} />
|
||
|
|
<Route path="/" element={<Navigate to="/dashboard" replace />} />
|
||
|
|
<Route path="*" element={<Navigate to="/dashboard" replace />} />
|
||
|
|
</Routes>
|
||
|
|
</AuthProvider>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
export default App;
|