import { Pagination, usePagination } from '@/components/pagination'; import { Stats, StatsCard } from '@/components/stats'; import { Badge } from '@/components/ui/badge'; import { Checkbox } from '@/components/ui/checkbox'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Tooltiper } from '@/components/ui/tooltip'; import { useFormatDateInterval } from '@/hooks/useFormatDateInterval'; import { useNumber } from '@/hooks/useNumerFormatter'; import { useSelector } from '@/redux'; import { getPropertyLabel } from '@/translations/properties'; import type { IChartData } from '@/trpc/client'; import { getChartColor } from '@/utils/theme'; import type * as React from 'react'; import { logDependencies } from 'mathjs'; import { PreviousDiffIndicator } from './previous-diff-indicator'; import { SerieName } from './serie-name'; interface ReportTableProps { data: IChartData; visibleSeries: IChartData['series']; setVisibleSeries: React.Dispatch>; } const ROWS_LIMIT = 50; export function ReportTable({ data, visibleSeries, setVisibleSeries, }: ReportTableProps) { const { setPage, paginate, page } = usePagination(ROWS_LIMIT); const number = useNumber(); const interval = useSelector((state) => state.report.interval); const breakdowns = useSelector((state) => state.report.breakdowns); const formatDate = useFormatDateInterval(interval); function handleChange(name: string, checked: boolean) { setVisibleSeries((prev) => { if (checked) { return [...prev, name]; } return prev.filter((item) => item !== name); }); } return ( <>
{breakdowns.length === 0 && Name} {breakdowns.map((breakdown) => ( {getPropertyLabel(breakdown.name)} ))} {paginate(data.series).map((serie, index) => { const checked = !!visibleSeries.find( (item) => item.id === serie.id, ); return ( {serie.names.map((name, nameIndex) => { return (
{nameIndex === 0 ? ( <> handleChange(serie.id, !!checked) } style={ checked ? { background: getChartColor(index), borderColor: getChartColor(index), } : undefined } checked={checked} /> } > {name} ) : ( )}
); })}
); })}
Total Average {data.series[0]?.data.map((serie) => ( {formatDate(serie.date)} ))} {paginate(data.series).map((serie) => { return (
{number.format(serie.metrics.sum)}
{number.format(serie.metrics.average)}
{serie.data.map((item) => { return (
{number.format(item.count)}
); })}
); })}
); }