import { useEffect } from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { useAuth } from './contexts/AuthContext'; import { useLanguage } from './contexts/LanguageContext'; import { useBranding } from './contexts/BrandingContext'; import Layout from './components/Layout'; import ProtectedRoute from './components/ProtectedRoute'; import Home from './pages/Home'; import Login from './pages/Login'; import Register from './pages/Register'; import VerifyEmail from './pages/VerifyEmail'; import Dashboard from './pages/Dashboard'; import RoomDetail from './pages/RoomDetail'; import Settings from './pages/Settings'; import Admin from './pages/Admin'; import GuestJoin from './pages/GuestJoin'; export default function App() { const { user, loading } = useAuth(); const { setLanguage } = useLanguage(); const { appName } = useBranding(); // Sync language from server when user loads useEffect(() => { if (user?.language) { setLanguage(user.language); } }, [user?.language, setLanguage]); // Update document title with branding useEffect(() => { document.title = `${appName} - BigBlueButton Frontend`; }, [appName]); if (loading) { return (
); } return ( {/* Public routes */} : } /> : } /> : } /> } /> } /> {/* Protected routes */} }> } /> } /> } /> } /> {/* Catch all */} } /> ); }