{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\procedures\\\\ProcedureList.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { patientService } from '../../services/patientService';\nimport { procedureService } from '../../services/procedureService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction ProcedureList() {\n _s();\n const [user, setUser] = useState({});\n const [patient, setPatient] = useState(null);\n const [embg, setEmbg] = useState('');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [availableProcedures, setAvailableProcedures] = useState([]);\n const [performedProcedures, setPerformedProcedures] = useState([]);\n const [procedureResults, setProcedureResults] = useState([]);\n const [showRequestForm, setShowRequestForm] = useState(false);\n const [requestData, setRequestData] = useState({\n procedureId: '',\n procedureDate: new Date().toISOString().split('T')[0],\n notes: ''\n });\n\n // Load user from localStorage and listen for changes\n useEffect(() => {\n const loadUser = () => {\n const userStr = localStorage.getItem('user');\n console.log('[ProcedureList] Loading user from localStorage:', userStr);\n if (userStr) {\n try {\n const parsedUser = JSON.parse(userStr);\n console.log('[ProcedureList] Parsed user:', parsedUser);\n setUser(parsedUser);\n } catch (err) {\n console.error('Failed to parse user:', err);\n setUser({});\n }\n } else {\n console.log('[ProcedureList] No user in localStorage');\n setUser({});\n }\n };\n console.log('[ProcedureList] useEffect running - loading user');\n loadUser();\n\n // Listen for storage changes (other tabs/windows)\n window.addEventListener('storage', loadUser);\n\n // Listen for custom event (same tab changes)\n window.addEventListener('userStorageChange', loadUser);\n return () => {\n window.removeEventListener('storage', loadUser);\n window.removeEventListener('userStorageChange', loadUser);\n };\n }, []);\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 const patientResponse = await patientService.getPatientByEmbg(embg);\n setPatient(patientResponse.data);\n setSearched(true);\n\n // Fetch medical record for patient\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n\n // Fetch available procedures from database\n try {\n const proceduresResponse = await procedureService.getAllProcedures();\n console.log('Procedures response:', proceduresResponse);\n console.log('Procedures data:', proceduresResponse.data);\n setAvailableProcedures(Array.isArray(proceduresResponse.data) ? proceduresResponse.data : []);\n } catch (procErr) {\n console.error('Failed to fetch procedures:', procErr);\n setError('Failed to fetch procedures: ' + procErr.message);\n setAvailableProcedures([]);\n }\n\n // Fetch performed procedures for patient\n try {\n const performedRes = await procedureService.getPerformedProceduresForPatient(patientResponse.data.patientId);\n setPerformedProcedures(Array.isArray(performedRes.data) ? performedRes.data : []);\n } catch (err) {\n console.error('Failed to fetch performed procedures:', err);\n setPerformedProcedures([]);\n }\n\n // Fetch procedure results for medical record\n try {\n const resultsResponse = await procedureService.getProcedureResultsForMedicalRecord(medicalRecordRes.data.recordId);\n setProcedureResults(Array.isArray(resultsResponse.data) ? resultsResponse.data : []);\n } catch (err) {\n console.error('Failed to fetch procedure results:', err);\n setProcedureResults([]);\n }\n } catch (err) {\n var _err$response, _err$response$data;\n console.error('Search error:', err);\n setError(`Error: ${((_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 || 'Patient not found'}`);\n setPatient(null);\n } finally {\n setLoading(false);\n }\n };\n const handleRequestProcedure = async e => {\n e.preventDefault();\n setError(null);\n if (!requestData.procedureId) {\n setError('Please select a procedure');\n return;\n }\n if (!patient) {\n setError('Patient not found');\n return;\n }\n try {\n setLoading(true);\n\n // Get doctor ID from logged-in user\n const doctorId = user.doctorId;\n const request = {\n procedureId: parseInt(requestData.procedureId),\n doctorId: parseInt(doctorId),\n patientId: patient.patientId,\n procedureDate: requestData.procedureDate,\n notes: requestData.notes\n };\n console.log('User object:', user);\n console.log('Sending procedure request with doctorId:', doctorId, 'Full request:', request);\n await procedureService.recordProcedure(request);\n\n // Refresh the performed procedures\n const performedRes = await procedureService.getPerformedProceduresForPatient(patient.patientId);\n setPerformedProcedures(performedRes.data);\n\n // Reset form\n setRequestData({\n procedureId: '',\n procedureDate: new Date().toISOString().split('T')[0],\n notes: ''\n });\n setShowRequestForm(false);\n setError(null);\n } catch (err) {\n var _err$response2, _err$response2$data;\n console.error('Error details:', err);\n console.error('Response:', err.response);\n const errorMsg = ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.error) || err.message || 'Unknown error';\n setError('Failed to request procedure: ' + errorMsg);\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: \"Procedures\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 174,\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: 176,\n columnNumber: 17\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: 180,\n columnNumber: 9\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: 184,\n columnNumber: 15\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: 185,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 13\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: 194,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 181,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 7\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: 212,\n columnNumber: 15\n }, this), !showRequestForm && /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setShowRequestForm(true),\n className: \"bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700\",\n children: \"Request Procedure\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 214,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 211,\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: 224,\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: 225,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 223,\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: 228,\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: 229,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 227,\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: 232,\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: 233,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 222,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 210,\n columnNumber: 11\n }, this), showRequestForm && /*#__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: \"Request Procedure\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 241,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleRequestProcedure,\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: \"Procedure\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 245,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n value: requestData.procedureId,\n onChange: e => setRequestData({\n ...requestData,\n procedureId: e.target.value\n }),\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true,\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"\",\n children: \"Select a procedure\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 252,\n columnNumber: 23\n }, this), availableProcedures.map(proc => /*#__PURE__*/_jsxDEV(\"option\", {\n value: proc.procedureId,\n children: proc.procedureType\n }, proc.procedureId, false, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 25\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 246,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 244,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Procedure Date\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 261,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n value: requestData.procedureDate,\n onChange: e => setRequestData({\n ...requestData,\n procedureDate: e.target.value\n }),\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 262,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 260,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 243,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Notes\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"textarea\", {\n value: requestData.notes,\n onChange: e => setRequestData({\n ...requestData,\n notes: e.target.value\n }),\n placeholder: \"Additional notes for the procedure\",\n className: \"w-full px-4 py-2 border rounded-lg\",\n rows: \"3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 272,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 270,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: loading,\n className: \"bg-green-600 text-white px-6 py-2 rounded hover:bg-green-700 disabled:bg-gray-400\",\n children: loading ? 'Requesting...' : 'Request Procedure'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 281,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"button\",\n onClick: () => setShowRequestForm(false),\n className: \"bg-gray-400 text-white px-6 py-2 rounded hover:bg-gray-500\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 288,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 280,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 240,\n columnNumber: 13\n }, this), performedProcedures && performedProcedures.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: \"Performed Procedures\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 303,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: performedProcedures.map(proc => {\n var _proc$procedure, _proc$doctor, _proc$doctor2;\n return /*#__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: ((_proc$procedure = proc.procedure) === null || _proc$procedure === void 0 ? void 0 : _proc$procedure.procedureType) || 'Procedure'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Requested by: \", (_proc$doctor = proc.doctor) === null || _proc$doctor === void 0 ? void 0 : _proc$doctor.firstName, \" \", (_proc$doctor2 = proc.doctor) === null || _proc$doctor2 === void 0 ? void 0 : _proc$doctor2.lastName]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 308,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Procedure Date: \", proc.procedureDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 309,\n columnNumber: 21\n }, this), proc.notes && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Notes: \", proc.notes]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 311,\n columnNumber: 23\n }, this)]\n }, proc.performedId, true, {\n fileName: _jsxFileName,\n lineNumber: 306,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 302,\n columnNumber: 13\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: 322,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-4\",\n children: procedureResults.map(result => {\n var _result$procedure;\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-l-4 border-orange-500 pl-4 py-3 bg-orange-50 rounded\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"font-semibold text-lg text-orange-700\",\n children: ((_result$procedure = result.procedure) === null || _result$procedure === void 0 ? void 0 : _result$procedure.procedureType) || 'Procedure'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 326,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-700 mt-2\",\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Outcome:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 327,\n columnNumber: 63\n }, this), \" \", result.resultDescription]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 327,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-600\",\n children: [\"Result Date: \", result.resultDate]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 21\n }, this)]\n }, result.resultId, true, {\n fileName: _jsxFileName,\n lineNumber: 325,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 323,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 321,\n columnNumber: 13\n }, this), performedProcedures && performedProcedures.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-yellow-50 rounded-lg p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-semibold text-yellow-800 mb-3\",\n children: \"Submit Procedure Results\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 338,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-gray-700 mb-4\",\n children: [performedProcedures.length, \" procedure\", performedProcedures.length !== 1 ? 's' : '', \" awaiting results\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 339,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"a\", {\n href: \"/procedures/results\",\n className: \"inline-block bg-yellow-600 text-white px-6 py-2 rounded hover:bg-yellow-700\",\n children: \"Submit Procedure Results\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 342,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 337,\n columnNumber: 13\n }, this), (!performedProcedures || performedProcedures.length === 0) && !(procedureResults !== null && procedureResults !== void 0 && procedureResults.length) && /*#__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 procedures for this patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 354,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 353,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 9\n }, this), !searched && /*#__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 request procedures\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 363,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 362,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 173,\n columnNumber: 5\n }, this);\n}\n_s(ProcedureList, \"QJrz2ybN8yJN3dimyG6S12EHFpU=\");\n_c = ProcedureList;\nexport default ProcedureList;\nvar _c;\n$RefreshReg$(_c, \"ProcedureList\");","map":{"version":3,"names":["React","useState","useEffect","patientService","procedureService","medicalRecordService","ErrorAlert","jsxDEV","_jsxDEV","ProcedureList","_s","user","setUser","patient","setPatient","embg","setEmbg","searched","setSearched","loading","setLoading","error","setError","availableProcedures","setAvailableProcedures","performedProcedures","setPerformedProcedures","procedureResults","setProcedureResults","showRequestForm","setShowRequestForm","requestData","setRequestData","procedureId","procedureDate","Date","toISOString","split","notes","loadUser","userStr","localStorage","getItem","console","log","parsedUser","JSON","parse","err","window","addEventListener","removeEventListener","handleSearch","e","preventDefault","trim","patientResponse","getPatientByEmbg","data","medicalRecordRes","getMedicalRecordByPatientId","patientId","proceduresResponse","getAllProcedures","Array","isArray","procErr","message","performedRes","getPerformedProceduresForPatient","resultsResponse","getProcedureResultsForMedicalRecord","recordId","_err$response","_err$response$data","response","handleRequestProcedure","doctorId","request","parseInt","recordProcedure","_err$response2","_err$response2$data","errorMsg","children","className","style","color","fileName","_jsxFileName","lineNumber","columnNumber","onClose","onSubmit","type","value","onChange","target","placeholder","disabled","firstName","lastName","onClick","bloodType","dateOfBirth","required","map","proc","procedureType","rows","length","_proc$procedure","_proc$doctor","_proc$doctor2","procedure","doctor","performedId","result","_result$procedure","resultDescription","resultDate","resultId","href","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/procedures/ProcedureList.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { patientService } from '../../services/patientService';\nimport { procedureService } from '../../services/procedureService';\nimport { medicalRecordService } from '../../services/medicalRecordService';\nimport ErrorAlert from '../../components/ErrorAlert';\n\nfunction ProcedureList() {\n const [user, setUser] = useState({});\n const [patient, setPatient] = useState(null);\n const [embg, setEmbg] = useState('');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const [availableProcedures, setAvailableProcedures] = useState([]);\n const [performedProcedures, setPerformedProcedures] = useState([]);\n const [procedureResults, setProcedureResults] = useState([]);\n\n const [showRequestForm, setShowRequestForm] = useState(false);\n const [requestData, setRequestData] = useState({\n procedureId: '',\n procedureDate: new Date().toISOString().split('T')[0],\n notes: '',\n });\n\n // Load user from localStorage and listen for changes\n useEffect(() => {\n const loadUser = () => {\n const userStr = localStorage.getItem('user');\n console.log('[ProcedureList] Loading user from localStorage:', userStr);\n if (userStr) {\n try {\n const parsedUser = JSON.parse(userStr);\n console.log('[ProcedureList] Parsed user:', parsedUser);\n setUser(parsedUser);\n } catch (err) {\n console.error('Failed to parse user:', err);\n setUser({});\n }\n } else {\n console.log('[ProcedureList] No user in localStorage');\n setUser({});\n }\n };\n\n console.log('[ProcedureList] useEffect running - loading user');\n loadUser();\n\n // Listen for storage changes (other tabs/windows)\n window.addEventListener('storage', loadUser);\n\n // Listen for custom event (same tab changes)\n window.addEventListener('userStorageChange', loadUser);\n\n return () => {\n window.removeEventListener('storage', loadUser);\n window.removeEventListener('userStorageChange', loadUser);\n };\n }, []);\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 const patientResponse = await patientService.getPatientByEmbg(embg);\n setPatient(patientResponse.data);\n setSearched(true);\n\n // Fetch medical record for patient\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);\n\n // Fetch available procedures from database\n try {\n const proceduresResponse = await procedureService.getAllProcedures();\n console.log('Procedures response:', proceduresResponse);\n console.log('Procedures data:', proceduresResponse.data);\n setAvailableProcedures(Array.isArray(proceduresResponse.data) ? proceduresResponse.data : []);\n } catch (procErr) {\n console.error('Failed to fetch procedures:', procErr);\n setError('Failed to fetch procedures: ' + procErr.message);\n setAvailableProcedures([]);\n }\n\n // Fetch performed procedures for patient\n try {\n const performedRes = await procedureService.getPerformedProceduresForPatient(patientResponse.data.patientId);\n setPerformedProcedures(Array.isArray(performedRes.data) ? performedRes.data : []);\n } catch (err) {\n console.error('Failed to fetch performed procedures:', err);\n setPerformedProcedures([]);\n }\n\n // Fetch procedure results for medical record\n try {\n const resultsResponse = await procedureService.getProcedureResultsForMedicalRecord(medicalRecordRes.data.recordId);\n setProcedureResults(Array.isArray(resultsResponse.data) ? resultsResponse.data : []);\n } catch (err) {\n console.error('Failed to fetch procedure results:', err);\n setProcedureResults([]);\n }\n } catch (err) {\n console.error('Search error:', err);\n setError(`Error: ${err.response?.data?.error || err.message || 'Patient not found'}`);\n setPatient(null);\n } finally {\n setLoading(false);\n }\n };\n\n const handleRequestProcedure = async (e) => {\n e.preventDefault();\n setError(null);\n\n if (!requestData.procedureId) {\n setError('Please select a procedure');\n return;\n }\n\n if (!patient) {\n setError('Patient not found');\n return;\n }\n\n try {\n setLoading(true);\n\n // Get doctor ID from logged-in user\n const doctorId = user.doctorId;\n\n const request = {\n procedureId: parseInt(requestData.procedureId),\n doctorId: parseInt(doctorId),\n patientId: patient.patientId,\n procedureDate: requestData.procedureDate,\n notes: requestData.notes,\n };\n\n console.log('User object:', user);\n console.log('Sending procedure request with doctorId:', doctorId, 'Full request:', request);\n await procedureService.recordProcedure(request);\n\n // Refresh the performed procedures\n const performedRes = await procedureService.getPerformedProceduresForPatient(patient.patientId);\n setPerformedProcedures(performedRes.data);\n\n // Reset form\n setRequestData({\n procedureId: '',\n procedureDate: new Date().toISOString().split('T')[0],\n notes: '',\n });\n setShowRequestForm(false);\n setError(null);\n } catch (err) {\n console.error('Error details:', err);\n console.error('Response:', err.response);\n const errorMsg = err.response?.data?.error || err.message || 'Unknown error';\n setError('Failed to request procedure: ' + errorMsg);\n } finally {\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{proc.procedure?.procedureType || 'Procedure'}
\nRequested by: {proc.doctor?.firstName} {proc.doctor?.lastName}
\nProcedure Date: {proc.procedureDate}
\n {proc.notes && (\nNotes: {proc.notes}
\n )}\n{result.procedure?.procedureType || 'Procedure'}
\nOutcome: {result.resultDescription}
\nResult Date: {result.resultDate}
\n\n {performedProcedures.length} procedure{performedProcedures.length !== 1 ? 's' : ''} awaiting results\n
\n \n Submit Procedure Results\n \nNo procedures for this patient
\nEnter a patient EMBG to request procedures
\n