Skip to content

Commit 69d942a

Browse files
committed
implement data table on groups page
1 parent e498899 commit 69d942a

File tree

1 file changed

+28
-31
lines changed
  • apps/web/src/routes/_app/admin/groups

1 file changed

+28
-31
lines changed

apps/web/src/routes/_app/admin/groups/index.tsx

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
import { useState } from 'react';
22

3-
import { Button, ClientTable, Heading, SearchBar, Sheet } from '@douglasneuroinformatics/libui/components';
3+
import { Button, DataTable, Heading, Sheet } from '@douglasneuroinformatics/libui/components';
44
import { useTranslation } from '@douglasneuroinformatics/libui/hooks';
55
import type { Group } from '@opendatacapture/schemas/group';
66
import { createFileRoute, Link } from '@tanstack/react-router';
77

88
import { PageHeader } from '@/components/PageHeader';
99
import { useDeleteGroupMutation } from '@/hooks/useDeleteGroupMutation';
1010
import { groupsQueryOptions, useGroupsQuery } from '@/hooks/useGroupsQuery';
11-
import { useSearch } from '@/hooks/useSearch';
1211

1312
const RouteComponent = () => {
1413
const { t } = useTranslation();
1514
const groupsQuery = useGroupsQuery();
1615
const deleteGroupMutation = useDeleteGroupMutation();
1716
const [selectedGroup, setSelectedGroup] = useState<Group | null>(null);
18-
const { filteredData, searchTerm, setSearchTerm } = useSearch(groupsQuery.data ?? [], 'name');
1917

2018
return (
2119
<Sheet open={Boolean(selectedGroup)} onOpenChange={() => setSelectedGroup(null)}>
@@ -27,47 +25,46 @@ const RouteComponent = () => {
2725
})}
2826
</Heading>
2927
</PageHeader>
30-
<div className="mb-3 flex gap-3">
31-
<SearchBar
32-
className="grow"
33-
placeholder={t({
34-
en: 'Search by Group Name',
35-
fr: 'Recherche par nom de groupe'
36-
})}
37-
value={searchTerm}
38-
onValueChange={setSearchTerm}
39-
/>
40-
<Button asChild variant="outline">
41-
<Link to="/admin/groups/create">
42-
{t({
43-
en: 'Add Group',
44-
fr: 'Ajouter un groupe'
45-
})}
46-
</Link>
47-
</Button>
48-
</div>
49-
<ClientTable<Group>
28+
<DataTable
5029
columns={[
5130
{
52-
field: 'name',
53-
label: t('common.groupName')
31+
accessorKey: 'name',
32+
header: t('common.groupName')
5433
},
5534
{
56-
field: ({ type }) => {
35+
accessorKey: 'type',
36+
cell: (ctx) => {
37+
const type = ctx.getValue() as Group['type'];
5738
if (type === 'CLINICAL') {
5839
return t('common.clinical');
5940
} else if (type === 'RESEARCH') {
6041
return t('common.research');
6142
}
6243
return type satisfies never;
6344
},
64-
label: t('common.groupType')
45+
header: t('common.groupType')
6546
}
6647
]}
67-
data={filteredData}
68-
entriesPerPage={15}
69-
minRows={15}
70-
onEntryClick={setSelectedGroup}
48+
data={groupsQuery.data}
49+
rowActions={[
50+
{
51+
label: t({
52+
en: 'Manage',
53+
fr: 'Gérer'
54+
}),
55+
onSelect: (row) => setSelectedGroup(row)
56+
}
57+
]}
58+
togglesComponent={() => (
59+
<Button asChild variant="outline">
60+
<Link to="/admin/groups/create">
61+
{t({
62+
en: 'Add Group',
63+
fr: 'Ajouter un groupe'
64+
})}
65+
</Link>
66+
</Button>
67+
)}
7168
/>
7269
<Sheet.Content>
7370
<Sheet.Header>

0 commit comments

Comments
 (0)