import React, { useState } from 'react'; import { User, Calendar, Stethoscope, AlertTriangle, Save, ChevronRight, ArrowLeft } from 'lucide-react'; import { sessionStore } from '../store/sessionStore'; import { savePatientRecord } from '../store/patientIdStore'; interface PatientHistoryFormProps { onContinue: () => void; onBack: () => void; patientID?: string | undefined; autoGeneratedPatientId?: string | undefined; } export function PatientHistoryForm({ onContinue, onBack, patientID, autoGeneratedPatientId }: PatientHistoryFormProps) { const [formData, setFormData] = useState({ // Patient Profile name: '', age: '', bloodGroup: '', parity: '', pregnancyStatus: '', gestationalAgeWeeks: '', monthsSinceLastDelivery: '', monthsSinceAbortion: '', menstrualStatus: '', sexualHistory: '', hpvStatus: '', hpvVaccination: '', patientProfileNotes: '', // Symptoms postCoitalBleeding: false, interMenstrualBleeding: false, persistentDischarge: false, symptomsNotes: '', // Screening papSmearResult: '', hpvDnaTypes: '', pastProcedures: { biopsy: false, leep: false, cryotherapy: false, none: false }, screeningNotes: '', // Risk Factors smoking: '', immunosuppression: { hiv: false, steroids: false, none: false }, riskFactorsNotes: '' }); const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target as any; // Handle checkboxes separately if (type === 'checkbox') { const checked = (e.target as HTMLInputElement).checked; setFormData(prev => ({ ...prev, [name]: checked })); } else if (name === 'pregnancyStatus') { setFormData(prev => ({ ...prev, pregnancyStatus: value, gestationalAgeWeeks: value === 'Pregnant' ? prev.gestationalAgeWeeks : '', monthsSinceLastDelivery: value === 'Postpartum' ? prev.monthsSinceLastDelivery : '', monthsSinceAbortion: value === 'Post-abortion' ? prev.monthsSinceAbortion : '' })); } else { // Handle text inputs, textareas, and selects setFormData(prev => ({ ...prev, [name]: value })); } }; const handleNestedCheckboxChange = (category: 'pastProcedures' | 'immunosuppression', field: string) => { if (category === 'pastProcedures') { setFormData(prev => ({ ...prev, pastProcedures: { ...prev.pastProcedures, [field]: !prev.pastProcedures[field as keyof typeof prev.pastProcedures] } })); return; } // category === 'immunosuppression' setFormData(prev => ({ ...prev, immunosuppression: { ...prev.immunosuppression, [field]: !prev.immunosuppression[field as keyof typeof prev.immunosuppression] } })); }; const handleSave = () => { console.log('Saving patient history:', formData); // Save patient record if auto-generated ID is available if (autoGeneratedPatientId && formData.name) { const examDate = new Date().toISOString().split('T')[0]; savePatientRecord({ id: autoGeneratedPatientId, name: formData.name, examDate: examDate }); // Also update sessionStore with patient info sessionStore.merge({ patientInfo: { id: autoGeneratedPatientId, name: formData.name, examDate: examDate } }); } }; const handleSaveAndContinue = () => { handleSave(); onContinue(); }; // Load previously saved patient history from sessionStore on mount React.useEffect(() => { const session = sessionStore.get(); if (session.patientHistory) { setFormData(prev => ({ ...prev, ...session.patientHistory })); } }, []); // Save formData to sessionStore on every change React.useEffect(() => { sessionStore.merge({ patientHistory: formData as any }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [JSON.stringify(formData)]); return

Patient Information & Clinical History

Patient ID: {autoGeneratedPatientId || patientID || 'New - unsaved'}
{/* SECTION 1: Patient Profile */}

Patient Name

{['Pregnant', 'Not pregnant', 'Postpartum', 'Post-abortion', 'Unknown'].map(status => ( ))}
{formData.pregnancyStatus === 'Pregnant' && (
)} {formData.pregnancyStatus === 'Postpartum' && (
)} {formData.pregnancyStatus === 'Post-abortion' && (
)}