import * as React from 'react'; import type { IChartData } from '@/app/_trpc/client'; import { Pagination, usePagination } from '@/components/pagination'; import { Badge } from '@/components/ui/badge'; import { Checkbox } from '@/components/ui/checkbox'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { useFormatDateInterval } from '@/hooks/useFormatDateInterval'; import { useMappings } from '@/hooks/useMappings'; import { useNumber } from '@/hooks/useNumerFormatter'; import { useSelector } from '@/redux'; import { getChartColor } from '@/utils/theme'; import { PreviousDiffIndicator } from '../PreviousDiffIndicator'; 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 formatDate = useFormatDateInterval(interval); const getLabel = useMappings(); function handleChange(name: string, checked: boolean) { setVisibleSeries((prev) => { if (checked) { return [...prev, name]; } else { return prev.filter((item) => item !== name); } }); } return ( <>
Name {paginate(data.series).map((serie, index) => { const checked = !!visibleSeries.find( (item) => item.name === serie.name ); return (
handleChange(serie.name, !!checked) } style={ checked ? { background: getChartColor(index), borderColor: getChartColor(index), } : undefined } checked={checked} />
{getLabel(serie.name)}

{getLabel(serie.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)}
); })}
); })}
Total: {number.format(data.metrics.sum)} Average: {number.format(data.metrics.average)} Min: {number.format(data.metrics.min)} Max: {number.format(data.metrics.max)}
); }