{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\medical-records\\\\MedicalRecordList.js\",\n _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { patientService } from '../../services/patientService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport { labService } from '../../services/labService';\nimport { procedureService } from '../../services/procedureService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nfunction MedicalRecordList() {\n _s();\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const patientId = searchParams.get('patientId');\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isPatient = user.role === 'PATIENT';\n const [patient, setPatient] = useState(null);\n const [medicalData, setMedicalData] = useState(null);\n const [labResults, setLabResults] = useState([]);\n const [procedureResults, setProcedureResults] = useState([]);\n const [error, setError] = useState(null);\n const [embg, setEmbg] = useState(isPatient ? user.username : '');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n\n // Auto-load patient's own records if logged in as patient, or load specific patient records if patientId is provided\n React.useEffect(() => {\n const loadPatientRecords = async pId => {\n setError(null);\n setLoading(true);\n try {\n // Get patient by ID\n const patientResponse = await patientService.getPatientById(pId);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(pId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n setSearched(true);\n } catch (err) {\n setError(`Failed to load medical records for patient`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n const handleAutoSearch = async () => {\n const searchEmbg = user.username;\n setError(null);\n setLoading(true);\n try {\n // Search patient by EMBG\n const patientResponse = await patientService.getPatientByEmbg(searchEmbg);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n setSearched(true);\n } catch (err) {\n setError(`Patient with EMBG ${searchEmbg} not found`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n\n // Call appropriate function based on conditions\n if (patientId) {\n loadPatientRecords(patientId);\n } else if (isPatient && user.username) {\n handleAutoSearch();\n }\n }, [patientId, isPatient, user.username]);\n const handleSearch = async e => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n try {\n if (!embg.trim()) {\n setError('Please enter an EMBG');\n setLoading(false);\n return;\n }\n\n // Search patient by EMBG\n const patientResponse = await patientService.getPatientByEmbg(embg);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n setSearched(true);\n } catch (err) {\n setError(`Patient with EMBG ${embg} not found`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"text-3xl font-bold mb-6\",\n style: {\n color: '#7c3aed'\n },\n children: \"Medical Records\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 171,\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: 173,\n columnNumber: 17\n }, this), !isPatient && /*#__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 Medical Records\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 178,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSearch,\n className: \"space-y-4\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Patient EMBG\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n value: embg,\n onChange: e => setEmbg(e.target.value),\n placeholder: \"e.g., 1402994123456\",\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 181,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-end\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: loading,\n className: \"bg-purple-600 text-white px-8 py-2 rounded-full hover:bg-purple-700 disabled:bg-gray-400\",\n children: loading ? 'Searching...' : 'Search'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 192,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 180,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 177,\n columnNumber: 9\n }, this), isPatient && loading && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-blue-50 rounded-lg shadow p-6 mb-6\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-700\",\n children: /*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Loading your medical records...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 209,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 207,\n columnNumber: 9\n }, this), isPatient && searched && !loading && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-blue-50 rounded-lg shadow p-6 mb-6\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-700\",\n children: /*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Viewing your medical records\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 216,\n columnNumber: 9\n }, this), searched && 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(\"div\", {\n className: \"flex justify-between items-start mb-4\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold\",\n children: [patient.firstName, \" \", patient.lastName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 229,\n columnNumber: 15\n }, this), !isPatient && /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => navigate(`/medical-records/${patient.patientId}`),\n className: \"bg-purple-600 text-white px-4 py-2 rounded hover:bg-purple-700\",\n children: \"Add Medical Data\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 228,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-4 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: 241,\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: 242,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 240,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: \"Email\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 245,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: patient.emailAddress\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 246,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 244,\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: 249,\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: 250,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 248,\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: 253,\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: 254,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 252,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 239,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 227,\n columnNumber: 11\n }, this), medicalData && /*#__PURE__*/_jsxDEV(_Fragment, {\n children: [medicalData.diagnoses && medicalData.diagnoses.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Diagnoses\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 265,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: medicalData.diagnoses.map(diagnosis => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-purple-500 pl-4 py-2\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold text-lg\",\n children: diagnosis.name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 25\n }, this), diagnosis.description && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: diagnosis.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 27\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"By: \", diagnosis.doctorName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 25\n }, this)]\n }, diagnosis.diagnosisId, true, {\n fileName: _jsxFileName,\n lineNumber: 268,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 266,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 264,\n columnNumber: 17\n }, this), medicalData.symptoms && medicalData.symptoms.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Symptoms\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 283,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: medicalData.symptoms.map(symptom => /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"bg-yellow-100 text-yellow-800 px-3 py-1 rounded-full text-sm\",\n children: symptom.symptomName\n }, symptom.symptomId, false, {\n fileName: _jsxFileName,\n lineNumber: 286,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 284,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 282,\n columnNumber: 17\n }, this), medicalData.allergies && medicalData.allergies.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Allergies\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 297,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: medicalData.allergies.map(allergy => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-red-500 pl-4 py-2\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: allergy.allergyName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 301,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n className: `px-2 py-1 rounded text-white text-xs ${allergy.severity === 'CRITICAL' ? 'bg-red-600' : allergy.severity === 'HIGH' ? 'bg-red-500' : allergy.severity === 'MEDIUM' ? 'bg-yellow-500' : 'bg-green-500'}`,\n children: [allergy.severity, \" Severity\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 303,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 302,\n columnNumber: 25\n }, this), allergy.reaction && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: [\"Reaction: \", allergy.reaction]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 313,\n columnNumber: 27\n }, this)]\n }, allergy.allergyId, true, {\n fileName: _jsxFileName,\n lineNumber: 300,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 298,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 296,\n columnNumber: 17\n }, this), medicalData.reports && medicalData.reports.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Medical Reports\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 324,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: medicalData.reports.map(report => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-green-500 pl-4 py-2\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: [\"Report from \", report.doctorName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: report.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 329,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"Date: \", report.reportDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 330,\n columnNumber: 25\n }, this)]\n }, report.reportId, true, {\n fileName: _jsxFileName,\n lineNumber: 327,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 325,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 323,\n columnNumber: 17\n }, this), labResults && labResults.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Lab Test Results\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 340,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: labResults.map(result => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-purple-500 pl-4 py-2\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: result.testName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 344,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: result.result\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 345,\n columnNumber: 25\n }, this), result.notes && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: [\"Notes: \", result.notes]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 347,\n columnNumber: 27\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"Date: \", result.resultDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 25\n }, this), result.technicianName && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"Technician: \", result.technicianName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 351,\n columnNumber: 27\n }, this)]\n }, result.labResultId, true, {\n fileName: _jsxFileName,\n lineNumber: 343,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 341,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 339,\n columnNumber: 17\n }, this), procedureResults && procedureResults.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-xl font-bold mb-4\",\n children: \"Procedure Results\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 362,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: procedureResults.map(result => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-orange-500 pl-4 py-2\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: result.procedureName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 366,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: result.result\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 367,\n columnNumber: 25\n }, this), result.notes && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-600 text-sm\",\n children: [\"Notes: \", result.notes]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 369,\n columnNumber: 27\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"Date: \", result.resultDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 371,\n columnNumber: 25\n }, this), result.doctorName && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\"Doctor: \", result.doctorName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 373,\n columnNumber: 27\n }, this)]\n }, result.procedureResultId, true, {\n fileName: _jsxFileName,\n lineNumber: 365,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 363,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 361,\n columnNumber: 17\n }, this), (!medicalData.diagnoses || medicalData.diagnoses.length === 0) && (!medicalData.symptoms || medicalData.symptoms.length === 0) && (!medicalData.allergies || medicalData.allergies.length === 0) && (!medicalData.reports || medicalData.reports.length === 0) && (!labResults || labResults.length === 0) && (!procedureResults || procedureResults.length === 0) && /*#__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 medical records found for this patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 389,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 388,\n columnNumber: 17\n }, this)]\n }, void 0, true)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 225,\n columnNumber: 9\n }, this), !searched && !isPatient && /*#__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 their medical records\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 400,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 399,\n columnNumber: 9\n }, this), isPatient && loading && /*#__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: \"Loading your medical records...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 407,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 406,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 170,\n columnNumber: 5\n }, this);\n}\n_s(MedicalRecordList, \"Zc+r0bbTEmWHF/cAnjFx3Ogu6ro=\", false, function () {\n return [useNavigate, useSearchParams];\n});\n_c = MedicalRecordList;\nexport default MedicalRecordList;\nvar _c;\n$RefreshReg$(_c, \"MedicalRecordList\");","map":{"version":3,"names":["React","useState","useNavigate","useSearchParams","patientService","medicalRecordService","labService","procedureService","ErrorAlert","jsxDEV","_jsxDEV","Fragment","_Fragment","MedicalRecordList","_s","navigate","searchParams","patientId","get","user","JSON","parse","localStorage","getItem","isPatient","role","patient","setPatient","medicalData","setMedicalData","labResults","setLabResults","procedureResults","setProcedureResults","error","setError","embg","setEmbg","username","searched","setSearched","loading","setLoading","useEffect","loadPatientRecords","pId","patientResponse","getPatientById","data","recordsResponse","getMedicalRecordByPatientId","labRes","getLabResultsForMedicalRecord","recordId","err","procRes","getProcedureResultsForMedicalRecord","handleAutoSearch","searchEmbg","getPatientByEmbg","handleSearch","e","preventDefault","trim","children","className","style","color","fileName","_jsxFileName","lineNumber","columnNumber","message","onClose","onSubmit","type","value","onChange","target","placeholder","disabled","firstName","lastName","onClick","emailAddress","bloodType","dateOfBirth","diagnoses","length","map","diagnosis","name","description","doctorName","diagnosisId","symptoms","symptom","symptomName","symptomId","allergies","allergy","allergyName","severity","reaction","allergyId","reports","report","reportDate","reportId","result","testName","notes","resultDate","technicianName","labResultId","procedureName","procedureResultId","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/medical-records/MedicalRecordList.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { patientService } from '../../services/patientService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport { labService } from '../../services/labService';\nimport { procedureService } from '../../services/procedureService';\nimport ErrorAlert from '../../components/ErrorAlert';\n\nfunction MedicalRecordList() {\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const patientId = searchParams.get('patientId');\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isPatient = user.role === 'PATIENT';\n\n const [patient, setPatient] = useState(null);\n const [medicalData, setMedicalData] = useState(null);\n const [labResults, setLabResults] = useState([]);\n const [procedureResults, setProcedureResults] = useState([]);\n const [error, setError] = useState(null);\n const [embg, setEmbg] = useState(isPatient ? user.username : '');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n\n // Auto-load patient's own records if logged in as patient, or load specific patient records if patientId is provided\n React.useEffect(() => {\n const loadPatientRecords = async (pId) => {\n setError(null);\n setLoading(true);\n\n try {\n // Get patient by ID\n const patientResponse = await patientService.getPatientById(pId);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(pId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n\n setSearched(true);\n } catch (err) {\n setError(`Failed to load medical records for patient`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n\n const handleAutoSearch = async () => {\n const searchEmbg = user.username;\n setError(null);\n setLoading(true);\n\n try {\n // Search patient by EMBG\n const patientResponse = await patientService.getPatientByEmbg(searchEmbg);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n\n setSearched(true);\n } catch (err) {\n setError(`Patient with EMBG ${searchEmbg} not found`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n\n // Call appropriate function based on conditions\n if (patientId) {\n loadPatientRecords(patientId);\n } else if (isPatient && user.username) {\n handleAutoSearch();\n }\n }, [patientId, isPatient, user.username]);\n\n const handleSearch = async (e) => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n\n try {\n if (!embg.trim()) {\n setError('Please enter an EMBG');\n setLoading(false);\n return;\n }\n\n // Search patient by EMBG\n const patientResponse = await patientService.getPatientByEmbg(embg);\n setPatient(patientResponse.data);\n\n // Get medical records for this patient\n const recordsResponse = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n setMedicalData(recordsResponse.data);\n\n // Get lab results\n try {\n const labRes = await labService.getLabResultsForMedicalRecord(recordsResponse.data.recordId);\n setLabResults(labRes.data || []);\n } catch (err) {\n setLabResults([]);\n }\n\n // Get procedure results\n try {\n const procRes = await procedureService.getProcedureResultsForMedicalRecord(recordsResponse.data.recordId);\n setProcedureResults(procRes.data || []);\n } catch (err) {\n setProcedureResults([]);\n }\n\n setSearched(true);\n } catch (err) {\n setError(`Patient with EMBG ${embg} not found`);\n setSearched(true);\n setPatient(null);\n setMedicalData(null);\n setLabResults([]);\n setProcedureResults([]);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n Loading your medical records...\n
\n\n Viewing your medical records\n
\nEMBG
\n{patient.embg}
\n{patient.emailAddress}
\nBlood Type
\n{patient.bloodType || 'N/A'}
\nDate of Birth
\n{patient.dateOfBirth}
\n{diagnosis.name}
\n {diagnosis.description && (\n{diagnosis.description}
\n )}\nBy: {diagnosis.doctorName}
\n{allergy.allergyName}
\n\n \n {allergy.severity} Severity\n \n
\n {allergy.reaction && (\nReaction: {allergy.reaction}
\n )}\nReport from {report.doctorName}
\n{report.description}
\nDate: {report.reportDate}
\n{result.testName}
\n{result.result}
\n {result.notes && (\nNotes: {result.notes}
\n )}\nDate: {result.resultDate}
\n {result.technicianName && (\nTechnician: {result.technicianName}
\n )}\n{result.procedureName}
\n{result.result}
\n {result.notes && (\nNotes: {result.notes}
\n )}\nDate: {result.resultDate}
\n {result.doctorName && (\nDoctor: {result.doctorName}
\n )}\nNo medical records found for this patient
\nEnter a patient EMBG to view their medical records
\nLoading your medical records...
\n