From 036500f6d1408da7b909b0b5b2cd9f8efa6511e6 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 7 Jan 2026 18:52:07 +0100 Subject: [PATCH] feat: add GeoMap component for visualizing country-specific scan data. --- src/components/analytics/GeoMap.tsx | 35 ++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/analytics/GeoMap.tsx b/src/components/analytics/GeoMap.tsx index ecd5c71..31d42ed 100644 --- a/src/components/analytics/GeoMap.tsx +++ b/src/components/analytics/GeoMap.tsx @@ -144,8 +144,16 @@ const GeoMap: React.FC = ({ countryStats, totalScans }) => { .domain([0, maxCount || 1]) .range(['#E0F2FE', '#1E40AF']); + const [tooltipContent, setTooltipContent] = React.useState<{ name: string; count: number } | null>(null); + const [tooltipPos, setTooltipPos] = React.useState({ x: 0, y: 0 }); + return ( -
+
{ + setTooltipPos({ x: evt.clientX, y: evt.clientY }); + }} + > = ({ countryStats, totalScans }) => { }, pressed: { outline: 'none' }, }} + onMouseEnter={() => { + const { name } = geo.properties; + setTooltipContent({ name, count: scanCount }); + }} + onMouseLeave={() => { + setTooltipContent(null); + }} /> ); }) @@ -186,6 +201,24 @@ const GeoMap: React.FC = ({ countryStats, totalScans }) => { + + {tooltipContent && ( +
+
+ {tooltipContent.name} + | + {tooltipContent.count} scans +
+ {/* Arrow */} +
+
+ )}
); };