import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { labService } from '../../services/labService'; import { patientService } from '../../services/patientService'; import { medicalRecordService } from '../../services/medicalRecordService'; import ErrorAlert from '../../components/ErrorAlert'; import SuccessAlert from '../../components/SuccessAlert'; function LabResultForm() { 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 [pendingTests, setPendingTests] = useState([]); const [selectedTest, setSelectedTest] = useState(null); const [medicalRecordId, setMedicalRecordId] = useState(null); const [formData, setFormData] = useState({ medicalRecordId: '', testId: '', results: '', 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 pending tests const testsRes = await labService.getLabTestRequestsForPatient(patientRes.data.patientId); setPendingTests(testsRes.data || []); setFormData(prev => ({ ...prev, medicalRecordId: medicalRecordRes.data.recordId })); } catch (err) { setError('Patient not found or error loading tests'); setPatient(null); setPendingTests([]); } finally { setLoading(false); } }; const handleSelectTest = (test) => { setSelectedTest(test); setFormData(prev => ({ ...prev, testId: test.testId, 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.testId || !formData.results) { setError('Please fill in all required fields'); return; } try { setLoading(true); const submitData = { medicalRecordId: parseInt(formData.medicalRecordId), testId: parseInt(formData.testId), results: formData.results, resultDate: formData.resultDate, }; await labService.submitLabResult(submitData); setSuccess('Lab result submitted successfully!'); setFormData({ medicalRecordId: '', testId: '', results: '', resultDate: new Date().toISOString().split('T')[0], }); setSelectedTest(null); setPatient(null); setSearchEmbg(''); setPendingTests([]); // Navigate back to lab tests page after a short delay setTimeout(() => navigate('/lab-tests'), 2000); } catch (err) { setError('Failed to submit lab result: ' + (err.response?.data?.error || err.message)); setLoading(false); } }; return (
EMBG
{patient.embg}
Blood Type
{patient.bloodType || 'N/A'}
Date of Birth
{patient.dateOfBirth}
{test.testName}
Requested by: {test.doctorName}
Request Date: {test.requestDate}
{test.notes && (Notes: {test.notes}
)}No pending lab tests for this patient
Enter a patient EMBG to view pending lab tests