From 76d113f538bda3ebe1b1ea46e6c20dffce4fccee Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 4 Nov 2025 13:56:55 +0000 Subject: [PATCH] Improve reconciliation validation feedback and cache updates Update BLReconciliation.tsx to remove toast for non-found invoices, implement optimistic cache updates using queryClient.setQueryData for immediate UI feedback, and add error handling with queryClient.refetchQueries to revert optimistic updates. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 1e4433b5-47ab-464c-b663-fea2e53367dd Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 3bd41b38-9ebe-4ea0-9772-0a0dd5178be1 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/1e4433b5-47ab-464c-b663-fea2e53367dd/lCj0xbO --- client/src/pages/BLReconciliation.tsx | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index 8c0c41a..6df6629 100644 --- a/client/src/pages/BLReconciliation.tsx +++ b/client/src/pages/BLReconciliation.tsx @@ -144,15 +144,8 @@ export default function BLReconciliation() { ), duration: 5000, }); - } else { - // Facture non trouvée - afficher message d'erreur - toast({ - title: "⚠️ Facture non trouvée", - description: result.errorMessage || 'La facture n\'a pas été trouvée dans la base de données', - variant: "destructive", - duration: 5000, - }); } + // Pas de toast si facture non trouvée - affichage silencieux de la croix rouge // Auto-remplissage si facture trouvée (référence facture OU numéro BL) if (result.exists) { @@ -675,13 +668,25 @@ export default function BLReconciliation() { description: "Rapprochement validé avec succès", }); - // Force refetch immédiat pour déplacer la facture dans l'onglet validées - await queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] }); - await queryClient.refetchQueries({ queryKey: ['/api/deliveries'] }); + // Mise à jour optimiste du cache local pour disparition immédiate + queryClient.setQueryData(['/api/deliveries/bl', selectedStoreId], (oldData: any) => { + if (!oldData) return oldData; + return oldData.map((d: any) => + d.id === delivery.id + ? { ...d, reconciled: true, validatedAt: new Date().toISOString() } + : d + ); + }); + + // Force refetch pour synchroniser avec le serveur + queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] }); + queryClient.refetchQueries({ queryKey: ['/api/deliveries'] }); // Passer automatiquement à l'onglet "Validées" après validation setActiveTab("validated"); } catch (error) { + // En cas d'erreur, refetch pour annuler la mise à jour optimiste + queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] }); toast({ title: "Erreur", description: "Impossible de valider le rapprochement",