fix(polling): reduce frequency, add max attempts, prevent unnecessary re-renders
This commit is contained in:
parent
2d52564455
commit
57d4d9cf5a
18
src/App.tsx
18
src/App.tsx
@ -79,10 +79,22 @@ export default function App() {
|
|||||||
(folderHash: string) => {
|
(folderHash: string) => {
|
||||||
console.log('🔄 [APP] Démarrage du polling pour le dossier:', folderHash)
|
console.log('🔄 [APP] Démarrage du polling pour le dossier:', folderHash)
|
||||||
|
|
||||||
|
let pollCount = 0
|
||||||
|
const maxPolls = 30 // Maximum 30 tentatives (4 minutes à 8s d'intervalle)
|
||||||
|
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
console.log('🔄 [APP] Polling - Vérification des résultats...')
|
pollCount++
|
||||||
|
console.log(`🔄 [APP] Polling #${pollCount} - Vérification des résultats...`)
|
||||||
|
|
||||||
|
if (pollCount >= maxPolls) {
|
||||||
|
console.log('⏹️ [APP] Arrêt du polling - limite de tentatives atteinte')
|
||||||
|
clearInterval(interval)
|
||||||
|
dispatch(stopPolling())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
dispatch(loadFolderResults(folderHash))
|
dispatch(loadFolderResults(folderHash))
|
||||||
}, 8000) // Polling un peu moins fréquent
|
}, 12000) // Polling moins fréquent (12s)
|
||||||
|
|
||||||
dispatch(setPollingInterval(interval))
|
dispatch(setPollingInterval(interval))
|
||||||
},
|
},
|
||||||
@ -100,8 +112,10 @@ export default function App() {
|
|||||||
// Ne démarrer le polling que si on n'a encore jamais chargé ce dossier
|
// Ne démarrer le polling que si on n'a encore jamais chargé ce dossier
|
||||||
// et seulement quand le backend indique des pending
|
// et seulement quand le backend indique des pending
|
||||||
if (hasPending && currentFolderHash && !pollingInterval) {
|
if (hasPending && currentFolderHash && !pollingInterval) {
|
||||||
|
console.log('🔄 [APP] Démarrage du polling - fichiers en cours détectés')
|
||||||
startPolling(currentFolderHash)
|
startPolling(currentFolderHash)
|
||||||
} else if (!hasPending && pollingInterval) {
|
} else if (!hasPending && pollingInterval) {
|
||||||
|
console.log('⏹️ [APP] Arrêt du polling - tous les fichiers traités')
|
||||||
stopPollingCallback()
|
stopPollingCallback()
|
||||||
}
|
}
|
||||||
}, [hasPending, currentFolderHash, pollingInterval, startPolling, stopPollingCallback])
|
}, [hasPending, currentFolderHash, pollingInterval, startPolling, stopPollingCallback])
|
||||||
|
|||||||
@ -396,14 +396,10 @@ const documentSlice = createSlice({
|
|||||||
state.hasPending = action.payload.hasPending || false
|
state.hasPending = action.payload.hasPending || false
|
||||||
|
|
||||||
// Convertir les résultats en documents pour la compatibilité
|
// Convertir les résultats en documents pour la compatibilité
|
||||||
|
const newDocuments: any[] = []
|
||||||
|
|
||||||
if (action.payload.results && action.payload.results.length > 0) {
|
if (action.payload.results && action.payload.results.length > 0) {
|
||||||
const completedDocs = action.payload.results.map((result) => {
|
const completedDocs = action.payload.results.map((result) => {
|
||||||
console.log(`[STORE] Mapping résultat:`, {
|
|
||||||
fileHash: result.fileHash,
|
|
||||||
fileName: result.document?.fileName,
|
|
||||||
mimeType: result.document?.mimeType,
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: result.fileHash,
|
id: result.fileHash,
|
||||||
name: result.document.fileName,
|
name: result.document.fileName,
|
||||||
@ -414,30 +410,12 @@ const documentSlice = createSlice({
|
|||||||
previewUrl: `/api/folders/${action.payload.folderHash}/files/${result.fileHash}`,
|
previewUrl: `/api/folders/${action.payload.folderHash}/files/${result.fileHash}`,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
newDocuments.push(...completedDocs)
|
||||||
|
}
|
||||||
|
|
||||||
// Ajouter des placeholders pour les fichiers en cours (pending)
|
// Ajouter des placeholders pour les fichiers en cours (pending)
|
||||||
const pendingItems = (action.payload.pending || []).map((p: any) => {
|
if (action.payload.pending && action.payload.pending.length > 0) {
|
||||||
console.log(`[STORE] Mapping pending:`, {
|
const pendingItems = action.payload.pending.map((p: any) => ({
|
||||||
fileHash: p.fileHash,
|
|
||||||
timestamp: p.timestamp,
|
|
||||||
})
|
|
||||||
return {
|
|
||||||
id: p.fileHash,
|
|
||||||
name: p.fileHash,
|
|
||||||
mimeType: 'application/octet-stream',
|
|
||||||
size: 0,
|
|
||||||
uploadDate: new Date(p.timestamp),
|
|
||||||
status: 'processing' as const,
|
|
||||||
previewUrl: '',
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
state.documents = [...completedDocs, ...pendingItems]
|
|
||||||
console.log(`[STORE] Documents finaux avec pending: ${completedDocs.length} completed + ${pendingItems.length} pending = ${state.documents.length} total`)
|
|
||||||
} else {
|
|
||||||
console.log(`[STORE] Aucun résultat à mapper`)
|
|
||||||
// Même s'il n'y a pas encore de résultats, afficher les pending en placeholders
|
|
||||||
const pendingItems = (action.payload.pending || []).map((p: any) => ({
|
|
||||||
id: p.fileHash,
|
id: p.fileHash,
|
||||||
name: p.fileHash,
|
name: p.fileHash,
|
||||||
mimeType: 'application/octet-stream',
|
mimeType: 'application/octet-stream',
|
||||||
@ -446,8 +424,16 @@ const documentSlice = createSlice({
|
|||||||
status: 'processing' as const,
|
status: 'processing' as const,
|
||||||
previewUrl: '',
|
previewUrl: '',
|
||||||
}))
|
}))
|
||||||
state.documents = pendingItems
|
newDocuments.push(...pendingItems)
|
||||||
console.log(`[STORE] Documents pending uniquement: ${pendingItems.length} fichiers`)
|
}
|
||||||
|
|
||||||
|
// Ne mettre à jour que si les documents ont vraiment changé
|
||||||
|
const documentsChanged = JSON.stringify(state.documents) !== JSON.stringify(newDocuments)
|
||||||
|
if (documentsChanged) {
|
||||||
|
state.documents = newDocuments
|
||||||
|
console.log(`[STORE] Documents mis à jour: ${action.payload.results?.length || 0} completed + ${action.payload.pending?.length || 0} pending = ${newDocuments.length} total`)
|
||||||
|
} else {
|
||||||
|
console.log(`[STORE] Documents inchangés, pas de re-render`)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user