mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-09-13 10:49:21 +00:00
🎨 style: establish console design system
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import type { ReactNode } from "react";
|
||||
import {
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
} from "@/components/ui/table";
|
||||
|
||||
export type DataTableColumn<T> = {
|
||||
id: string;
|
||||
header: ReactNode;
|
||||
cell: (item: T) => ReactNode;
|
||||
className?: string;
|
||||
headerClassName?: string;
|
||||
};
|
||||
|
||||
type DataTableProps<T> = {
|
||||
data: readonly T[];
|
||||
columns: readonly DataTableColumn<T>[];
|
||||
getRowKey: (item: T, index: number) => string | number;
|
||||
};
|
||||
|
||||
export function DataTable<T>({ data, columns, getRowKey }: DataTableProps<T>) {
|
||||
return (
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
{columns.map((column) => (
|
||||
<TableHead key={column.id} className={column.headerClassName}>
|
||||
{column.header}
|
||||
</TableHead>
|
||||
))}
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{data.map((item, index) => (
|
||||
<TableRow key={getRowKey(item, index)}>
|
||||
{columns.map((column) => (
|
||||
<TableCell key={column.id} className={column.className}>
|
||||
{column.cell(item)}
|
||||
</TableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user