import { Table } from 'antd'; import { ColumnsType } from 'antd/es/table/interface'; import React from 'react'; import { AppRouterOutput, trpc } from '../../api/trpc'; import { useCurrentWorkspaceId } from '../../store/user'; import { sum } from 'lodash-es'; import { formatNumber } from '../../utils/common'; import { useTranslation } from '@i18next-toolkit/react'; type MetricsItemType = AppRouterOutput['telemetry']['metrics'][number]; interface MetricsTableProps { telemetryId: string; title: [string, string]; type: 'source' | 'url' | 'event' | 'referrer' | 'country'; startAt: number; endAt: number; } export const TelemetryMetricsTable: React.FC = React.memo( (props) => { const { telemetryId, title, type, startAt, endAt } = props; const workspaceId = useCurrentWorkspaceId(); const { t } = useTranslation(); const { isLoading, data: metrics = [] } = trpc.telemetry.metrics.useQuery({ workspaceId, telemetryId, type, startAt, endAt, }); const total = sum(metrics.map((m) => m.y)); const columns: ColumnsType = [ { title: title[0], dataIndex: 'x', ellipsis: true, render: (val) => val ?? {t('(None)')}, }, { title: title[1], dataIndex: 'y', width: 100, align: 'center', render: (val) => { const percent = (Number(val) / total) * 100; return (
{formatNumber(val)}
{percent.toFixed(0)}%
); }, }, ]; return ( ); } ); TelemetryMetricsTable.displayName = 'TelemetryMetricsTable';