From 7cdbe8ec2167070954a38cacebda8e59be7b1d26 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 19 Mar 2026 15:17:28 +0100 Subject: [PATCH] feat: add Zustand store for grid state and a hook to save draft modifications --- src/features/grid/hooks/use-save-drafts.ts | 5 ++++- src/features/grid/store/use-grid-store.ts | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/features/grid/hooks/use-save-drafts.ts b/src/features/grid/hooks/use-save-drafts.ts index d955746..fec747a 100644 --- a/src/features/grid/hooks/use-save-drafts.ts +++ b/src/features/grid/hooks/use-save-drafts.ts @@ -10,7 +10,7 @@ import { GammeCode } from "@/types/grid"; * Filters changes to only include those in the provided codeins list (e.g. current supplier). */ export function useSaveDrafts(magasin: string, filterCodeins?: string[]) { - const { draftChanges, rows, resetDrafts, clearDrafts } = useGridStore(); + const { draftChanges, rows, resetDrafts, clearDrafts, applyDraftsToRows } = useGridStore(); // Only consider changes that are in the filter list (if provided) const activeDrafts = filterCodeins @@ -39,6 +39,9 @@ export function useSaveDrafts(magasin: string, filterCodeins?: string[]) { const result = await saveDraftChanges({ codeFournisseur, nomFournisseur, magasin, changes }); if (result.success) { + // Apply saved values onto row.codeGamme BEFORE clearing drafts + // so that isModified (codeGamme !== codeGammeInit) stays true + applyDraftsToRows(activeDrafts); if (filterCodeins) { clearDrafts(Object.keys(activeDrafts)); } else { diff --git a/src/features/grid/store/use-grid-store.ts b/src/features/grid/store/use-grid-store.ts index 5c24a9a..e336ed0 100644 --- a/src/features/grid/store/use-grid-store.ts +++ b/src/features/grid/store/use-grid-store.ts @@ -25,6 +25,8 @@ interface GridState { resetDrafts: () => void; /** Clear specific draft changes by codein */ clearDrafts: (codeins: string[]) => void; + /** Apply saved drafts onto row.codeGamme so change indicators persist after save */ + applyDraftsToRows: (draftsToApply: Record) => void; setFilter: (key: keyof GridFilters, value: string | null) => void; setDisplayDensity: (density: "compact" | "normal" | "comfortable") => void; setActiveGridQuery: (query: string) => void; @@ -108,6 +110,17 @@ export const useGridStore = create()( codeins.forEach((id) => delete draftChanges[id]); set({ draftChanges, summary: computeSummary(get().rows, draftChanges) }); }, + /** Apply saved drafts onto row.codeGamme so isModified works after clearing drafts */ + applyDraftsToRows: (draftsToApply: Record) => { + const rows = get().rows.map(r => { + const newGamme = draftsToApply[r.codein]; + if (newGamme !== undefined) { + return { ...r, codeGamme: newGamme }; + } + return r; + }); + set({ rows }); + }, setFilter: (key, value) => { set((state) => ({ ...state, filters: { ...state.filters, [key]: value } })); },