- TranslationHub (/translations): Coverage-Matrix, Batch-Übersetzen pro Tabelle×Sprache - Pair Status: StatusSelect ersetzt durch Action-Bar ✓Reviewed/↩Draft/🚫Block, Reviewed kaskadiert via /pairs/:id/review (Backend prüft 3-Sprachen-Vollständigkeit) - Top-Nav: 'Übersetzungen' zwischen Inhalte und Audio - Dashboard: Übersetzungen-Kachel - tables.js: pictures-Status um 'reviewed' erweitert Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
1.8 KiB
JavaScript
41 lines
1.8 KiB
JavaScript
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
import { getUser } from './lib/api';
|
|
import Login from './pages/Login';
|
|
import Dashboard from './pages/Dashboard';
|
|
import DatabaseAdmin from './pages/DatabaseAdmin';
|
|
import TableView from './pages/TableView';
|
|
import ContentHub from './pages/ContentHub';
|
|
import ContentCreation from './pages/ContentCreation';
|
|
import AudioHub from './pages/AudioHub';
|
|
import WordGenerator from './pages/WordGenerator';
|
|
import Publish from './pages/Publish';
|
|
import Settings from './pages/Settings';
|
|
import TranslationHub from './pages/TranslationHub';
|
|
|
|
function RequireAuth({ children }) {
|
|
const user = getUser();
|
|
if (!user) return <Navigate to="/login" replace />;
|
|
return children;
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/login" element={<Login />} />
|
|
<Route path="/" element={<RequireAuth><Dashboard /></RequireAuth>} />
|
|
<Route path="/db" element={<RequireAuth><DatabaseAdmin /></RequireAuth>} />
|
|
<Route path="/db/:tableKey" element={<RequireAuth><TableView /></RequireAuth>} />
|
|
<Route path="/content" element={<RequireAuth><ContentHub /></RequireAuth>} />
|
|
<Route path="/content/creation" element={<RequireAuth><ContentCreation /></RequireAuth>} />
|
|
<Route path="/audio" element={<RequireAuth><AudioHub /></RequireAuth>} />
|
|
<Route path="/translations" element={<RequireAuth><TranslationHub /></RequireAuth>} />
|
|
<Route path="/content/words" element={<RequireAuth><WordGenerator /></RequireAuth>} />
|
|
<Route path="/publish" element={<RequireAuth><Publish /></RequireAuth>} />
|
|
<Route path="/settings" element={<RequireAuth><Settings /></RequireAuth>} />
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
);
|
|
}
|