diff --git a/components/dashboard/DottedMap.tsx b/components/dashboard/DottedMap.tsx index dee2e67..f0799d8 100644 --- a/components/dashboard/DottedMap.tsx +++ b/components/dashboard/DottedMap.tsx @@ -1,8 +1,8 @@ 'use client' -import { useMemo } from 'react' +import { useMemo, useState } from 'react' import { createMap } from 'svg-dotted-map' -import { cn } from '@ciphera-net/ui' +import { cn, formatNumber } from '@ciphera-net/ui' import { countryCentroids } from '@/lib/country-centroids' interface DottedMapProps { @@ -10,14 +10,24 @@ interface DottedMapProps { className?: string } +function getCountryName(code: string): string { + try { + const regionNames = new Intl.DisplayNames(['en'], { type: 'region' }) + return regionNames.of(code) || code + } catch { + return code + } +} + export default function DottedMap({ data, className }: DottedMapProps) { const width = 150 - const height = 75 + const height = 68 const dotRadius = 0.2 + const [tooltip, setTooltip] = useState<{ x: number; y: number; country: string; pageviews: number } | null>(null) - const { points, addMarkers } = createMap({ width, height, mapSamples: 5000 }) + const { points, addMarkers } = createMap({ width, height, mapSamples: 8000 }) - const markers = useMemo(() => { + const markerData = useMemo(() => { if (!data.length) return [] const max = Math.max(...data.map((d) => d.pageviews)) @@ -29,10 +39,16 @@ export default function DottedMap({ data, className }: DottedMapProps) { lat: countryCentroids[d.country].lat, lng: countryCentroids[d.country].lng, size: 0.4 + (d.pageviews / max) * 0.8, + country: d.country, + pageviews: d.pageviews, })) }, [data]) - const processedMarkers = addMarkers(markers) + const markerInputs = useMemo( + () => markerData.map((d) => ({ lat: d.lat, lng: d.lng, size: d.size })), + [markerData], + ) + const processedMarkers = addMarkers(markerInputs) // Compute stagger helpers const { xStep, yToRowIndex } = useMemo(() => { @@ -59,37 +75,76 @@ export default function DottedMap({ data, className }: DottedMapProps) { }, [points]) return ( - +