import { useState, useEffect } from 'react'; import { XIcon } from 'lucide-react'; // Static defaults for fields requested to be static. Change these constants to update the values shown. const DEFAULT_PATIENT_ID = '41334'; const DEFAULT_PHYSICIAN = 'Rajesh Venugopal'; const DEFAULT_FACILITY = 'Multi-Lab Speciality'; interface ReportModalProps { isOpen: boolean; onClose: () => void; onSubmit: (formData: FormData) => void; analysisId: string; analysisSummaryJson: string; } export interface ReportFormData { patient_id: string; exam_date: string; metadata: { physician: string; facility: string; clinical_history?: string; }; notes?: string; analysis_id: string; } export function ReportModal({ isOpen, onClose, onSubmit, analysisId, analysisSummaryJson }: ReportModalProps) { const [formData, setFormData] = useState({ patient_id: DEFAULT_PATIENT_ID, exam_date: new Date().toISOString().split('T')[0], metadata: { physician: DEFAULT_PHYSICIAN, facility: DEFAULT_FACILITY, clinical_history: '', }, notes: '', analysis_id: analysisId, }); // Keep internal form state in sync when the parent passes a new analysisId useEffect(() => { setFormData(prev => ({ ...prev, analysis_id: analysisId })); }, [analysisId]); if (!isOpen) return null; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // Build FormData for FastAPI endpoint const payload = new FormData(); payload.append("patient_id", formData.patient_id); payload.append("exam_date", formData.exam_date); payload.append("metadata", JSON.stringify(formData.metadata)); payload.append("notes", formData.notes || ""); payload.append("analysis_id", formData.analysis_id); payload.append("analysis_summary", analysisSummaryJson); // Pass the FormData object to the parent onSubmit onSubmit(payload); }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; if (name.startsWith('metadata.')) { const field = name.split('.')[1]; setFormData(prev => ({ ...prev, metadata: { ...prev.metadata, [field]: value, }, })); } else { setFormData(prev => ({ ...prev, [name]: value, })); } }; return (

Generate Medical Report

{/* Patient Information */}

Patient Information

{/* Slide Metadata */}

Slide Metadata

{/* Notes */}

Doctor's Notes