import { firstBy } from 'thenby'; import { CHART_COLORS, UTM_PARAMS } from '@/lib/constants'; import { useReport } from '@/components/hooks'; import { PieChart } from '@/components/charts/PieChart'; import { ListTable } from '@/components/metrics/ListTable'; import styles from './UTMView.module.css'; import { useMessages } from '@/components/hooks'; function toArray(data: { [key: string]: number } = {}) { return Object.keys(data) .map(key => { return { name: key, value: data[key] }; }) .sort(firstBy('value', -1)); } export function UTMView() { const { formatMessage, labels } = useMessages(); const { report } = useReport(); const { data } = report || {}; if (!data) { return null; } return (
{UTM_PARAMS.map(param => { const items = toArray(data[param]); const chartData = { labels: items.map(({ name }) => name), datasets: [ { data: items.map(({ value }) => value), backgroundColor: CHART_COLORS, borderWidth: 0, }, ], }; const total = items.reduce((sum, { value }) => { return +sum + +value; }, 0); return (
{param.replace(/^utm_/, '')}
({ x: name, y: value, z: (value / total) * 100, }))} />
); })}
); }