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
This commit is contained in:
michaelschal committed 2025-11-04 13:56:55 +00:00
1 parent 3a8a2cb0b3
commit 76d113f538
1 file changed
+16 -11
+16 -11
View File
@@ -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",