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 (
EMBG
{patient.embg}
Blood Type
{patient.bloodType || 'N/A'}
Date of Birth
{patient.dateOfBirth}
{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
Enter a patient EMBG to view performed procedures