import { LocationDatasetItem, ReportMetric, } from '@common/admin/analytics/report-metric'; import React, {useMemo, useRef} from 'react'; import {useGoogleGeoChart} from './use-google-geo-chart'; import {ChartLayout, ChartLayoutProps} from '@common/charts/chart-layout'; import {Trans} from '@common/i18n/trans'; import {ChartLoadingIndicator} from '@common/charts/chart-loading-indicator'; import {Button} from '@common/ui/buttons/button'; import {ArrowBackIcon} from '@common/icons/material/ArrowBack'; import clsx from 'clsx'; import {InfoDialogTrigger} from '@common/ui/overlays/dialog/info-dialog-trigger/info-dialog-trigger'; import {FormattedCountryName} from '@common/i18n/formatted-country-name'; interface GeoChartData extends Partial { data?: ReportMetric; onCountrySelected?: (countryCode: string | undefined) => void; country?: string; } export function GeoChart({ data: metricData, isLoading, onCountrySelected, country, ...layoutProps }: GeoChartData) { const placeholderRef = useRef(null); const regionInteractivity = !!onCountrySelected; // memo data to avoid redrawing chart on rerender const initialData = metricData?.datasets[0].data; const data = useMemo(() => { return initialData || []; }, [initialData]); useGoogleGeoChart({placeholderRef, data, country, onCountrySelected}); return ( {country ? ( ({}) ) : null} {regionInteractivity && } } contentIsFlex={isLoading} > {isLoading && }
{data.map(location => (
{ onCountrySelected?.(location.code); }} >
{location.label}
({location.percentage})%
))}
{country && ( )}
); } function InfoTrigger() { return ( } body={ } /> ); }