|
|
import React from "react"; |
|
|
|
|
|
import { |
|
|
BrowserRouter as Router, |
|
|
Routes, |
|
|
Route, |
|
|
Navigate, |
|
|
} from "react-router-dom"; |
|
|
|
|
|
import Home from "./pages/home"; |
|
|
import Dashboard from "./pages/dashboard"; |
|
|
import Notes from "./pages/note"; |
|
|
import AIInterview from "./pages/AiInterview"; |
|
|
import Quize from "./pages/quize"; |
|
|
import Sidebar from "./components/dashboard/Sidebar"; |
|
|
|
|
|
import { AuthProvider, useAuth } from "./components/context/AuthContext"; |
|
|
import ProtectedRoute from "./routes/ProtectedRoute"; |
|
|
import { Loader2 } from "lucide-react"; |
|
|
|
|
|
|
|
|
const DashboardLayout = () => { |
|
|
return ( |
|
|
<div className="flex h-screen bg-gray-100"> |
|
|
<Sidebar /> |
|
|
<main className="flex-1 overflow-y-auto"> |
|
|
<Routes> |
|
|
<Route path="/dashboard" element={<Dashboard />} /> |
|
|
<Route path="/notes" element={<Notes />} /> |
|
|
<Route path="/AIInterview" element={<AIInterview />} /> |
|
|
<Route path="/quize" element={<Quize />} /> |
|
|
<Route path="*" element={<Navigate to="/dashboard" />} /> |
|
|
</Routes> |
|
|
</main> |
|
|
</div> |
|
|
); |
|
|
}; |
|
|
|
|
|
|
|
|
const HomeWrapper = () => { |
|
|
const { isAuthenticated, login } = useAuth(); |
|
|
if (isAuthenticated) return <Navigate to="/dashboard" replace />; |
|
|
return <Home onLogin={login} />; |
|
|
}; |
|
|
|
|
|
|
|
|
const AppRoutes = () => { |
|
|
const { isLoading } = useAuth(); |
|
|
|
|
|
|
|
|
|
|
|
if (isLoading) { |
|
|
return ( |
|
|
<div className="flex h-screen w-full items-center justify-center bg-gray-900 text-white"> |
|
|
<Loader2 className="h-10 w-10 animate-spin text-blue-500" /> |
|
|
</div> |
|
|
); |
|
|
} |
|
|
|
|
|
return ( |
|
|
<Router> |
|
|
<Routes> |
|
|
{/* Public Home */} |
|
|
<Route path="/" element={<HomeWrapper />} /> |
|
|
|
|
|
{/* Protected Dashboard Routes */} |
|
|
<Route |
|
|
path="/*" |
|
|
element={ |
|
|
<ProtectedRoute> |
|
|
<DashboardLayout /> |
|
|
</ProtectedRoute> |
|
|
} |
|
|
/> |
|
|
</Routes> |
|
|
</Router> |
|
|
); |
|
|
}; |
|
|
|
|
|
const App: React.FC = () => { |
|
|
return ( |
|
|
<AuthProvider> |
|
|
<AppRoutes /> |
|
|
</AuthProvider> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default App; |
|
|
|