import { useMemo } from "react"; import { useSearchParams } from "react-router-dom"; import { flexRender, getCoreRowModel, useReactTable, getSortedRowModel, } from "@tanstack/react-table"; import { BenchmarkResult } from "../../../types"; import { columns } from "./columns"; import { BenchmarkCharts } from "../charts/BenchmarkCharts"; import { exportToCsv } from "../export/csvExport"; interface BenchmarkTableProps { results: BenchmarkResult[]; availableDatasets: string[]; availableAlgorithms: string[]; } export function BenchmarkTable({ results, availableDatasets, availableAlgorithms, }: BenchmarkTableProps) { const [searchParams, setSearchParams] = useSearchParams(); const selectedDataset = searchParams.get("dataset") || ""; const selectedAlgorithm = searchParams.get("algorithm") || ""; const filteredData = results; const table = useReactTable({ data: filteredData || [], columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), }); const chartData = useMemo(() => { if (selectedDataset) { return filteredData .filter((row: BenchmarkResult) => row.dataset === selectedDataset) .map((row: BenchmarkResult) => ({ algorithm: row.algorithm, compression_ratio: row.compression_ratio, encode_speed: row.encode_mb_per_sec, decode_speed: row.decode_mb_per_sec, })); } else if (selectedAlgorithm) { return filteredData .filter((row: BenchmarkResult) => row.algorithm === selectedAlgorithm) .map((row: BenchmarkResult) => ({ algorithm: row.dataset, compression_ratio: row.compression_ratio, encode_speed: row.encode_mb_per_sec, decode_speed: row.decode_mb_per_sec, })); } return []; }, [filteredData, selectedDataset, selectedAlgorithm]); return (
{(selectedDataset || selectedAlgorithm) && chartData.length > 0 && ( )} {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( ))} ))}
{flexRender( header.column.columnDef.header, header.getContext(), )} {header.column.getIsSorted() && ( {header.column.getIsSorted() === "asc" ? "↑" : "↓"} )}
{flexRender(cell.column.columnDef.cell, cell.getContext())}
); }