{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\medical-reports\\\\MedicalReportList.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { medicalReportService } from '../../services/medicalReportService';\nimport { patientService } from '../../services/patientService';\nimport { doctorService } from '../../services/doctorService';\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 MedicalReportList() {\n _s();\n const [reports, setReports] = useState([]);\n const [doctors, setDoctors] = useState([]);\n const [selectedReport, setSelectedReport] = useState(null);\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [searchEmbg, setSearchEmbg] = useState('');\n const [searchedPatient, setSearchedPatient] = useState(null);\n const [showCreateForm, setShowCreateForm] = useState(false);\n const [loading, setLoading] = useState(false);\n const [selectedDiagnosisIds, setSelectedDiagnosisIds] = useState(new Set());\n const [selectedPrescriptionIds, setSelectedPrescriptionIds] = useState(new Set());\n const [selectedAllergyIds, setSelectedAllergyIds] = useState(new Set());\n const [selectedSymptomIds, setSelectedSymptomIds] = useState(new Set());\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isDoctor = user.role === 'DOCTOR';\n const [formData, setFormData] = useState({\n doctorId: isDoctor ? user.doctorId : '',\n description: '',\n reportDate: new Date().toISOString().split('T')[0]\n });\n useEffect(() => {\n if (!isDoctor) {\n loadDoctors();\n }\n }, [isDoctor]);\n const loadDoctors = async () => {\n try {\n const res = await doctorService.getAllDoctors();\n setDoctors(res.data);\n } catch (err) {\n console.error('Error loading doctors:', err);\n }\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 a patient EMBG');\n setLoading(false);\n return;\n }\n const patientRes = await patientService.getPatientByEmbg(searchEmbg);\n setSearchedPatient(patientRes.data);\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);\n const medicalRecordId = medicalRecordRes.data.recordId;\n const reportsRes = await medicalReportService.getReportsForMedicalRecord(medicalRecordId);\n setReports(Array.isArray(reportsRes.data) ? reportsRes.data : [reportsRes.data]);\n setSelectedReport(null);\n setSelectedDiagnosisIds(new Set());\n setSelectedPrescriptionIds(new Set());\n setSelectedAllergyIds(new Set());\n setSelectedSymptomIds(new Set());\n } catch (err) {\n setError('Patient not found or no reports available');\n setReports([]);\n setSearchedPatient(null);\n } finally {\n setLoading(false);\n }\n };\n const handleCreateReport = async e => {\n e.preventDefault();\n setError(null);\n try {\n if (!formData.doctorId || !formData.description || !formData.reportDate) {\n setError('Please fill in all required fields');\n return;\n }\n if (!searchedPatient) {\n setError('Please search for a patient first');\n return;\n }\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(searchedPatient.patientId);\n const reportData = {\n doctorId: parseInt(formData.doctorId),\n medicalRecordId: medicalRecordRes.data.recordId,\n description: formData.description,\n reportDate: formData.reportDate,\n selectedDiagnosisIds: Array.from(selectedDiagnosisIds),\n selectedPrescriptionIds: Array.from(selectedPrescriptionIds),\n selectedAllergyIds: Array.from(selectedAllergyIds),\n selectedSymptomIds: Array.from(selectedSymptomIds)\n };\n const newReport = await medicalReportService.createReport(reportData);\n setSuccess('Medical report created successfully!');\n setReports([...reports, newReport.data]);\n setFormData({\n doctorId: '',\n description: '',\n reportDate: new Date().toISOString().split('T')[0]\n });\n setShowCreateForm(false);\n setSelectedReport(newReport.data);\n } catch (err) {\n var _err$response, _err$response$data;\n setError(((_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) || 'Failed to create medical report');\n }\n };\n const handleFormChange = e => {\n const {\n name,\n value\n } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\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 Reports\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 137,\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: 139,\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: 140,\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 by EMBG\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 144,\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: 146,\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-full hover:bg-purple-700 disabled:bg-gray-400\",\n children: loading ? 'Searching...' : 'Search'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 153,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 145,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 143,\n columnNumber: 7\n }, this), searchedPatient && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setShowCreateForm(!showCreateForm),\n className: \"bg-green-600 text-white px-6 py-2 rounded hover:bg-green-700\",\n children: showCreateForm ? 'Cancel' : 'Create New Report'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 9\n }, this), showCreateForm && searchedPatient && /*#__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: \"Create Medical Report\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 178,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mb-4 text-gray-600\",\n children: [\"Patient: \", searchedPatient.firstName, \" \", searchedPatient.lastName, \" (\", searchedPatient.embg, \")\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleCreateReport,\n className: \"space-y-4\",\n children: [isDoctor ? /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"px-4 py-2 bg-gray-100 rounded-lg text-gray-700\",\n children: [\"Dr. \", user.firstName, \" \", user.lastName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 186,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 15\n }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Doctor *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 192,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"doctorId\",\n value: formData.doctorId,\n onChange: handleFormChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true,\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"\",\n children: \"Select doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 200,\n columnNumber: 19\n }, this), doctors.map(doctor => /*#__PURE__*/_jsxDEV(\"option\", {\n value: doctor.doctorId,\n children: [\"Dr. \", doctor.firstName, \" \", doctor.lastName]\n }, doctor.doctorId, true, {\n fileName: _jsxFileName,\n lineNumber: 202,\n columnNumber: 21\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Report Date *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 211,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n name: \"reportDate\",\n value: formData.reportDate,\n onChange: handleFormChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 210,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Report Description *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 223,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"textarea\", {\n name: \"description\",\n value: formData.description,\n onChange: handleFormChange,\n placeholder: \"Describe the patient's visit, findings, and recommendations...\",\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: 224,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 222,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n className: \"bg-purple-600 text-white px-6 py-2 rounded hover:bg-purple-700\",\n children: \"Create Report\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 235,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 177,\n columnNumber: 9\n }, this), reports.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-4\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold\",\n children: [\"Reports for \", searchedPatient === null || searchedPatient === void 0 ? void 0 : searchedPatient.firstName, \" \", searchedPatient === null || searchedPatient === void 0 ? void 0 : searchedPatient.lastName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 248,\n columnNumber: 11\n }, this), reports.map(report => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow p-6 cursor-pointer hover:shadow-lg transition\",\n onClick: () => setSelectedReport((selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.reportId) === report.reportId ? null : report),\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex justify-between items-start\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Date: \", report.reportDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 257,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Doctor: \", report.doctorName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 258,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-2 line-clamp-2\",\n children: report.reportDescription\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 259,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 256,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"text-purple-600 hover:text-purple-800 text-sm font-normal\",\n children: [(selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.reportId) === report.reportId ? 'Hide' : 'View', \" Details\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 261,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 255,\n columnNumber: 15\n }, this), (selectedReport === null || selectedReport === void 0 ? void 0 : selectedReport.reportId) === report.reportId && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-6 pt-6 border-t space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"font-bold mb-2\",\n children: \"Report Description\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 272,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-gray-700 whitespace-pre-wrap\",\n children: report.reportDescription\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 19\n }, this), report.diagnoses && report.diagnoses.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"font-bold mb-2\",\n children: \"Diagnoses\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 279,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"space-y-2\",\n children: report.diagnoses.map((diagnosis, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"bg-blue-50 p-3 rounded\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: diagnosis.name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 283,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: diagnosis.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 284,\n columnNumber: 29\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: 285,\n columnNumber: 29\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 282,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 280,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 278,\n columnNumber: 21\n }, this), report.prescriptions && report.prescriptions.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"font-bold mb-2\",\n children: \"Prescriptions\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 295,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"space-y-2\",\n children: report.prescriptions.map((prescription, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"bg-green-50 p-3 rounded\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: prescription.medicationName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 299,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [prescription.dosage, \" - \", prescription.frequency, \" for \", prescription.duration]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 300,\n columnNumber: 29\n }, this), prescription.notes && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Notes: \", prescription.notes]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 31\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 298,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 296,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 294,\n columnNumber: 21\n }, this), report.allergies && report.allergies.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"font-bold mb-2\",\n children: \"Allergies\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 315,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"space-y-2\",\n children: report.allergies.map((allergy, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"bg-red-50 p-3 rounded\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: allergy.allergyName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 319,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Reaction: \", allergy.reaction]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 320,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-red-600\",\n children: [\"Severity: \", allergy.severity]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 321,\n columnNumber: 29\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 318,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 316,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 314,\n columnNumber: 21\n }, this), report.symptoms && report.symptoms.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"font-bold mb-2\",\n children: \"Symptoms\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"space-y-2\",\n children: report.symptoms.map((symptom, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"bg-yellow-50 p-3 rounded\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold\",\n children: symptom.symptomName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 335,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: symptom.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 336,\n columnNumber: 29\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 330,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 17\n }, this)]\n }, report.reportId, true, {\n fileName: _jsxFileName,\n lineNumber: 250,\n columnNumber: 13\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 247,\n columnNumber: 9\n }, this), searchedPatient && reports.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 reports found for this patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 352,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 351,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 136,\n columnNumber: 5\n }, this);\n}\n_s(MedicalReportList, \"7VggmTTBYyd448Y6bZmVuze/5a8=\");\n_c = MedicalReportList;\nexport default MedicalReportList;\nvar _c;\n$RefreshReg$(_c, \"MedicalReportList\");","map":{"version":3,"names":["React","useState","useEffect","medicalReportService","patientService","doctorService","medicalRecordService","ErrorAlert","SuccessAlert","jsxDEV","_jsxDEV","MedicalReportList","_s","reports","setReports","doctors","setDoctors","selectedReport","setSelectedReport","error","setError","success","setSuccess","searchEmbg","setSearchEmbg","searchedPatient","setSearchedPatient","showCreateForm","setShowCreateForm","loading","setLoading","selectedDiagnosisIds","setSelectedDiagnosisIds","Set","selectedPrescriptionIds","setSelectedPrescriptionIds","selectedAllergyIds","setSelectedAllergyIds","selectedSymptomIds","setSelectedSymptomIds","user","JSON","parse","localStorage","getItem","isDoctor","role","formData","setFormData","doctorId","description","reportDate","Date","toISOString","split","loadDoctors","res","getAllDoctors","data","err","console","handleSearch","e","preventDefault","trim","patientRes","getPatientByEmbg","medicalRecordRes","getMedicalRecordByPatientId","patientId","medicalRecordId","recordId","reportsRes","getReportsForMedicalRecord","Array","isArray","handleCreateReport","reportData","parseInt","from","newReport","createReport","_err$response","_err$response$data","response","handleFormChange","name","value","target","prev","children","className","style","color","fileName","_jsxFileName","lineNumber","columnNumber","message","onClose","onSubmit","type","onChange","placeholder","disabled","onClick","firstName","lastName","embg","required","map","doctor","rows","length","report","reportId","doctorName","reportDescription","diagnoses","diagnosis","idx","prescriptions","prescription","medicationName","dosage","frequency","duration","notes","allergies","allergy","allergyName","reaction","severity","symptoms","symptom","symptomName","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/medical-reports/MedicalReportList.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { medicalReportService } from '../../services/medicalReportService';\nimport { patientService } from '../../services/patientService';\nimport { doctorService } from '../../services/doctorService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport SuccessAlert from '../../components/SuccessAlert';\n\nfunction MedicalReportList() {\n const [reports, setReports] = useState([]);\n const [doctors, setDoctors] = useState([]);\n const [selectedReport, setSelectedReport] = useState(null);\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [searchEmbg, setSearchEmbg] = useState('');\n const [searchedPatient, setSearchedPatient] = useState(null);\n const [showCreateForm, setShowCreateForm] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const [selectedDiagnosisIds, setSelectedDiagnosisIds] = useState(new Set());\n const [selectedPrescriptionIds, setSelectedPrescriptionIds] = useState(new Set());\n const [selectedAllergyIds, setSelectedAllergyIds] = useState(new Set());\n const [selectedSymptomIds, setSelectedSymptomIds] = useState(new Set());\n\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isDoctor = user.role === 'DOCTOR';\n\n const [formData, setFormData] = useState({\n doctorId: isDoctor ? user.doctorId : '',\n description: '',\n reportDate: new Date().toISOString().split('T')[0],\n });\n\n useEffect(() => {\n if (!isDoctor) {\n loadDoctors();\n }\n }, [isDoctor]);\n\n const loadDoctors = async () => {\n try {\n const res = await doctorService.getAllDoctors();\n setDoctors(res.data);\n } catch (err) {\n console.error('Error loading doctors:', err);\n }\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 a patient EMBG');\n setLoading(false);\n return;\n }\n\n const patientRes = await patientService.getPatientByEmbg(searchEmbg);\n setSearchedPatient(patientRes.data);\n\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);\n const medicalRecordId = medicalRecordRes.data.recordId;\n\n const reportsRes = await medicalReportService.getReportsForMedicalRecord(medicalRecordId);\n setReports(Array.isArray(reportsRes.data) ? reportsRes.data : [reportsRes.data]);\n\n setSelectedReport(null);\n setSelectedDiagnosisIds(new Set());\n setSelectedPrescriptionIds(new Set());\n setSelectedAllergyIds(new Set());\n setSelectedSymptomIds(new Set());\n } catch (err) {\n setError('Patient not found or no reports available');\n setReports([]);\n setSearchedPatient(null);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCreateReport = async (e) => {\n e.preventDefault();\n setError(null);\n\n try {\n if (!formData.doctorId || !formData.description || !formData.reportDate) {\n setError('Please fill in all required fields');\n return;\n }\n\n if (!searchedPatient) {\n setError('Please search for a patient first');\n return;\n }\n\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(searchedPatient.patientId);\n\n const reportData = {\n doctorId: parseInt(formData.doctorId),\n medicalRecordId: medicalRecordRes.data.recordId,\n description: formData.description,\n reportDate: formData.reportDate,\n selectedDiagnosisIds: Array.from(selectedDiagnosisIds),\n selectedPrescriptionIds: Array.from(selectedPrescriptionIds),\n selectedAllergyIds: Array.from(selectedAllergyIds),\n selectedSymptomIds: Array.from(selectedSymptomIds),\n };\n\n const newReport = await medicalReportService.createReport(reportData);\n setSuccess('Medical report created successfully!');\n setReports([...reports, newReport.data]);\n setFormData({\n doctorId: '',\n description: '',\n reportDate: new Date().toISOString().split('T')[0],\n });\n setShowCreateForm(false);\n setSelectedReport(newReport.data);\n } catch (err) {\n setError(err.response?.data?.error || 'Failed to create medical report');\n }\n };\n\n const handleFormChange = (e) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n return (\n
\n Patient: {searchedPatient.firstName} {searchedPatient.lastName} ({searchedPatient.embg})\n
\n \nDate: {report.reportDate}
\nDoctor: {report.doctorName}
\n{report.reportDescription}
\n{report.reportDescription}
\n{diagnosis.name}
\n{diagnosis.description}
\nBy: {diagnosis.doctorName}
\n{prescription.medicationName}
\n\n {prescription.dosage} - {prescription.frequency} for {prescription.duration}\n
\n {prescription.notes && (\nNotes: {prescription.notes}
\n )}\n{allergy.allergyName}
\nReaction: {allergy.reaction}
\nSeverity: {allergy.severity}
\n{symptom.symptomName}
\n{symptom.description}
\nNo medical reports found for this patient
\n