You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
import { BrowserRouter, Routes, Route } from 'react-router-dom'; |
|
import { AuthProvider } from './hooks/useAuth'; |
|
import { ErrorBoundary } from './components/ErrorBoundary'; |
|
import { Navbar } from './components/Navbar/Navbar'; |
|
import { Footer } from './components/Footer/Footer'; |
|
import { ProtectedRoute } from './components/ProtectedRoute'; |
|
import { LandingPage } from './pages/LandingPage'; |
|
import { AdminPage } from './pages/AdminPage'; |
|
import { VideosAdminPage } from './pages/VideosAdminPage'; |
|
import { SpeechSoundsAdminPage } from './pages/SpeechSoundsAdminPage'; |
|
import { LoginPage } from './pages/LoginPage'; |
|
import { APPS } from './config/apps'; |
|
import './globals.css'; |
|
|
|
function App() { |
|
return ( |
|
<ErrorBoundary> |
|
<BrowserRouter> |
|
<AuthProvider> |
|
<div className="min-h-screen flex flex-col"> |
|
<Navbar /> |
|
<main className="flex-1"> |
|
<Routes> |
|
<Route path="/" element={<LandingPage />} /> |
|
{/* Dynamically generate routes for enabled apps */} |
|
{APPS.filter(app => !app.disabled).map(app => ( |
|
<Route |
|
key={app.id} |
|
path={app.link} |
|
element={<app.component />} |
|
/> |
|
))} |
|
{/* Keep non-app routes separate */} |
|
<Route path="/login" element={<LoginPage />} /> |
|
<Route |
|
path="/admin" |
|
element={ |
|
<ProtectedRoute> |
|
<AdminPage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
<Route |
|
path="/admin/videos" |
|
element={ |
|
<ProtectedRoute> |
|
<VideosAdminPage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
<Route |
|
path="/admin/speech-sounds" |
|
element={ |
|
<ProtectedRoute> |
|
<SpeechSoundsAdminPage /> |
|
</ProtectedRoute> |
|
} |
|
/> |
|
</Routes> |
|
</main> |
|
<Footer /> |
|
</div> |
|
</AuthProvider> |
|
</BrowserRouter> |
|
</ErrorBoundary> |
|
); |
|
} |
|
|
|
export default App; |
|
|
|
|
|
|
|
|