39 lines
1.2 KiB
React
39 lines
1.2 KiB
React
// frontend/src/App.jsx
|
|
|
|
import React, { useState, useEffect } from 'react';
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import Layout from './components/Layout/Layout';
|
|
import Dashboard from './pages/Dashboard';
|
|
import TournamentPage from './pages/TournamentPage';
|
|
import Login from './pages/Login';
|
|
|
|
export default function App() {
|
|
const [darkMode, setDarkMode] = useState(() => localStorage.theme === 'dark');
|
|
|
|
useEffect(() => {
|
|
const root = window.document.documentElement;
|
|
if (darkMode) {
|
|
root.classList.add('dark');
|
|
localStorage.setItem('theme', 'dark');
|
|
} else {
|
|
root.classList.remove('dark');
|
|
localStorage.setItem('theme', 'light');
|
|
}
|
|
}, [darkMode]);
|
|
|
|
return (
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/login" element={<Login />} />
|
|
|
|
{/* Main App Layout */}
|
|
<Route element={<Layout darkMode={darkMode} setDarkMode={setDarkMode} />}>
|
|
<Route path="/" element={<Dashboard />} />
|
|
<Route path="/tournaments/:id" element={<TournamentPage />} />
|
|
</Route>
|
|
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
);
|
|
} |