import { ColorSquare } from "@/components/ColorSquare"; import { type IChartData } from "@/types"; import { type RouterOutputs } from "@/utils/api"; import { getChartColor } from "@/utils/theme"; import { useReactTable, getCoreRowModel, flexRender, createColumnHelper, getSortedRowModel, type SortingState, } from "@tanstack/react-table"; import { useMemo, useState } from "react"; import { useElementSize } from "usehooks-ts"; import { useChartContext } from "./ChartProvider"; import { ChevronDown, ChevronUp } from "lucide-react"; import { cn } from "@/utils/cn"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; const columnHelper = createColumnHelper(); type ReportBarChartProps = { data: IChartData; }; export function ReportBarChart({ data }: ReportBarChartProps) { const { editMode } = useChartContext(); const [ref, { width }] = useElementSize(); const [sorting, setSorting] = useState([]); const table = useReactTable({ data: useMemo( () => (editMode ? data.series : data.series.slice(0, 20)), [editMode, data], ), columns: useMemo(() => { return [ columnHelper.accessor((row) => row.name, { id: "label", header: () => "Label", cell(info) { return (
{info.row.original.event.id} {info.getValue()}
); }, footer: (info) => info.column.id, size: width ? width * 0.3 : undefined, }), columnHelper.accessor((row) => row.totalCount, { id: "totalCount", cell: (info) => (
{info.getValue()}
), header: () => "Count", footer: (info) => info.column.id, size: width ? width * 0.1 : undefined, enableSorting: true, }), columnHelper.accessor((row) => row.totalCount, { id: "graph", cell: (info) => (
), header: () => "Graph", footer: (info) => info.column.id, size: width ? width * 0.6 : undefined, }), ]; }, [width]), columnResizeMode: "onChange", state: { sorting, }, getCoreRowModel: getCoreRowModel(), onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), debugTable: true, debugHeaders: true, debugColumns: true, }); return (
{editMode && (
{data.events.map((event) => { return (
{event.id} {event.name}
{new Intl.NumberFormat("en-IN", { maximumSignificantDigits: 20, }).format(event.count)}
); })}
)}
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => (
{flexRender( header.column.columnDef.header, header.getContext(), )} {{ asc: , desc: , }[header.column.getIsSorted() as string] ?? null}
))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} ))}
); }