Files
redlight/src/App.jsx
T
Michelle 6e301e2928
Build & Push Docker Image / build (push) Successful in 6m33s
feat(notfound): add NotFound page with 404 handling and localization
2026-03-04 08:57:21 +01:00

74 lines
2.8 KiB
React

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';
import FederationInbox from './pages/FederationInbox';
import FederatedRoomDetail from './pages/FederatedRoomDetail';
import Calendar from './pages/Calendar';
import OAuthCallback from './pages/OAuthCallback';
import NotFound from './pages/NotFound';
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 (
<div className="min-h-screen bg-th-bg flex items-center justify-center">
<div className="animate-spin rounded-full h-12 w-12 border-4 border-th-accent border-t-transparent" />
</div>
);
}
return (
<Routes>
{/* Public routes */}
<Route path="/" element={user ? <Navigate to="/dashboard" /> : <Home />} />
<Route path="/login" element={user ? <Navigate to="/dashboard" /> : <Login />} />
<Route path="/register" element={user ? <Navigate to="/dashboard" /> : <Register />} />
<Route path="/verify-email" element={<VerifyEmail />} />
<Route path="/oauth/callback" element={<OAuthCallback />} />
<Route path="/join/:uid" element={<GuestJoin />} />
{/* Protected routes */}
<Route element={<ProtectedRoute><Layout /></ProtectedRoute>}>
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/calendar" element={<Calendar />} />
<Route path="/rooms/:uid" element={<RoomDetail />} />
<Route path="/settings" element={<Settings />} />
<Route path="/admin" element={<Admin />} />
<Route path="/federation/inbox" element={<FederationInbox />} />
<Route path="/federation/rooms/:id" element={<FederatedRoomDetail />} />
</Route>
{/* 404 */}
<Route path="*" element={<NotFound />} />
</Routes>
);
}