Spaces:
Running
Running
File size: 1,099 Bytes
34cfb9f 295842d 34cfb9f 6f88283 34cfb9f 6f88283 34cfb9f 295842d 34cfb9f 295842d 34cfb9f 295842d 34cfb9f 295842d 34cfb9f 295842d 34cfb9f 295842d 34cfb9f 295842d 34cfb9f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import React, { useMemo } from "react";
import {
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "~/components/ui/table";
interface TableProps {
data: Record<string, unknown>[];
}
export const Table: React.FC<TableProps> = ({ data }) => {
const headers = useMemo(
() =>
data.length > 0 && typeof data[0] === "object"
? Object.keys(data[0])
: [],
[data]
);
if (data.length === 0)
return <div className="text-center p-8 font-mono">no data for query</div>;
return (
<table className="text-xs">
<TableHeader>
<TableRow>
{headers.map((header) => (
<TableHead key={header}>{header}</TableHead>
))}
</TableRow>
</TableHeader>
<TableBody>
{data.map((row, rowIndex) => (
<TableRow key={rowIndex}>
{headers.map((header) => (
<TableCell key={`${rowIndex}-${header}`}>
{String(row[header])}
</TableCell>
))}
</TableRow>
))}
</TableBody>
</table>
);
};
|