{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\lab-tests\\\\LabResultForm.js\",\n _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { labService } from '../../services/labService';\nimport { patientService } from '../../services/patientService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport SuccessAlert from '../../components/SuccessAlert';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction LabResultForm() {\n _s();\n const navigate = useNavigate();\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [loading, setLoading] = useState(false);\n const [searchEmbg, setSearchEmbg] = useState('');\n const [patient, setPatient] = useState(null);\n const [pendingTests, setPendingTests] = useState([]);\n const [selectedTest, setSelectedTest] = useState(null);\n const [medicalRecordId, setMedicalRecordId] = useState(null);\n const [formData, setFormData] = useState({\n medicalRecordId: '',\n testId: '',\n results: '',\n resultDate: new Date().toISOString().split('T')[0]\n });\n const handleSearch = async e => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n try {\n if (!searchEmbg.trim()) {\n setError('Please enter patient EMBG');\n setLoading(false);\n return;\n }\n const patientRes = await patientService.getPatientByEmbg(searchEmbg);\n setPatient(patientRes.data);\n\n // Get medical record\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);\n setMedicalRecordId(medicalRecordRes.data.recordId);\n\n // Get pending tests\n const testsRes = await labService.getLabTestRequestsForPatient(patientRes.data.patientId);\n setPendingTests(testsRes.data || []);\n setFormData(prev => ({\n ...prev,\n medicalRecordId: medicalRecordRes.data.recordId\n }));\n } catch (err) {\n setError('Patient not found or error loading tests');\n setPatient(null);\n setPendingTests([]);\n } finally {\n setLoading(false);\n }\n };\n const handleSelectTest = test => {\n setSelectedTest(test);\n setFormData(prev => ({\n ...prev,\n testId: test.testId,\n medicalRecordId: medicalRecordId || prev.medicalRecordId\n }));\n };\n const handleChange = e => {\n const {\n name,\n value\n } = e.target;\n setFormData({\n ...formData,\n [name]: value\n });\n };\n const handleSubmit = async e => {\n e.preventDefault();\n setError(null);\n setSuccess(null);\n if (!formData.medicalRecordId || !formData.testId || !formData.results) {\n setError('Please fill in all required fields');\n return;\n }\n try {\n setLoading(true);\n const submitData = {\n medicalRecordId: parseInt(formData.medicalRecordId),\n testId: parseInt(formData.testId),\n results: formData.results,\n resultDate: formData.resultDate\n };\n await labService.submitLabResult(submitData);\n setSuccess('Lab result submitted successfully!');\n setFormData({\n medicalRecordId: '',\n testId: '',\n results: '',\n resultDate: new Date().toISOString().split('T')[0]\n });\n setSelectedTest(null);\n setPatient(null);\n setSearchEmbg('');\n setPendingTests([]);\n\n // Navigate back to lab tests page after a short delay\n setTimeout(() => navigate('/lab-tests'), 2000);\n } catch (err) {\n var _err$response, _err$response$data;\n setError('Failed to submit lab result: ' + (((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.error) || err.message));\n setLoading(false);\n }\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-3xl mx-auto\",\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"text-3xl font-bold mb-6\",\n children: \"Submit Lab Result\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 124,\n columnNumber: 7\n }, this), error && /*#__PURE__*/_jsxDEV(ErrorAlert, {\n message: error,\n onClose: () => setError(null)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 126,\n columnNumber: 17\n }, this), success && /*#__PURE__*/_jsxDEV(SuccessAlert, {\n message: success,\n onClose: () => setSuccess(null)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 127,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6 mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Search Patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 131,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSearch,\n className: \"flex gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n value: searchEmbg,\n onChange: e => setSearchEmbg(e.target.value),\n placeholder: \"Enter patient EMBG\",\n className: \"flex-1 px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 133,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: loading,\n className: \"bg-purple-600 text-white px-8 py-2 rounded hover:bg-purple-700 disabled:bg-gray-400\",\n children: loading ? 'Searching...' : 'Search'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 140,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 132,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 130,\n columnNumber: 7\n }, this), patient && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold mb-4\",\n children: [patient.firstName, \" \", patient.lastName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 155,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-3 gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: \"EMBG\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 158,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: patient.embg\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 159,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 157,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: \"Blood Type\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 162,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: patient.bloodType || 'N/A'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 163,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 161,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: \"Date of Birth\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: patient.dateOfBirth\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 156,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 154,\n columnNumber: 11\n }, this), pendingTests.length > 0 ? /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Pending Lab Tests\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: pendingTests.map(test => /*#__PURE__*/_jsxDEV(\"div\", {\n onClick: () => handleSelectTest(test),\n className: `p-4 rounded-lg border-2 cursor-pointer transition ${(selectedTest === null || selectedTest === void 0 ? void 0 : selectedTest.testId) === test.testId ? 'border-purple-600 bg-blue-50' : 'border-gray-200 bg-gray-50 hover:border-blue-400'}`,\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold text-lg\",\n children: test.testName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Requested by: \", test.doctorName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 188,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Request Date: \", test.requestDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 189,\n columnNumber: 21\n }, this), test.notes && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600 mt-1\",\n children: [\"Notes: \", test.notes]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 23\n }, this)]\n }, test.testId, true, {\n fileName: _jsxFileName,\n lineNumber: 178,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 176,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 13\n }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-blue-50 rounded-lg p-6 text-center\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600\",\n children: \"No pending lab tests for this patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 199,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 198,\n columnNumber: 13\n }, this), selectedTest && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-xl font-bold mb-4\",\n children: [\"Submit Results for \", selectedTest.testName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-2 gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Test ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 210,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"number\",\n value: formData.testId,\n disabled: true,\n className: \"w-full px-4 py-2 border rounded-lg bg-gray-100\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 211,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 209,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Medical Record ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 219,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"number\",\n value: formData.medicalRecordId,\n disabled: true,\n className: \"w-full px-4 py-2 border rounded-lg bg-gray-100\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 220,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Results *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 230,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"textarea\", {\n name: \"results\",\n value: formData.results,\n onChange: handleChange,\n placeholder: \"Enter the lab test results\",\n className: \"w-full px-4 py-2 border rounded-lg\",\n rows: \"6\",\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 229,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Result Date\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 243,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n name: \"resultDate\",\n value: formData.resultDate,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 244,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-4 pt-6\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: loading,\n style: {\n flex: 1,\n background: loading ? '#d1d5db' : '#bfdbfe',\n color: '#1e1035',\n padding: '8px 12px',\n borderRadius: '6px',\n border: 'none',\n cursor: loading ? 'not-allowed' : 'pointer',\n fontWeight: '400',\n fontSize: '13px'\n },\n onMouseEnter: e => !loading && (e.currentTarget.style.background = '#93c5fd'),\n onMouseLeave: e => !loading && (e.currentTarget.style.background = '#bfdbfe'),\n children: loading ? 'Submitting...' : 'Submit Result'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"button\",\n onClick: () => navigate('/lab-tests'),\n className: \"flex-1 bg-gray-400 text-white py-2 rounded-lg hover:bg-gray-500\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 253,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 207,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 205,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 152,\n columnNumber: 9\n }, this), !patient && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-gray-50 rounded-lg p-12 text-center\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-lg\",\n children: \"Enter a patient EMBG to view pending lab tests\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 290,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 289,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 5\n }, this);\n}\n_s(LabResultForm, \"g6Bt6jZizoKtxYutowK+USPVcrw=\", false, function () {\n return [useNavigate];\n});\n_c = LabResultForm;\nexport default LabResultForm;\nvar _c;\n$RefreshReg$(_c, \"LabResultForm\");","map":{"version":3,"names":["React","useState","useNavigate","labService","patientService","medicalRecordService","ErrorAlert","SuccessAlert","jsxDEV","_jsxDEV","LabResultForm","_s","navigate","error","setError","success","setSuccess","loading","setLoading","searchEmbg","setSearchEmbg","patient","setPatient","pendingTests","setPendingTests","selectedTest","setSelectedTest","medicalRecordId","setMedicalRecordId","formData","setFormData","testId","results","resultDate","Date","toISOString","split","handleSearch","e","preventDefault","trim","patientRes","getPatientByEmbg","data","medicalRecordRes","getMedicalRecordByPatientId","patientId","recordId","testsRes","getLabTestRequestsForPatient","prev","err","handleSelectTest","test","handleChange","name","value","target","handleSubmit","submitData","parseInt","submitLabResult","setTimeout","_err$response","_err$response$data","response","message","className","children","fileName","_jsxFileName","lineNumber","columnNumber","onClose","onSubmit","type","onChange","placeholder","disabled","firstName","lastName","embg","bloodType","dateOfBirth","length","map","onClick","testName","doctorName","requestDate","notes","rows","required","style","flex","background","color","padding","borderRadius","border","cursor","fontWeight","fontSize","onMouseEnter","currentTarget","onMouseLeave","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/lab-tests/LabResultForm.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { labService } from '../../services/labService';\nimport { patientService } from '../../services/patientService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport SuccessAlert from '../../components/SuccessAlert';\n\nfunction LabResultForm() {\n const navigate = useNavigate();\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [loading, setLoading] = useState(false);\n const [searchEmbg, setSearchEmbg] = useState('');\n const [patient, setPatient] = useState(null);\n const [pendingTests, setPendingTests] = useState([]);\n const [selectedTest, setSelectedTest] = useState(null);\n const [medicalRecordId, setMedicalRecordId] = useState(null);\n\n const [formData, setFormData] = useState({\n medicalRecordId: '',\n testId: '',\n results: '',\n resultDate: new Date().toISOString().split('T')[0],\n });\n\n const handleSearch = async (e) => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n\n try {\n if (!searchEmbg.trim()) {\n setError('Please enter patient EMBG');\n setLoading(false);\n return;\n }\n\n const patientRes = await patientService.getPatientByEmbg(searchEmbg);\n setPatient(patientRes.data);\n\n // Get medical record\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);\n setMedicalRecordId(medicalRecordRes.data.recordId);\n\n // Get pending tests\n const testsRes = await labService.getLabTestRequestsForPatient(patientRes.data.patientId);\n setPendingTests(testsRes.data || []);\n\n setFormData(prev => ({\n ...prev,\n medicalRecordId: medicalRecordRes.data.recordId\n }));\n } catch (err) {\n setError('Patient not found or error loading tests');\n setPatient(null);\n setPendingTests([]);\n } finally {\n setLoading(false);\n }\n };\n\n const handleSelectTest = (test) => {\n setSelectedTest(test);\n setFormData(prev => ({\n ...prev,\n testId: test.testId,\n medicalRecordId: medicalRecordId || prev.medicalRecordId\n }));\n };\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n setFormData({\n ...formData,\n [name]: value,\n });\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setError(null);\n setSuccess(null);\n\n if (!formData.medicalRecordId || !formData.testId || !formData.results) {\n setError('Please fill in all required fields');\n return;\n }\n\n try {\n setLoading(true);\n\n const submitData = {\n medicalRecordId: parseInt(formData.medicalRecordId),\n testId: parseInt(formData.testId),\n results: formData.results,\n resultDate: formData.resultDate,\n };\n\n await labService.submitLabResult(submitData);\n\n setSuccess('Lab result submitted successfully!');\n setFormData({\n medicalRecordId: '',\n testId: '',\n results: '',\n resultDate: new Date().toISOString().split('T')[0],\n });\n setSelectedTest(null);\n setPatient(null);\n setSearchEmbg('');\n setPendingTests([]);\n\n // Navigate back to lab tests page after a short delay\n setTimeout(() => navigate('/lab-tests'), 2000);\n } catch (err) {\n setError('Failed to submit lab result: ' + (err.response?.data?.error || err.message));\n setLoading(false);\n }\n };\n\n return (\n
EMBG
\n{patient.embg}
\nBlood Type
\n{patient.bloodType || 'N/A'}
\nDate of Birth
\n{patient.dateOfBirth}
\n{test.testName}
\nRequested by: {test.doctorName}
\nRequest Date: {test.requestDate}
\n {test.notes && (\nNotes: {test.notes}
\n )}\nNo pending lab tests for this patient
\nEnter a patient EMBG to view pending lab tests
\n