From 414bf6133d7fcc376e6dcab9abe1e160dc6f82c7 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 19 Mar 2026 17:13:49 +0100 Subject: [PATCH] fix: correct snapshot save to detect all gamme changes (drafts + validated) handleSnapshot was only looking at active draftChanges to build the snapshot. After validation (Valider), drafts are cleared but changes are applied to row.codeGamme via applyDraftsToRows. This caused handleSnapshot (Camera/Export) to save an empty snapshot that overwrote the real one, losing all gamme changes on page reload. Now handleSnapshot compares (draftChanges[codein] ?? row.codeGamme) vs row.codeGammeInit to detect ALL changes, whether drafted or already validated. Uses codeGammeInit as "before" reference (API value, never modified). Co-Authored-By: Claude Opus 4.6 --- src/features/grid/components/floating-summary-bar.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/features/grid/components/floating-summary-bar.tsx b/src/features/grid/components/floating-summary-bar.tsx index ad883ec..a69524a 100644 --- a/src/features/grid/components/floating-summary-bar.tsx +++ b/src/features/grid/components/floating-summary-bar.tsx @@ -60,13 +60,17 @@ export function FloatingSummaryBar() { if (rows.length === 0) return; setIsSavingSnapshot(true); try { - const modifiedRows = rows.filter(r => draftChanges[r.codein]); + // Détecter TOUS les changements : drafts actifs + changements déjà validés (codeGamme mis à jour) + const modifiedRows = rows.filter(r => { + const effectiveGamme = draftChanges[r.codein] ?? r.codeGamme; + return effectiveGamme !== r.codeGammeInit; + }); const changes = Object.fromEntries( modifiedRows.map(r => [ r.codein, { before: r.codeGammeInit, - after: draftChanges[r.codein] as string + after: (draftChanges[r.codein] ?? r.codeGamme) as string } ]) );