178 lines
3.3 KiB
TypeScript
178 lines
3.3 KiB
TypeScript
import type { Meta, StoryObj } from "@storybook/react";
|
|
import {
|
|
createColumnHelper,
|
|
getCoreRowModel,
|
|
useReactTable,
|
|
} from "@tanstack/react-table";
|
|
import { DataTable } from ".";
|
|
|
|
const meta: Meta<typeof DataTable> = {
|
|
title: "Elements/DataTable",
|
|
component: DataTable,
|
|
parameters: {
|
|
docs: {
|
|
description: {
|
|
component: `
|
|
- [Docs](https://tanstack.com/table/v8/docs/introduction)
|
|
`,
|
|
},
|
|
source: {
|
|
code: `
|
|
type Person = {
|
|
firstName: string;
|
|
lastName: string;
|
|
age: number;
|
|
visits: number;
|
|
status: string;
|
|
progress: number;
|
|
};
|
|
|
|
const data: Person[] = [
|
|
{
|
|
firstName: "tanner",
|
|
lastName: "linsley",
|
|
age: 24,
|
|
visits: 100,
|
|
status: "In Relationship",
|
|
progress: 50,
|
|
},
|
|
{
|
|
firstName: "tandy",
|
|
lastName: "miller",
|
|
age: 40,
|
|
visits: 40,
|
|
status: "Single",
|
|
progress: 80,
|
|
},
|
|
{
|
|
firstName: "joe",
|
|
lastName: "dirte",
|
|
age: 45,
|
|
visits: 20,
|
|
status: "Complicated",
|
|
progress: 10,
|
|
},
|
|
];
|
|
|
|
const columnHelper = createColumnHelper<Person>();
|
|
|
|
const columns = [
|
|
columnHelper.accessor("firstName", {
|
|
cell: (info) => info.getValue(),
|
|
}),
|
|
columnHelper.accessor((row) => row.lastName, {
|
|
id: "lastName",
|
|
cell: (info) => <i>{info.getValue()}</i>,
|
|
header: () => <span>Last Name</span>,
|
|
}),
|
|
columnHelper.accessor("age", {
|
|
header: () => "Age",
|
|
cell: (info) => info.renderValue(),
|
|
}),
|
|
columnHelper.accessor("visits", {
|
|
header: () => <span>Visits</span>,
|
|
}),
|
|
columnHelper.accessor("status", {
|
|
header: "Status",
|
|
}),
|
|
columnHelper.accessor("progress", {
|
|
header: "Profile Progress",
|
|
}),
|
|
];
|
|
|
|
|
|
function Table() {
|
|
const table = useReactTable({
|
|
data,
|
|
columns,
|
|
getCoreRowModel: getCoreRowModel(),
|
|
});
|
|
|
|
return <DataTable table={table} />;
|
|
}
|
|
|
|
`,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export default meta;
|
|
type Story = StoryObj<typeof DataTable>;
|
|
|
|
export const Default: Story = {
|
|
render: () => <Table />,
|
|
};
|
|
|
|
type Person = {
|
|
firstName: string;
|
|
lastName: string;
|
|
age: number;
|
|
visits: number;
|
|
status: string;
|
|
progress: number;
|
|
};
|
|
|
|
const data: Person[] = [
|
|
{
|
|
firstName: "tanner",
|
|
lastName: "linsley",
|
|
age: 24,
|
|
visits: 100,
|
|
status: "In Relationship",
|
|
progress: 50,
|
|
},
|
|
{
|
|
firstName: "tandy",
|
|
lastName: "miller",
|
|
age: 40,
|
|
visits: 40,
|
|
status: "Single",
|
|
progress: 80,
|
|
},
|
|
{
|
|
firstName: "joe",
|
|
lastName: "dirte",
|
|
age: 45,
|
|
visits: 20,
|
|
status: "Complicated",
|
|
progress: 10,
|
|
},
|
|
];
|
|
|
|
const columnHelper = createColumnHelper<Person>();
|
|
|
|
const columns = [
|
|
columnHelper.accessor("firstName", {
|
|
cell: (info) => info.getValue(),
|
|
}),
|
|
columnHelper.accessor((row) => row.lastName, {
|
|
id: "lastName",
|
|
cell: (info) => <i>{info.getValue()}</i>,
|
|
header: () => <span>Last Name</span>,
|
|
}),
|
|
columnHelper.accessor("age", {
|
|
header: () => "Age",
|
|
cell: (info) => info.renderValue(),
|
|
}),
|
|
columnHelper.accessor("visits", {
|
|
header: () => <span>Visits</span>,
|
|
}),
|
|
columnHelper.accessor("status", {
|
|
header: "Status",
|
|
}),
|
|
columnHelper.accessor("progress", {
|
|
header: "Profile Progress",
|
|
}),
|
|
];
|
|
|
|
function Table() {
|
|
const table = useReactTable({
|
|
data,
|
|
columns,
|
|
getCoreRowModel: getCoreRowModel(),
|
|
});
|
|
|
|
return <DataTable table={table} />;
|
|
}
|