refact & cleanup : Sidebar, Button, card, EmptyState, Loader, ServiceObject, StatusBadge, UptameObject, BackupWidget, SecurityWidget, ServicesWidget, SupportCtaWidget, UptimeWidget, DashboardLayout
This commit is contained in:
+52
-30
@@ -1,46 +1,68 @@
|
||||
import { useState } from 'react';
|
||||
import { pb } from './config/pocketbase';
|
||||
import Login from './pages/Auth/Login';
|
||||
import DashboardLayout from './layouts/DashboardLayout';
|
||||
import TrustCenter from './pages/TrustCenter/TrustCenter';
|
||||
import ServiceDesk from './pages/Support/ServiceDesk';
|
||||
import DocumentVault from './pages/Vault/DocumentVault';
|
||||
import AccountSettings from './pages/Account/AccountSettings';
|
||||
import { Routes, Route, Navigate, useNavigate } from 'react-router-dom';
|
||||
import { pb } from '@/services/pocketbase';
|
||||
|
||||
// Layout & Pages
|
||||
import Login from '@/pages/Login';
|
||||
import DashboardLayout from '@/layouts/DashboardLayout';
|
||||
import TrustCenter from '@/pages/TrustCenter';
|
||||
import ServiceDesk from '@/pages/ServiceDesk';
|
||||
import DocumentVault from '@/pages/DocumentVault';
|
||||
import AccountSettings from '@/pages/AccountSettings';
|
||||
import { InfrastructureEvolution } from '@/pages/InfrastructureEvolution';
|
||||
import Analytics from '@/pages/Analytics';
|
||||
import Backups from '@/pages/Backups';
|
||||
|
||||
function App() {
|
||||
// On initialise l'état avec la présence du token, mais on ne met plus
|
||||
// d'écouteur automatique. C'est le composant Login qui gérera le flux.
|
||||
const [isAuthenticated, setIsAuthenticated] = useState(pb.authStore.isValid);
|
||||
const [activeView, setActiveView] = useState<'dashboard' | 'support' | 'vault' | 'account'>('dashboard');
|
||||
const navigate = useNavigate();
|
||||
|
||||
const handleLogout = () => {
|
||||
pb.authStore.clear(); // Détruit le jeton de sécurité
|
||||
pb.authStore.clear();
|
||||
setIsAuthenticated(false);
|
||||
navigate('/', { replace: true });
|
||||
};
|
||||
|
||||
// Tant que l'utilisateur n'est pas totalement authentifié (MFA inclus),
|
||||
// on le maintient dans le sas de sécurité.
|
||||
// --- SAS DE SÉCURITÉ (Auth Guard) ---
|
||||
// Si non authentifié, on force l'affichage du composant Login peu importe l'URL demandée.
|
||||
if (!isAuthenticated) {
|
||||
return <Login onLoginSuccess={() => setIsAuthenticated(true)} />;
|
||||
return (
|
||||
<Routes>
|
||||
<Route
|
||||
path="*"
|
||||
element={
|
||||
<Login onLoginSuccess={() => {
|
||||
setIsAuthenticated(true);
|
||||
navigate('/dashboard', { replace: true });
|
||||
}} />
|
||||
}
|
||||
/>
|
||||
</Routes>
|
||||
);
|
||||
}
|
||||
|
||||
const renderContent = () => {
|
||||
switch (activeView) {
|
||||
case 'dashboard': return <TrustCenter onNavigate={setActiveView} />;
|
||||
case 'support': return <ServiceDesk />;
|
||||
case 'vault': return <DocumentVault />;
|
||||
case 'account': return <AccountSettings />;
|
||||
default: return <TrustCenter onNavigate={setActiveView} />;
|
||||
}
|
||||
};
|
||||
|
||||
// --- APPLICATION SÉCURISÉE ---
|
||||
// Une fois connecté, le DashboardLayout enveloppe nos véritables routes (URLs)
|
||||
return (
|
||||
<DashboardLayout
|
||||
activeView={activeView}
|
||||
onNavigate={setActiveView}
|
||||
onLogout={handleLogout}
|
||||
>
|
||||
{renderContent()}
|
||||
<DashboardLayout onLogout={handleLogout}>
|
||||
<Routes>
|
||||
{/* Redirection par défaut */}
|
||||
<Route path="/" element={<Navigate to="/dashboard" replace />} />
|
||||
|
||||
{/* Pages du menu principal */}
|
||||
<Route path="/dashboard" element={<TrustCenter />} />
|
||||
<Route path="/support" element={<ServiceDesk />} />
|
||||
<Route path="/vault" element={<DocumentVault />} />
|
||||
<Route path="/account" element={<AccountSettings />} />
|
||||
|
||||
{/* Pages stratégiques (anciennes modales) */}
|
||||
<Route path="/evolution-infrastructure" element={<InfrastructureEvolution />} />
|
||||
<Route path="/analytics" element={<Analytics />} />
|
||||
<Route path="/backups" element={<Backups />} />
|
||||
|
||||
{/* Sécurité : Si l'URL n'existe pas, on redirige vers le dashboard */}
|
||||
<Route path="*" element={<Navigate to="/dashboard" replace />} />
|
||||
</Routes>
|
||||
</DashboardLayout>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user