import { notFound } from "next/navigation"; import { api } from "~/trpc/server"; import { EntityView, EntityViewHeader, EntityViewSection, } from "~/components/ui/entity-view"; import { ParticipantDocuments } from "./participant-documents"; import { Card, CardContent, CardHeader, CardTitle, CardDescription, } from "~/components/ui/card"; import { Badge } from "~/components/ui/badge"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; import { Button } from "~/components/ui/button"; import { Edit, Users } from "lucide-react"; import Link from "next/link"; import { PageHeader } from "~/components/ui/page-header"; import { ParticipantConsentManager } from "~/components/participants/ParticipantConsentManager"; interface ParticipantDetailPageProps { params: Promise<{ id: string; participantId: string }>; } export default async function ParticipantDetailPage({ params, }: ParticipantDetailPageProps) { const { id: studyId, participantId } = await params; const participant = await api.participants.get({ id: participantId }); if (!participant) { notFound(); } // Ensure participant belongs to study if (participant.studyId !== studyId) { notFound(); } return ( Edit Participant } /> Overview Files & Documents
Code {participant.participantCode}
Name {participant.name || "-"}
Email {participant.email || "-"}
Added {new Date(participant.createdAt).toLocaleDateString()}
Age {(participant.demographics as any)?.age || "-"}
Gender {(participant.demographics as any)?.gender?.replace( "_", " ", ) || "-"}
); }