in 3-ai-native-e2e-sample/frontend/src/pages/patient.tsx [11:67]
export function PatientPage() {
const [patientData, setPatientData] = useState<PatientData>({
age: '',
gender: '',
conditions: '',
medications: ''
})
const [eligibility, setEligibility] = useState<EligibilityResponse | null>(null)
const [loading, setLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const handleCheckEligibility = async () => {
if (!patientData.age || !patientData.gender) {
setError('Please fill in at least age and gender')
return
}
setLoading(true)
setError(null)
try {
const { data, error: apiError } = await api.checkEligibility(patientData)
if (apiError) {
throw new Error(apiError)
}
setEligibility(data ?? null)
} catch (error) {
setError(error instanceof Error ? error.message : 'Failed to check eligibility')
setEligibility(null)
} finally {
setLoading(false)
}
}
return (
<div className="space-y-6">
<div>
<h1 className="text-2xl sm:text-3xl font-bold tracking-tight">Clinical Trial Eligibility Explorer</h1>
<p className="text-base sm:text-lg text-muted-foreground mt-2">
Explore potential clinical trial matches based on patient information. This is a demonstration tool and not intended for medical decisions.
</p>
</div>
{error && (
<Card className="border-destructive">
<CardContent className="p-6">
<p className="text-center text-destructive">{error}</p>
</CardContent>
</Card>
)}
<div className="grid md:grid-cols-2 gap-6">
<Card>
<CardHeader>
<CardTitle>Patient Information</CardTitle>
</CardHeader>
<CardContent>
<form className="space-y-4" onSubmit={(e) => e.preventDefault()}>