Skip to content

Commit 20e5b2c

Browse files
authored
Merge pull request #61 from DouglasNeuroInformatics/data-table
add new DataTable component
2 parents f014072 + 46917e4 commit 20e5b2c

File tree

9 files changed

+542
-1
lines changed

9 files changed

+542
-1
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
"@radix-ui/react-switch": "^1.1.3",
9393
"@radix-ui/react-tabs": "^1.1.3",
9494
"@radix-ui/react-tooltip": "^1.1.8",
95+
"@tanstack/react-table": "^8.21.3",
9596
"class-variance-authority": "^0.7.1",
9697
"clsx": "^2.1.1",
9798
"cmdk": "^1.1.1",

pnpm-lock.yaml

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { range, toBasicISOString } from '@douglasneuroinformatics/libjs';
2+
import { faker } from '@faker-js/faker';
3+
import type { Meta, StoryObj } from '@storybook/react';
4+
5+
import { DataTable } from './DataTable';
6+
7+
import type { DataTableColumn } from './DataTable';
8+
9+
type User = {
10+
birthday: Date;
11+
email: string;
12+
firstName: string;
13+
lastName: string;
14+
};
15+
16+
type Story = StoryObj<typeof DataTable<User>>;
17+
18+
const columns: DataTableColumn<User>[] = [
19+
{
20+
format: (value) => {
21+
return toBasicISOString(value);
22+
},
23+
key: 'birthday',
24+
label: 'Birthday'
25+
},
26+
{
27+
format: 'email',
28+
key: 'email',
29+
label: 'Email',
30+
sortable: true
31+
}
32+
];
33+
34+
const data: User[] = range(60)
35+
.unwrap()
36+
.map(() => ({
37+
birthday: faker.date.birthdate(),
38+
email: faker.internet.email(),
39+
firstName: faker.person.firstName(),
40+
lastName: faker.person.lastName()
41+
}));
42+
43+
export default { component: DataTable } as Meta<typeof DataTable<User>>;
44+
45+
export const Default: Story = {
46+
args: {
47+
columns,
48+
data,
49+
headerAction: {
50+
label: 'Do Something',
51+
onClick: () => {
52+
alert('Something!');
53+
}
54+
},
55+
rowActions: [
56+
{
57+
destructive: true,
58+
label: 'Delete',
59+
onSelect: (row) => {
60+
alert(`Delete User: ${row.firstName} ${row.lastName}`);
61+
}
62+
}
63+
],
64+
search: {
65+
key: 'email',
66+
placeholder: 'Filter emails...'
67+
}
68+
}
69+
};
70+
71+
export const Empty: Story = {
72+
args: {
73+
columns,
74+
data: []
75+
}
76+
};

0 commit comments

Comments
 (0)