Files
econ/frontend/src/App.tsx
Renato a2ed69fdb8 Fix login blank screen and progress persistence
- Fix authStore to persist user data, not just isAuthenticated
- Fix progressStore handling of undefined API responses
- Remove minimax.md documentation file
- All progress now properly saves to PostgreSQL
- Login flow working correctly
2026-02-12 03:38:33 +01:00

119 lines
2.7 KiB
TypeScript

import { useEffect } from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { useAuthStore } from './stores/authStore';
import { Login } from './pages/Login';
import { Dashboard } from './pages/Dashboard';
import { Modulos } from './pages/Modulos';
import { Modulo } from './pages/Modulo';
import { AdminPanel } from './pages/admin/AdminPanel';
import { RecursosPage } from './pages/Recursos';
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const { isAuthenticated, isLoading } = useAuthStore();
if (isLoading) {
return (
<div className="min-h-screen flex items-center justify-center">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary"></div>
</div>
);
}
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
}
function App() {
const { checkAuth } = useAuthStore();
useEffect(() => {
checkAuth();
}, [checkAuth]);
return (
<BrowserRouter>
<Routes>
<Route path="/login" element={<Login />} />
<Route
path="/"
element={
<ProtectedRoute>
<Dashboard />
</ProtectedRoute>
}
/>
<Route
path="/modulos"
element={
<ProtectedRoute>
<Modulos />
</ProtectedRoute>
}
/>
<Route
path="/modulo/:numero"
element={
<ProtectedRoute>
<Modulo />
</ProtectedRoute>
}
/>
<Route
path="/modulo/1"
element={
<ProtectedRoute>
<Modulo />
</ProtectedRoute>
}
/>
<Route
path="/modulo/2"
element={
<ProtectedRoute>
<Modulo />
</ProtectedRoute>
}
/>
<Route
path="/modulo/3"
element={
<ProtectedRoute>
<Modulo />
</ProtectedRoute>
}
/>
<Route
path="/modulo/4"
element={
<ProtectedRoute>
<Modulo />
</ProtectedRoute>
}
/>
<Route
path="/admin"
element={
<ProtectedRoute>
<AdminPanel />
</ProtectedRoute>
}
/>
<Route
path="/recursos"
element={
<ProtectedRoute>
<RecursosPage />
</ProtectedRoute>
}
/>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</BrowserRouter>
);
}
export default App;