diff --git a/apps/web/src/routes/_app/dashboard.tsx b/apps/web/src/routes/_app/dashboard.tsx index 0cfd37b9b..408b9b045 100644 --- a/apps/web/src/routes/_app/dashboard.tsx +++ b/apps/web/src/routes/_app/dashboard.tsx @@ -1,16 +1,20 @@ -import React from 'react'; +import React, { useState } from 'react'; -import { Heading, Select, StatisticCard } from '@douglasneuroinformatics/libui/components'; +import { Dialog, Heading, Select, StatisticCard } from '@douglasneuroinformatics/libui/components'; import { useTheme, useTranslation } from '@douglasneuroinformatics/libui/hooks'; import type { Theme } from '@douglasneuroinformatics/libui/hooks'; import { ClipboardDocumentIcon, DocumentTextIcon, UserIcon, UsersIcon } from '@heroicons/react/24/solid'; import type { AppSubjectName } from '@opendatacapture/schemas/core'; -import { createFileRoute, redirect } from '@tanstack/react-router'; +import { createFileRoute, redirect, useNavigate } from '@tanstack/react-router'; +import { AnimatePresence, motion } from 'motion/react'; import { Area, AreaChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts'; import { PageHeader } from '@/components/PageHeader'; +import { useInstrumentInfoQuery } from '@/hooks/useInstrumentInfoQuery'; import { summaryQueryOptions, useSummaryQuery } from '@/hooks/useSummaryQuery'; import { useAppStore } from '@/store'; +import { useUsersQuery } from '@/hooks/useUsersQuery'; +import { useInstrumentRecords } from '@/hooks/useInstrumentRecords'; const RouteComponent = () => { const changeGroup = useAppStore((store) => store.changeGroup); @@ -19,6 +23,43 @@ const RouteComponent = () => { const { t } = useTranslation(); const [theme] = useTheme(); const summaryQuery = useSummaryQuery({ params: { groupId: currentGroup?.id } }); + const navigate = useNavigate(); + const [isLookupOpen, setIsLookupOpen] = useState(false); + const [isUserLookupOpen, setIsUserLookupOpen] = useState(false); + const [isRecordLookupOpen, setIsRecordLookupOpen] = useState(false); + const instrumentInfoQuery = useInstrumentInfoQuery(); + const userInfoQuery = useUsersQuery(); + + const recordsQuery = useInstrumentRecords({ + enabled: true, + params: { + groupId: currentGroup?.id + } + }); + + const instrumentData = currentGroup + ? instrumentInfoQuery.data?.filter((instrument) => { + return currentGroup.accessibleInstrumentIds.includes(instrument.id); + }) + : instrumentInfoQuery.data; + + const instrumentInfo = instrumentData?.map((instrument) => { + return { + kind: instrument.kind, + title: instrument.details.title, + id: instrument.id + }; + }); + + const recordIds = recordsQuery.data?.map((record) => record.instrumentId); + + const recordCounter = + instrumentInfo?.map((title) => { + return { + instrumentTitle: title.title, + count: recordIds?.filter((val) => val === title.id).length ?? 0 + }; + }) ?? []; const chartColors = { records: { @@ -133,23 +174,66 @@ const RouteComponent = () => {