import { Text, DataTable, DataColumn } from '@umami/react-zen'; import { useMessages, useResultQuery, useFormat, useFields } from '@/components/hooks'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { formatShortTime } from '@/lib/format'; export interface BreakdownProps { websiteId: string; startDate: Date; endDate: Date; parameters: { fields: string[]; }; } export function Breakdown({ websiteId, parameters, startDate, endDate }: BreakdownProps) { const { formatMessage, labels } = useMessages(); const { formatValue } = useFormat(); const { fields } = useFields(); const { data, error, isLoading } = useResultQuery( 'breakdown', { websiteId, dateRange: { startDate, endDate, }, parameters, }, { enabled: !!parameters.fields.length }, ); return ( {parameters?.fields.map(field => { return ( f.name === field)?.label}> {row => { const value = formatValue(row[field], field); return ( {value} ); }} ); })} {row => row?.['views']?.toLocaleString()} {row => row?.['visits']?.toLocaleString()} {row => row?.['visitors']?.toLocaleString()} {row => { const n = (Math.min(row?.['visits'], row?.['bounces']) / row?.['visits']) * 100; return Math.round(+n) + '%'; }} {row => { const n = (row?.['totaltime'] / row?.['visits']) * 100; return `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`; }} ); }