import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { procedureService } from '../../services/procedureService'; import { patientService } from '../../services/patientService'; import { medicalRecordService } from '../../services/medicalRecordService'; import ErrorAlert from '../../components/ErrorAlert'; import SuccessAlert from '../../components/SuccessAlert'; function ProcedureResultForm() { const navigate = useNavigate(); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const [loading, setLoading] = useState(false); const [searchEmbg, setSearchEmbg] = useState(''); const [patient, setPatient] = useState(null); const [performedProcedures, setPerformedProcedures] = useState([]); const [selectedProcedure, setSelectedProcedure] = useState(null); const [medicalRecordId, setMedicalRecordId] = useState(null); const [formData, setFormData] = useState({ medicalRecordId: '', procedureId: '', resultDescription: '', resultDate: new Date().toISOString().split('T')[0], }); const handleSearch = async (e) => { e.preventDefault(); setError(null); setLoading(true); try { if (!searchEmbg.trim()) { setError('Please enter patient EMBG'); setLoading(false); return; } const patientRes = await patientService.getPatientByEmbg(searchEmbg); setPatient(patientRes.data); // Get medical record const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId); setMedicalRecordId(medicalRecordRes.data.recordId); // Get performed procedures try { const proceduresRes = await procedureService.getPerformedProceduresForPatient(patientRes.data.patientId); setPerformedProcedures(Array.isArray(proceduresRes.data) ? proceduresRes.data : []); } catch (err) { console.error('Failed to fetch performed procedures:', err); setPerformedProcedures([]); } setFormData(prev => ({ ...prev, medicalRecordId: medicalRecordRes.data.recordId })); } catch (err) { console.error('Search error:', err); setError(`Error: ${err.response?.data?.error || err.message || 'Patient not found'}`); setPatient(null); setPerformedProcedures([]); } finally { setLoading(false); } }; const handleSelectProcedure = (procedure) => { setSelectedProcedure(procedure); setFormData(prev => ({ ...prev, procedureId: procedure.procedure?.procedureId || procedure.procedureId, medicalRecordId: medicalRecordId || prev.medicalRecordId })); }; const handleChange = (e) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value, }); }; const handleSubmit = async (e) => { e.preventDefault(); setError(null); setSuccess(null); if (!formData.medicalRecordId || !formData.procedureId || !formData.resultDescription) { setError('Please fill in all required fields'); return; } try { setLoading(true); const submitData = { medicalRecordId: parseInt(formData.medicalRecordId), procedureId: parseInt(formData.procedureId), resultDescription: formData.resultDescription, resultDate: formData.resultDate, }; await procedureService.submitProcedureResult(submitData); setSuccess('Procedure result submitted successfully!'); setFormData({ medicalRecordId: '', procedureId: '', resultDescription: '', resultDate: new Date().toISOString().split('T')[0], }); setSelectedProcedure(null); setPatient(null); setSearchEmbg(''); setPerformedProcedures([]); // Navigate back to procedures page after a short delay setTimeout(() => navigate('/procedures'), 2000); } catch (err) { setError('Failed to submit procedure result: ' + (err.response?.data?.error || err.message)); setLoading(false); } }; return (

Submit Procedure Result

{error && setError(null)} />} {success && setSuccess(null)} />} {/* Search Patient Form */}

Search Patient

setSearchEmbg(e.target.value)} placeholder="Enter patient EMBG" className="flex-1 px-4 py-2 border rounded-lg" />
{/* Patient Info and Performed Procedures */} {patient && (
{/* Patient Card */}

{patient.firstName} {patient.lastName}

EMBG

{patient.embg}

Blood Type

{patient.bloodType || 'N/A'}

Date of Birth

{patient.dateOfBirth}

{/* Performed Procedures List */} {performedProcedures.length > 0 ? (

Performed Procedures

{performedProcedures.map((proc) => (
handleSelectProcedure(proc)} className={`p-4 rounded-lg border-2 cursor-pointer transition ${ selectedProcedure?.performedId === proc.performedId ? 'border-purple-600 bg-blue-50' : 'border-gray-200 bg-gray-50 hover:border-blue-400' }`} >

{proc.procedure?.procedureType || 'Procedure'}

Requested by: {proc.doctor?.firstName} {proc.doctor?.lastName}

Procedure Date: {proc.procedureDate}

{proc.notes && (

Notes: {proc.notes}

)}
))}
) : (

No performed procedures for this patient

)} {/* Result Submission Form */} {selectedProcedure && (

Submit Result for {selectedProcedure.procedure?.procedureType}