From 18c4ef375ba22f81ad26f2db3069a0fe11593360 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Mon, 26 Jan 2026 15:16:28 +0100 Subject: [PATCH] feat: improve 'Group By' dropdown UI/UX in Grid tab (click-to-open and click-outside to close) --- components/DataGrid.tsx | 69 +++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/components/DataGrid.tsx b/components/DataGrid.tsx index ff111d3..6bf1835 100644 --- a/components/DataGrid.tsx +++ b/components/DataGrid.tsx @@ -1,4 +1,4 @@ -import React, { useState, useMemo, useEffect } from 'react'; +import React, { useState, useMemo, useEffect, useRef } from 'react'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'; @@ -233,6 +233,19 @@ const DataGrid: React.FC = ({ data, hasCustomerFilter, adsData = const [visibleMetrics, setVisibleMetrics] = useState<('sellOut' | 'units')[]>(['sellOut', 'units']); const [showAdsMetrics, setShowAdsMetrics] = useState(true); const [showAttributedSales, setShowAttributedSales] = useState(false); + const [showDimensionMenu, setShowDimensionMenu] = useState(false); + const dimensionRef = useRef(null); + + // Close dimension menu on click outside + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dimensionRef.current && !dimensionRef.current.contains(event.target as Node)) { + setShowDimensionMenu(false); + } + }; + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + }, []); // Calculate Ads Summary for the Grid const adsSummary = useMemo(() => { @@ -682,31 +695,41 @@ const DataGrid: React.FC = ({ data, hasCustomerFilter, adsData =
{/* Dimensions Selector */} -
- -
- {DIMENSION_OPTIONS.map(dim => ( - - ))} -
+ {showDimensionMenu && ( +
+
+ Select Columns +
+ {DIMENSION_OPTIONS.map(dim => ( + + ))} +
+ )}
{/* Filter Builder Trigger */}