import React, { useState, useEffect, useCallback } from 'react'; import LoginPage from './pages/LoginPage'; import DashboardPage from './pages/DashboardPage'; import AppsPage from './pages/AppsPage'; import MonitoringPage from './pages/MonitoringPage'; import DeploymentsPage from './pages/DeploymentsPage'; import GiteaPage from './pages/GiteaPage'; import DockerPage from './pages/DockerPage'; import DocumentationPage from './pages/DocumentationPage'; import InventairePage from './pages/InventairePage'; import TerminalPage from './pages/TerminalPage'; import Sidebar from './components/Sidebar'; import useWebSocket from './hooks/useWebSocket'; import { getMe, getApps, logout as apiLogout } from './utils/api'; export default function App() { const [authenticated, setAuthenticated] = useState(false); const [loading, setLoading] = useState(true); const [currentPage, setCurrentPage] = useState('dashboard'); const [apps, setApps] = useState([]); // Vérifier l'authentification au chargement useEffect(() => { const token = localStorage.getItem('dashboard_token'); if (token) { getMe() .then(() => { setAuthenticated(true); fetchApps(); }) .catch(() => { localStorage.removeItem('dashboard_token'); setAuthenticated(false); }) .finally(() => setLoading(false)); } else { setLoading(false); } }, []); const fetchApps = async () => { try { const res = await getApps(); setApps(res.data); } catch (err) { console.error('Erreur chargement apps:', err); } }; // WebSocket handler const handleWsMessage = useCallback((data) => { if (data.type === 'health_update') { setApps(data.data); } }, []); const { connected: wsConnected } = useWebSocket( authenticated ? handleWsMessage : null ); const handleLogin = (data) => { setAuthenticated(true); fetchApps(); }; const handleLogout = async () => { try { await apiLogout(); } catch (e) { // ignore } localStorage.removeItem('dashboard_token'); setAuthenticated(false); setApps([]); }; if (loading) { return (
Chargement...
); } if (!authenticated) { return ; } const renderPage = () => { switch (currentPage) { case 'dashboard': return ; case 'apps': return ; case 'deployments': return ; case 'gitea': return ; case 'docker': return ; case 'monitoring': return ; case 'documentation': return ; case 'inventaire': return ; case 'terminal': return ; default: return ; } }; return (
{renderPage()}
); }