import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; import { AuthProvider, useAuth } from '@/auth/AuthProvider'; import { LoginPage } from '@/pages/LoginPage'; import { ProjectsPage } from '@/pages/ProjectsPage'; import { EditorPage } from '@/pages/EditorPage'; import { MembersPage } from '@/pages/MembersPage'; import { IntegrationPage } from '@/pages/IntegrationPage'; import { InvitationPage } from '@/pages/InvitationPage'; import { AdminPage } from '@/pages/AdminPage'; import { PlatformsPage } from '@/pages/PlatformsPage'; import './app.css'; const queryClient = new QueryClient({ defaultOptions: { queries: { // Les données changent parce que d'AUTRES personnes travaillent // dessus. Un rafraîchissement au retour sur l'onglet est le bon // compromis entre fraîcheur et calme visuel. refetchOnWindowFocus: true, staleTime: 30_000, retry: (failureCount, error) => failureCount < 2 && !(error instanceof Error && error.name === 'ApiError'), }, }, }); function Protected({ children }: { children: React.ReactNode }) { const { user, loading } = useAuth(); if (loading) { return (
Chargement…
); } return user ? <>{children} : ; } function App() { return ( } /> {/* Page publique : celui qui clique n'a pas encore de compte. */} } /> } /> } /> } /> } /> } /> } /> } /> ); } const root = document.getElementById('root'); if (root) { createRoot(root).render( , ); }