import { Navigate, Route, Routes } from 'react-router-dom' import { Center, Spinner } from '@chakra-ui/react' import { Landing } from './pages/Landing' import { Pricing } from './pages/Pricing' import { RequestDemo } from './pages/RequestDemo' import { Login } from './pages/Login' import { Register } from './pages/Register' import { Leads } from './pages/backoffice/Leads' import { Demos } from './pages/backoffice/Demos' import { PremiumDemos } from './pages/backoffice/PremiumDemos' import { Codes } from './pages/backoffice/Codes' import { Subscription } from './pages/backoffice/Subscription' import { Profile } from './pages/backoffice/Profile' import { PublicLayout } from './components/PublicLayout' import { BackofficeLayout } from './components/BackofficeLayout' import { useAuth } from './lib/auth' import type { JSX } from 'react' function RequireAuth({ children }: { children: JSX.Element }) { const { isAuthenticated, initializing } = useAuth() if (initializing) { return (
) } return isAuthenticated ? children : } // Réservé à l'admin : provisioning des démos. function RequireAdmin({ children }: { children: JSX.Element }) { const { isAdmin } = useAuth() return isAdmin ? children : } // Accès aux leads : autorisé pour l'admin, ou pour les comptes non premium. function RequireLeadsAccess({ children }: { children: JSX.Element }) { const { isAdmin, isPremium } = useAuth() const canAccess = isAdmin || !isPremium return canAccess ? children : } // Redirection d'accueil du back-office selon le rôle. function BackofficeHome() { const { role } = useAuth() switch (role) { case 'admin': return case 'client': return default: return } } export function App() { return ( {/* Vitrine publique (header + footer, sans authentification) */} }> } /> } /> } /> } /> } /> {/* Back-office protégé */} } > } /> } /> } /> } /> } /> } /> } /> } /> ) }