DarainHyder
Initial clean deploy commit: removing binary files and venv
25732fb
import React from 'react'
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'
import { Toaster } from 'react-hot-toast'
import { AuthProvider } from './context/AuthContext'
import { useAuth } from './hooks/useAuth'
// Layout
import Navbar from './components/Layout/Navbar'
import Sidebar from './components/Layout/Sidebar'
import Footer from './components/Layout/Footer'
// Pages
import Login from './components/Auth/Login'
import Register from './components/Auth/Register'
import Dashboard from './components/Dashboard/Dashboard'
import Learn from './components/Learn/Learn'
import Quiz from './components/Quiz/Quiz'
import Progress from './components/Progress/Progress'
// Protected Route Component
const ProtectedRoute = ({ children }) => {
const { user, loading } = useAuth()
if (loading) {
return (
<div className="min-h-screen flex items-center justify-center">
<div className="animate-spin rounded-full h-16 w-16 border-t-4 border-b-4 border-primary-600"></div>
</div>
)
}
return user ? children : <Navigate to="/login" />
}
// Main Layout Component
const MainLayout = ({ children }) => {
const [sidebarOpen, setSidebarOpen] = React.useState(true)
return (
<div className="min-h-screen flex">
<Sidebar isOpen={sidebarOpen} />
<div className="flex-1 flex flex-col">
<Navbar onMenuClick={() => setSidebarOpen(!sidebarOpen)} />
<main className="flex-1 overflow-auto">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
{children}
</div>
</main>
<Footer />
</div>
</div>
)
}
function App() {
return (
<AuthProvider>
<Router>
<Toaster
position="top-right"
toastOptions={{
duration: 3000,
style: {
background: '#fff',
color: '#1e293b',
padding: '16px',
borderRadius: '12px',
boxShadow: '0 10px 25px rgba(0,0,0,0.1)',
},
success: {
iconTheme: {
primary: '#0ea5e9',
secondary: '#fff',
},
},
}}
/>
<Routes>
{/* Public Routes */}
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
{/* Protected Routes */}
<Route path="/" element={
<ProtectedRoute>
<MainLayout>
<Dashboard />
</MainLayout>
</ProtectedRoute>
} />
<Route path="/learn" element={
<ProtectedRoute>
<MainLayout>
<Learn />
</MainLayout>
</ProtectedRoute>
} />
<Route path="/learn/:topicId" element={
<ProtectedRoute>
<MainLayout>
<Learn />
</MainLayout>
</ProtectedRoute>
} />
<Route path="/quiz" element={
<ProtectedRoute>
<MainLayout>
<Quiz />
</MainLayout>
</ProtectedRoute>
} />
<Route path="/quiz/:topicId" element={
<ProtectedRoute>
<MainLayout>
<Quiz />
</MainLayout>
</ProtectedRoute>
} />
<Route path="/progress" element={
<ProtectedRoute>
<MainLayout>
<Progress />
</MainLayout>
</ProtectedRoute>
} />
{/* Redirect unknown routes */}
<Route path="*" element={<Navigate to="/" />} />
</Routes>
</Router>
</AuthProvider>
)
}
export default App