import { useEffect, useCallback } from 'react' import './App.css' import { AppRouter } from './router' import { useAppDispatch, useAppSelector } from './store' import { createDefaultFolderThunk, loadFolderResults, setCurrentFolderHash, setBootstrapped, setPollingInterval, stopPolling } from './store/documentSlice' export default function App() { const dispatch = useAppDispatch() const { documents, bootstrapped, currentFolderHash, folderResults, hasPending, pollingInterval } = useAppSelector((state) => state.document) // Bootstrap au démarrage de l'application avec système de dossiers useEffect(() => { console.log('🔍 [APP] useEffect déclenché:', { documentsLength: documents.length, bootstrapped, currentFolderHash, folderResultsLength: folderResults.length, isDev: import.meta.env.DEV }) // Récupérer le hash du dossier depuis l'URL const urlParams = new URLSearchParams(window.location.search) const urlFolderHash = urlParams.get('hash') console.log('🔍 [APP] Hash du dossier depuis URL:', urlFolderHash) const initializeFolder = async () => { try { let folderHash = urlFolderHash || currentFolderHash // Si pas de hash de dossier, créer le dossier par défaut if (!folderHash) { console.log('🚀 [APP] Création du dossier par défaut...') const result = await dispatch(createDefaultFolderThunk()).unwrap() folderHash = result.folderHash console.log('✅ [APP] Dossier par défaut créé:', folderHash) } // Charger les résultats du dossier console.log('📁 [APP] Chargement des résultats du dossier:', folderHash) await dispatch(loadFolderResults(folderHash)).unwrap() // Marquer le bootstrap comme terminé dispatch(setBootstrapped(true)) console.log('🎉 [APP] Bootstrap terminé avec le dossier:', folderHash) } catch (error) { console.error('❌ [APP] Erreur lors de l\'initialisation du dossier:', error) } } // Ne pas refaire le bootstrap si déjà fait if (bootstrapped) { console.log('⏭️ [APP] Bootstrap déjà effectué, dossier:', currentFolderHash) return } initializeFolder() }, [dispatch, bootstrapped, currentFolderHash, folderResults.length]) // Fonction pour démarrer le polling const startPolling = useCallback((folderHash: string) => { console.log('🔄 [APP] Démarrage du polling pour le dossier:', folderHash) const interval = setInterval(() => { console.log('🔄 [APP] Polling - Vérification des résultats...') dispatch(loadFolderResults(folderHash)) }, 5000) // Polling toutes les 5 secondes dispatch(setPollingInterval(interval)) }, [dispatch]) // Fonction pour arrêter le polling const stopPollingCallback = useCallback(() => { console.log('⏹️ [APP] Arrêt du polling') dispatch(stopPolling()) }, [dispatch]) // Gestion du polling basé sur l'état hasPending useEffect(() => { if (hasPending && currentFolderHash && !pollingInterval) { startPolling(currentFolderHash) } else if (!hasPending && pollingInterval) { stopPollingCallback() } }, [hasPending, currentFolderHash, pollingInterval, startPolling, stopPollingCallback]) // Nettoyage au démontage du composant useEffect(() => { return () => { if (pollingInterval) { clearInterval(pollingInterval) } } }, [pollingInterval]) return }