import { useMemo } from "react"; import { parseDelimited } from "~/lib/csv"; const MAX_ROWS = 1000; const MAX_COLUMNS = 100; export function CsvTable({ contents, delimiter }: { contents: string; delimiter: string }) { const table = useMemo(() => { const parsed = parseDelimited(contents, delimiter, MAX_ROWS + 1); const rows = parsed.rows.map((cells, row) => ({ row, cells: cells.slice(0, MAX_COLUMNS).map((value, column) => ({ column, value })), })); return { rows, truncated: parsed.truncated }; }, [contents, delimiter]); const [header, ...body] = table.rows; return (
| {header?.cells.map((cell) => ( | {cell.value} | ))}
|---|---|
| {row.row} | {row.cells.map((cell) => ({cell.value} | ))}
Showing the first {MAX_ROWS} rows.
)}