import { Row } from '@umami/react-zen'; import { Favicon } from '@/components/common/Favicon'; import { FilterLink } from '@/components/common/FilterLink'; import { TypeIcon } from '@/components/common/TypeIcon'; import { useCountryNames, useFormat, useLocale, useMessages, useRegionNames, } from '@/components/hooks'; import { GROUPED_DOMAINS } from '@/lib/constants'; export interface MetricLabelProps { type: string; data: any; onClick?: () => void; } export function MetricLabel({ type, data }: MetricLabelProps) { const { formatMessage, labels } = useMessages(); const { formatValue, formatCity } = useFormat(); const { locale } = useLocale(); const { countryNames } = useCountryNames(locale); const { getRegionName } = useRegionNames(locale); const { label, country, domain } = data; switch (type) { case 'browser': case 'os': return ( } /> ); case 'channel': return formatMessage(labels[label]); case 'city': return ( ) } /> ); case 'region': return ( } /> ); case 'country': return ( } /> ); case 'path': case 'entry': case 'exit': return ( ); case 'device': return ( } /> ); case 'referrer': return ( } /> ); case 'domain': if (label === 'Other') { return `(${formatMessage(labels.other)})`; } else { const name = GROUPED_DOMAINS.find(({ domain }) => domain === label)?.name; if (!name) { return null; } return ( {name} ); } case 'language': return formatValue(label, 'language'); default: return ; } }