@@ -13,6 +13,7 @@ import { PageHeader } from '@/components/PageHeader';
1313import { useInstrumentInfoQuery } from '@/hooks/useInstrumentInfoQuery' ;
1414import { summaryQueryOptions , useSummaryQuery } from '@/hooks/useSummaryQuery' ;
1515import { useAppStore } from '@/store' ;
16+ import { useUsersQuery } from '@/hooks/useUsersQuery' ;
1617
1718const RouteComponent = ( ) => {
1819 const changeGroup = useAppStore ( ( store ) => store . changeGroup ) ;
@@ -23,7 +24,9 @@ const RouteComponent = () => {
2324 const summaryQuery = useSummaryQuery ( { params : { groupId : currentGroup ?. id } } ) ;
2425 const navigate = useNavigate ( ) ;
2526 const [ isLookupOpen , setIsLookupOpen ] = useState ( false ) ;
27+ const [ isUserLookupOpen , setIsUserLookupOpen ] = useState ( false ) ;
2628 const instrumentInfoQuery = useInstrumentInfoQuery ( ) ;
29+ const userInfoQuery = useUsersQuery ( ) ;
2730
2831 const chartColors = {
2932 records : {
@@ -151,17 +154,54 @@ const RouteComponent = () => {
151154 </ div >
152155 < div className = "body-font" data-testid = "dashboard-statistics" >
153156 < div className = "grid grid-cols-1 gap-6 text-center lg:grid-cols-2 xl:grid-cols-4" >
154- < div className = "group transform transition-all duration-300 hover:scale-105" data-testid = "statistic-users" >
155- < StatisticCard
156- icon = {
157- < UsersIcon className = "h-12 w-12 text-blue-600 transition-transform duration-300 group-hover:scale-110 dark:text-blue-400" />
158- }
159- label = { t ( {
160- en : 'Total Users' ,
161- fr : "Nombre d'utilisateurs"
162- } ) }
163- value = { summaryQuery . data . counts . users }
164- />
157+ < div
158+ className = "group flex transform transition-all duration-300 hover:scale-105"
159+ data-testid = "statistic-users"
160+ >
161+ < Dialog open = { isUserLookupOpen } onOpenChange = { setIsUserLookupOpen } >
162+ < Dialog . Trigger className = "grow" >
163+ < StatisticCard
164+ icon = {
165+ < UsersIcon className = "h-12 w-12 text-blue-600 transition-transform duration-300 group-hover:scale-110 dark:text-blue-400" />
166+ }
167+ label = { t ( {
168+ en : 'Total Users' ,
169+ fr : "Nombre d'utilisateurs"
170+ } ) }
171+ value = { summaryQuery . data . counts . users }
172+ />
173+ </ Dialog . Trigger >
174+ < Dialog . Content data-spotlight-type = "subject-lookup-modal" data-testid = "datahub-subject-lookup-dialog" >
175+ < Dialog . Header >
176+ < Dialog . Title >
177+ { t ( {
178+ en : 'Users' ,
179+ fr : 'Les utilisateurs'
180+ } ) }
181+ </ Dialog . Title >
182+ </ Dialog . Header >
183+ < ul className = "flex flex-col gap-5" >
184+ < AnimatePresence mode = "popLayout" >
185+ { userInfoQuery . data ?. map ( ( user , i ) => {
186+ return (
187+ < motion . li
188+ layout
189+ animate = { { opacity : 1 , y : 0 } }
190+ exit = { { opacity : 0 } }
191+ initial = { { opacity : 0 } }
192+ key = { user . username }
193+ transition = { { bounce : 0.2 , delay : 0.15 * i , duration : 1.5 , type : 'spring' } }
194+ >
195+ < div className = "flex justify-between gap-4" >
196+ < p > { user . username } </ p >
197+ </ div >
198+ </ motion . li >
199+ ) ;
200+ } ) }
201+ </ AnimatePresence >
202+ </ ul >
203+ </ Dialog . Content >
204+ </ Dialog >
165205 </ div >
166206 < button
167207 className = "group transform transition-all duration-300 hover:scale-105"
@@ -184,7 +224,7 @@ const RouteComponent = () => {
184224 />
185225 </ button >
186226 < div
187- className = "group transform transition-all duration-300 hover:scale-105"
227+ className = "group flex transform transition-all duration-300 hover:scale-105"
188228 data-testid = "statistic-instruments"
189229 >
190230 < Dialog open = { isLookupOpen } onOpenChange = { setIsLookupOpen } >
0 commit comments