'use client'; import { useEffect, useState } from "react"; import { useParams } from "next/navigation"; import { Button } from "~/components/ui/button"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "~/components/ui/card"; import { InviteUserDialog } from "~/components/invite-user-dialog"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; import { Badge } from "~/components/ui/badge"; import { format } from "date-fns"; interface Invitation { id: number; email: string; accepted: boolean; expiresAt: string; createdAt: string; roleName: string; inviterName: string; } interface Study { id: number; title: string; description: string | null; createdAt: string; } export default function StudySettings() { const params = useParams(); const studyId = parseInt(params.id as string); const [study, setStudy] = useState(null); const [invitations, setInvitations] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchStudyData(); fetchInvitations(); }, [studyId]); const fetchStudyData = async () => { try { const response = await fetch(`/api/studies/${studyId}`); if (response.ok) { const data = await response.json(); setStudy(data); } } catch (error) { console.error('Error fetching study:', error); } }; const fetchInvitations = async () => { try { const response = await fetch(`/api/invitations?studyId=${studyId}`); if (response.ok) { const data = await response.json(); setInvitations(data); } } catch (error) { console.error('Error fetching invitations:', error); } finally { setLoading(false); } }; const handleInviteSent = () => { fetchInvitations(); }; const handleDeleteInvitation = async (invitationId: number) => { try { const response = await fetch(`/api/invitations/${invitationId}`, { method: 'DELETE', }); if (response.ok) { // Update the local state to remove the deleted invitation setInvitations(invitations.filter(inv => inv.id !== invitationId)); } else { console.error('Error deleting invitation:', response.statusText); } } catch (error) { console.error('Error deleting invitation:', error); } }; if (loading) { return
Loading...
; } if (!study) { return
Study not found
; } return (

{study.title}

Study Settings

Invites Settings
Study Invitations Manage invitations to collaborate on this study
{invitations.length > 0 ? ( invitations.map((invitation) => (
{invitation.email}
Role: {invitation.roleName}
Invited by: {invitation.inviterName} on{" "} {format(new Date(invitation.createdAt), "PPP")}
{invitation.accepted ? "Accepted" : "Pending"} {!invitation.accepted && ( )}
)) ) : (
No invitations sent yet. Use the "Invite User" button to get started.
)}
Study Settings Configure general settings for your study {/* TODO: Add study settings form */}
Study settings coming soon...
); }