From 7b209292b906b9d1e9f8ab86efd2a8c446fbf276 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Wed, 18 Mar 2026 14:35:24 +0100 Subject: [PATCH] feat: introduce GridClient component to manage grid state, scoring, and UI orchestration. --- src/features/grid/components/grid-client.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/features/grid/components/grid-client.tsx b/src/features/grid/components/grid-client.tsx index 71914b8..fa964a2 100644 --- a/src/features/grid/components/grid-client.tsx +++ b/src/features/grid/components/grid-client.tsx @@ -30,7 +30,9 @@ export function GridClient({ initialRows, nomFournisseur, fournisseurs, magasins const setActiveGridQuery = useGridStore((s) => s.setActiveGridQuery); const searchParams = useSearchParams(); - const scoreSettings = useScoreSettingsStore((s) => ({ weightCA: s.weightCA, weightVolume: s.weightVolume, weightMarge: s.weightMarge })); + const weightCA = useScoreSettingsStore((s) => s.weightCA); + const weightVolume = useScoreSettingsStore((s) => s.weightVolume); + const weightMarge = useScoreSettingsStore((s) => s.weightMarge); const [selectedCodeins, setSelectedCodeins] = useState([]); const [isPending, startTransition] = useTransition(); @@ -59,9 +61,9 @@ export function GridClient({ initialRows, nomFournisseur, fournisseurs, magasins // Optimisation : On évite le JSON.parse(JSON.stringify()) qui est très lourd sur 1000 lignes // On passe directement les initialRows au moteur de score, ou on fait une copie superficielle si nécessaire. // Le moteur de score doit idéalement retourner de nouveaux objets. - const scoredRows = computeProductScores([...initialRows], scoreSettings); + const scoredRows = computeProductScores([...initialRows], { weightCA, weightVolume, weightMarge }); setRows(scoredRows); - }, [initialRows, setRows, scoreSettings, isMounted]); + }, [initialRows, setRows, weightCA, weightVolume, weightMarge, isMounted]); const handleSave = () => { startTransition(async () => {