@@ -2,15 +2,7 @@ import React, { useEffect, useMemo, useState } from 'react';
22
33import { isAllUndefined , snakeToCamelCase } from '@douglasneuroinformatics/libjs' ;
44import { 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' ;
146import { useTranslation } from '@douglasneuroinformatics/libui/hooks' ;
157import type { FormTypes } from '@opendatacapture/runtime-core' ;
168import { $UserPermission } from '@opendatacapture/schemas/core' ;
@@ -24,7 +16,6 @@ import { PageHeader } from '@/components/PageHeader';
2416import { WithFallback } from '@/components/WithFallback' ;
2517import { useDeleteUserMutation } from '@/hooks/useDeleteUserMutation' ;
2618import { groupsQueryOptions , useGroupsQuery } from '@/hooks/useGroupsQuery' ;
27- import { useSearch } from '@/hooks/useSearch' ;
2819import { useUpdateUserMutation } from '@/hooks/useUpdateUserMutation' ;
2920import { usersQueryOptions , useUsersQuery } from '@/hooks/useUsersQuery' ;
3021import { 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" >
0 commit comments