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 (

Submit Lab 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 Pending Tests */} {patient && (
{/* Patient Card */}

{patient.firstName} {patient.lastName}

EMBG

{patient.embg}

Blood Type

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

Date of Birth

{patient.dateOfBirth}

{/* Pending Tests List */} {pendingTests.length > 0 ? (

Pending Lab Tests

{pendingTests.map((test) => (
handleSelectTest(test)} className={`p-4 rounded-lg border-2 cursor-pointer transition ${ selectedTest?.testId === test.testId ? 'border-purple-600 bg-blue-50' : 'border-gray-200 bg-gray-50 hover:border-blue-400' }`} >

{test.testName}

Requested by: {test.doctorName}

Request Date: {test.requestDate}

{test.notes && (

Notes: {test.notes}

)}
))}
) : (

No pending lab tests for this patient

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

Submit Results for {selectedTest.testName}