Skip to content

Commit 4b79636

Browse files
committed
implement data table on users page
1 parent 69d942a commit 4b79636

File tree

4 files changed

+43
-53
lines changed

4 files changed

+43
-53
lines changed

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,8 @@ const RouteComponent = () => {
4848
data={groupsQuery.data}
4949
rowActions={[
5050
{
51-
label: t({
52-
en: 'Manage',
53-
fr: 'Gérer'
54-
}),
55-
onSelect: (row) => setSelectedGroup(row)
51+
label: t('common.manage'),
52+
onSelect: setSelectedGroup
5653
}
5754
]}
5855
togglesComponent={() => (

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

Lines changed: 25 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@ import React, { useEffect, useMemo, useState } from 'react';
22

33
import { isAllUndefined, snakeToCamelCase } from '@douglasneuroinformatics/libjs';
44
import { estimatePasswordStrength } from '@douglasneuroinformatics/libpasswd';
5-
import {
6-
Button,
7-
ClientTable,
8-
Dialog,
9-
Form,
10-
Heading,
11-
SearchBar,
12-
Sheet
13-
} from '@douglasneuroinformatics/libui/components';
5+
import { Button, DataTable, Dialog, Form, Heading, Sheet } from '@douglasneuroinformatics/libui/components';
146
import { useTranslation } from '@douglasneuroinformatics/libui/hooks';
157
import type { FormTypes } from '@opendatacapture/runtime-core';
168
import { $UserPermission } from '@opendatacapture/schemas/core';
@@ -24,7 +16,6 @@ import { PageHeader } from '@/components/PageHeader';
2416
import { WithFallback } from '@/components/WithFallback';
2517
import { useDeleteUserMutation } from '@/hooks/useDeleteUserMutation';
2618
import { groupsQueryOptions, useGroupsQuery } from '@/hooks/useGroupsQuery';
27-
import { useSearch } from '@/hooks/useSearch';
2819
import { useUpdateUserMutation } from '@/hooks/useUpdateUserMutation';
2920
import { usersQueryOptions, useUsersQuery } from '@/hooks/useUsersQuery';
3021
import { useAppStore } from '@/store';
@@ -276,7 +267,6 @@ const RouteComponent = () => {
276267
const deleteUserMutation = useDeleteUserMutation();
277268
const updateUserMutation = useUpdateUserMutation();
278269
const [selectedUser, setSelectedUser] = useState<null | User>(null);
279-
const { filteredData, searchTerm, setSearchTerm } = useSearch(usersQuery.data ?? [], 'username');
280270

281271
const [data, setData] = useState<null | UpdateUserFormInputData>(null);
282272

@@ -307,34 +297,16 @@ const RouteComponent = () => {
307297
})}
308298
</Heading>
309299
</PageHeader>
310-
<div className="mb-3 flex gap-3">
311-
<SearchBar
312-
className="grow"
313-
data-testid="admin-users-search"
314-
placeholder={t({
315-
en: 'Search by Username',
316-
fr: "Recherche par nom d'utilisateur"
317-
})}
318-
value={searchTerm}
319-
onValueChange={setSearchTerm}
320-
/>
321-
<Button variant="outline">
322-
<Link to="/admin/users/create">
323-
{t({
324-
en: 'Add User',
325-
fr: 'Ajouter un utilisateur'
326-
})}
327-
</Link>
328-
</Button>
329-
</div>
330-
<ClientTable<User>
300+
<DataTable
331301
columns={[
332302
{
333-
field: 'username',
334-
label: t('common.username')
303+
accessorKey: 'username',
304+
header: t('common.username')
335305
},
336306
{
337-
field: ({ basePermissionLevel }) => {
307+
accessorKey: 'basePermissionLevel',
308+
cell: (ctx) => {
309+
const basePermissionLevel = ctx.getValue() as User['basePermissionLevel'];
338310
if (!basePermissionLevel) {
339311
return t({
340312
en: 'None',
@@ -343,14 +315,27 @@ const RouteComponent = () => {
343315
}
344316
return t(`common.${snakeToCamelCase(basePermissionLevel)}`);
345317
},
346-
label: t('common.basePermissionLevel')
318+
header: t('common.basePermissionLevel')
347319
}
348320
]}
349-
data={filteredData}
321+
data={usersQuery.data}
350322
data-testid="admin-users-table"
351-
entriesPerPage={15}
352-
minRows={15}
353-
onEntryClick={setSelectedUser}
323+
rowActions={[
324+
{
325+
label: t('common.manage'),
326+
onSelect: setSelectedUser
327+
}
328+
]}
329+
togglesComponent={() => (
330+
<Button variant="outline">
331+
<Link to="/admin/users/create">
332+
{t({
333+
en: 'Add User',
334+
fr: 'Ajouter un utilisateur'
335+
})}
336+
</Link>
337+
</Button>
338+
)}
354339
/>
355340
<Sheet.Content className="flex flex-col p-0" data-testid="admin-user-edit-sheet">
356341
<Sheet.Header className="px-6 pt-6">

apps/web/src/translations/common.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@
7777
"en": "Insufficient password strength",
7878
"fr": "Mot de passe trop faible"
7979
},
80+
"manage": {
81+
"en": "Manage",
82+
"fr": "Gérer"
83+
},
8084
"method": {
8185
"en": "Method",
8286
"fr": "Méthode"
@@ -85,6 +89,10 @@
8589
"en": "Password",
8690
"fr": "Mot de passe"
8791
},
92+
"passwordsMustMatch": {
93+
"en": "Passwords Must Match",
94+
"fr": "Les mots de passe doivent correspondre"
95+
},
8896
"personalInfo": {
8997
"en": "Personal Information",
9098
"fr": "Renseignements personnels"
@@ -101,10 +109,6 @@
101109
"en": "Standard",
102110
"fr": "Standard"
103111
},
104-
"passwordsMustMatch": {
105-
"en": "Passwords Must Match",
106-
"fr": "Les mots de passe doivent correspondre"
107-
},
108112
"subjectIdentification": {
109113
"description": {
110114
"en": "The following items are used to compute a unique identifier that enables consistent cross-session identification.",
@@ -154,5 +158,9 @@
154158
"usernameExists": {
155159
"en": "Username already exists",
156160
"fr": "Le nom d'utilisateur existe déjà"
161+
},
162+
"view": {
163+
"en": "View",
164+
"fr": "Voir"
157165
}
158166
}

apps/web/src/translations/layout.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,6 @@
5050
"en": "Data Hub",
5151
"fr": "Centre de données"
5252
},
53-
"upload": {
54-
"en": "Upload Data",
55-
"fr": "Téléverser les données"
56-
},
5753
"endSession": {
5854
"en": "End Current Session",
5955
"fr": "Terminer la session en cours"
@@ -66,6 +62,10 @@
6662
"en": "Start Session",
6763
"fr": "Commencer une session"
6864
},
65+
"upload": {
66+
"en": "Upload Data",
67+
"fr": "Téléverser les données"
68+
},
6969
"viewCurrentSubject": {
7070
"en": "View Current Subject",
7171
"fr": "Voir le client actuel"

0 commit comments

Comments
 (0)