import React, { useEffect } from 'react'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { useAuth } from './stores/useAuth'; import { LoginPage } from './features/auth/LoginPage'; import { RegisterPage } from './features/auth/RegisterPage'; import { SettingsPage } from './features/settings/SettingsPage'; import { NewRevisionPage } from './features/ingest/NewRevisionPage'; import { AnalyzePage } from './features/ingest/AnalyzePage'; import { ReviewPage } from './features/ingest/ReviewPage'; import { QuizPage } from './features/quiz/QuizPage'; import { RevisionViewPage } from './features/quiz/RevisionViewPage'; import DashboardPage from './pages/DashboardPage'; import { ParentalGate } from './features/auth/ParentalGate'; import { ProfileSelectionPage } from './features/auth/ProfileSelectionPage'; import { ParentHubPage } from './pages/ParentHubPage'; import { HistoryPage } from './features/quiz/HistoryPage'; import { useThemeEffect } from './stores/useTheme'; function ProtectedRoute({ children }: { children: React.ReactNode }) { const { isAuthenticated, isLoading, checkAuth } = useAuth(); useEffect(() => { checkAuth(); }, []); if (isLoading) return (
); if (!isAuthenticated) return ; return <>{children}; } function MainRedirect() { const { user, activeLearner } = useAuth(); // 1. If parent and no learner selected -> Parent Hub if (user?.role === 'parent' && !activeLearner) { return ; } // 2. If learner (auto-active) or parent with selection -> Dashboard return ; } function LearnerProtectedRoute({ children }: { children: React.ReactNode }) { const { isAuthenticated, activeLearner, isLoading } = useAuth(); if (isLoading) return null; // Or spinner if (!isAuthenticated) return ; if (!activeLearner) return ; return <>{children}; } function ParentalProtectedRoute({ children }: { children: React.ReactNode }) { const { isParentalModeActive } = useAuth(); const [showGate, setShowGate] = React.useState(!isParentalModeActive); if (isParentalModeActive) return <>{children}; if (showGate) { return ( setShowGate(false)} onCancel={() => window.history.back()} /> ); } return <>{children}; } function App() { useThemeEffect(); return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default App;