"use client"; import * as React from "react"; import Link from "next/link"; import { useSession } from "~/lib/auth-client"; import { formatDistanceToNow } from "date-fns"; import { Play, Plus, Activity, Clock, CheckCircle2, Users, FlaskConical, ChevronRight, Bot, Radio, Building, } from "lucide-react"; import { Button } from "~/components/ui/button"; import { Badge } from "~/components/ui/badge"; import { ScrollArea } from "~/components/ui/scroll-area"; import { PageHeader } from "~/components/ui/page-layout"; import { api } from "~/trpc/react"; export default function DashboardPage() { const { data: session } = useSession(); const userName = session?.user?.name ?? "Researcher"; const { data: userStudies } = api.studies.list.useQuery({ memberOnly: true, limit: 10, }); const { data: recentTrials } = api.trials.list.useQuery({ limit: 5, }); const { data: liveTrials } = api.dashboard.getLiveTrials.useQuery( {}, { refetchInterval: 5000 }, ); const { data: stats } = api.dashboard.getStats.useQuery({}); const greeting = (() => { const hour = new Date().getHours(); if (hour < 12) return "Good morning"; if (hour < 18) return "Good afternoon"; return "Good evening"; })(); const firstStudy = userStudies?.studies?.[0]; return (
{liveTrials.length} Active Session{liveTrials.length > 1 ? "s" : ""}
{liveTrials.map((t) => t.participantCode).join(", ")}
{study.name}
{study.status === "active" ? ( Active ) : ( {study.status} )}
No studies yet
Create your first study to get started
{trial.experiment.name}
{trial.completedAt && ({formatDistanceToNow(new Date(trial.completedAt), { addSuffix: true })}
)} ))} {!recentTrials?.length && (No trials yet
)}{value}
{label}