From 57449ec60338f0e9c306be83a5260a663f5f28dd Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Fri, 6 Mar 2026 11:18:35 +0100 Subject: [PATCH] feat: introduce heatmap grid component for displaying and managing product data with virtualization and performance optimizations. --- src/features/grid/components/heatmap-grid.tsx | 152 +++++++++--------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/src/features/grid/components/heatmap-grid.tsx b/src/features/grid/components/heatmap-grid.tsx index d2de87f..437cebe 100644 --- a/src/features/grid/components/heatmap-grid.tsx +++ b/src/features/grid/components/heatmap-grid.tsx @@ -490,27 +490,19 @@ export function HeatmapGrid({ onSelectionChange }: HeatmapGridProps) { } return ( -
-
+
+
- + {table .getAllLeafColumns() .filter((column: any) => column.getCanHide()) @@ -518,7 +510,7 @@ export function HeatmapGrid({ onSelectionChange }: HeatmapGridProps) { return ( column.toggleVisibility(!!value)} onSelect={(e: Event) => e.preventDefault()} @@ -535,68 +527,78 @@ export function HeatmapGrid({ onSelectionChange }: HeatmapGridProps) {
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - const isFlexible = header.column.id === "libelle1" || header.column.id === "ai" || header.column.id === "libelle3"; - const isCenter = header.column.id === "totalQuantite" || header.column.id === "totalCa" || header.column.id === "totalMarge" || header.column.id.startsWith("month_") || header.column.id === "gammeInitial" || header.column.id === "score" || header.column.id === "gamme"; - const size = header.getSize(); - return ( - - ); - })} - - ))} - - - {rowVirtualizer.getVirtualItems().map((virtualRow) => { - const row = tableRows[virtualRow.index]; - const isSelected = row.getIsSelected(); +
+
-
- {flexRender(header.column.columnDef.header, header.getContext())} - {header.column.getCanSort() && ( -
- {header.column.getIsSorted() === "asc" ? - : header.column.getIsSorted() === "desc" ? - : - } -
- )} -
-
+ + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + const isFlexible = header.column.id === "libelle1" || header.column.id === "ai" || header.column.id === "libelle3"; + const isCenter = header.column.id === "totalQuantite" || header.column.id === "totalCa" || header.column.id === "totalMarge" || header.column.id.startsWith("month_") || header.column.id === "gammeInitial" || header.column.id === "score" || header.column.id === "gamme"; + const size = header.getSize(); + return ( + + ); + })} + + ))} + + + {rowVirtualizer.getVirtualItems().map((virtualRow) => { + const row = tableRows[virtualRow.index]; + const isSelected = row.getIsSelected(); - return ( -
- -
- ); - })} - -
+
+ {flexRender(header.column.columnDef.header, header.getContext())} + {header.column.getCanSort() && ( +
+ {header.column.getIsSorted() === "asc" ? + : header.column.getIsSorted() === "desc" ? + : + } +
+ )} +
+
+ return ( +
+ +
+ ); + })} + + +
); }