11import { 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' ;
44import { useTranslation } from '@douglasneuroinformatics/libui/hooks' ;
55import type { Group } from '@opendatacapture/schemas/group' ;
66import { createFileRoute , Link } from '@tanstack/react-router' ;
77
88import { PageHeader } from '@/components/PageHeader' ;
99import { useDeleteGroupMutation } from '@/hooks/useDeleteGroupMutation' ;
1010import { groupsQueryOptions , useGroupsQuery } from '@/hooks/useGroupsQuery' ;
11- import { useSearch } from '@/hooks/useSearch' ;
1211
1312const 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