Checkpoint: Résolution définitive de la latence d'affichage du message d'upload : utilisation de flushSync() de React DOM pour forcer un rendu synchrone et immédiat de l'interface avant le traitement du fichier. L'animation "Upload en cours..." s'affiche maintenant instantanément dès la sélection du fichier, sans aucune latence. Déployé sur le VPS de production.

This commit is contained in:
Manus
2026-01-30 09:09:14 -05:00
parent f9401dcb72
commit 1bbbe842b5
2 changed files with 13 additions and 8 deletions

View File

@@ -1,4 +1,5 @@
import { useState, useMemo, useEffect } from "react"; import { useState, useMemo, useEffect } from "react";
import { flushSync } from "react-dom";
import { trpc } from "@/lib/trpc"; import { trpc } from "@/lib/trpc";
import DashboardLayout from "@/components/DashboardLayout"; import DashboardLayout from "@/components/DashboardLayout";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
@@ -179,7 +180,7 @@ function UploadAttestationDialog({
accept=".pdf" accept=".pdf"
className="hidden" className="hidden"
disabled={uploading} disabled={uploading}
onChange={async (e) => { onChange={(e) => {
const file = e.target.files?.[0]; const file = e.target.files?.[0];
if (!file) return; if (!file) return;
@@ -195,13 +196,14 @@ function UploadAttestationDialog({
return; return;
} }
// Afficher immédiatement l'état de chargement // Forcer le rendu synchrone de l'interface AVANT de démarrer l'upload
flushSync(() => {
setUploading(true); setUploading(true);
setUploadProgress(0); setUploadProgress(0);
});
// Attendre que React mette à jour l'interface avant de démarrer l'upload // Démarrer l'upload de manière asynchrone
await new Promise(resolve => setTimeout(resolve, 50)); (async () => {
try { try {
const formData = new FormData(); const formData = new FormData();
formData.append('file', file); formData.append('file', file);
@@ -240,6 +242,7 @@ function UploadAttestationDialog({
} finally { } finally {
setUploading(false); setUploading(false);
} }
})(); // Fermer et exécuter la fonction async
}} }}
/> />
</label> </label>

View File

@@ -1474,3 +1474,5 @@
- [x] Améliorer le feedback visuel pendant le chargement du fichier d'attestation (indicateur immédiat) - [x] Améliorer le feedback visuel pendant le chargement du fichier d'attestation (indicateur immédiat)
- [x] Corriger la latence d'affichage du message d'upload (forcer le rendu avant traitement) - [x] Corriger la latence d'affichage du message d'upload (forcer le rendu avant traitement)
- [x] Restructurer le flux d'upload avec useEffect pour affichage immédiat