{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\referrals\\\\ReferralList.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { referralService } from '../../services/referralService';\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 ReferralList() {\n _s();\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isDoctor = user.role === 'DOCTOR';\n const [referrals, setReferrals] = useState([]);\n const [doctors, setDoctors] = useState([]);\n const [patients, setPatients] = useState([]);\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [searchType, setSearchType] = useState('patient'); // 'patient', 'fromDoctor', 'toDoctor'\n const [searchValue, setSearchValue] = useState('');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n\n // For creating referral\n const [showCreateForm, setShowCreateForm] = useState(false);\n const getDefaultAppointmentDate = () => {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return tomorrow.toISOString().split('T')[0];\n };\n const [formData, setFormData] = useState({\n fromDoctorId: isDoctor ? user.doctorId || '' : '',\n toDoctorId: '',\n patientId: '',\n recordId: '',\n reason: '',\n referralDate: new Date().toISOString().split('T')[0],\n appointmentDate: getDefaultAppointmentDate(),\n appointmentTime: '14:00'\n });\n useEffect(() => {\n loadDoctorsAndPatients();\n }, []);\n const loadDoctorsAndPatients = async () => {\n try {\n const [doctorsRes, patientsRes] = await Promise.all([doctorService.getAllDoctors(), patientService.getAllPatients()]);\n setDoctors(doctorsRes.data);\n setPatients(patientsRes.data);\n } catch (err) {\n console.error('Error loading data:', err);\n }\n };\n const handleSearch = async e => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n try {\n if (!searchValue.trim()) {\n setError('Please enter a search value');\n setLoading(false);\n return;\n }\n let response;\n if (searchType === 'patient') {\n response = await referralService.getReferralsByPatient(searchValue);\n } else if (searchType === 'fromDoctor') {\n response = await referralService.getReferralsByFromDoctor(searchValue);\n } else {\n response = await referralService.getReferralsByToDoctor(searchValue);\n }\n setReferrals(Array.isArray(response.data) ? response.data : [response.data]);\n setSearched(true);\n } catch (err) {\n setError('No referrals found');\n setReferrals([]);\n setSearched(true);\n } finally {\n setLoading(false);\n }\n };\n const handleCreateReferral = async e => {\n e.preventDefault();\n setError(null);\n try {\n if (!formData.fromDoctorId || !formData.toDoctorId || !formData.patientId || !formData.reason || !formData.appointmentDate || !formData.appointmentTime) {\n setError('Please fill in all required fields');\n return;\n }\n\n // Get patient's medical record ID\n const patientId = parseInt(formData.patientId);\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientId);\n const recordId = medicalRecordRes.data.recordId;\n const referralData = {\n medicalRecordId: recordId,\n fromDoctorId: parseInt(formData.fromDoctorId),\n toDoctorId: parseInt(formData.toDoctorId),\n reason: formData.reason,\n referralDate: formData.referralDate,\n appointmentDate: formData.appointmentDate,\n appointmentTime: formData.appointmentTime + ':00'\n };\n await referralService.createReferral(referralData);\n setSuccess('Referral created successfully!');\n setFormData({\n fromDoctorId: '',\n toDoctorId: '',\n patientId: '',\n recordId: '',\n reason: '',\n referralDate: new Date().toISOString().split('T')[0],\n appointmentDate: getDefaultAppointmentDate(),\n appointmentTime: '14:00'\n });\n setShowCreateForm(false);\n\n // Refresh referrals list\n setTimeout(() => {\n setSearched(false);\n setSearchValue('');\n }, 1500);\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 referral');\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: \"Doctor Referrals\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 149,\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: 151,\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: 152,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setShowCreateForm(!showCreateForm),\n style: {\n background: '#bfdbfe',\n color: '#1e1035',\n padding: '8px 24px',\n borderRadius: '6px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '400'\n },\n onMouseEnter: e => e.currentTarget.style.background = '#93c5fd',\n onMouseLeave: e => e.currentTarget.style.background = '#bfdbfe',\n children: showCreateForm ? 'Cancel' : 'Create New Referral'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 156,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 155,\n columnNumber: 7\n }, this), showCreateForm && /*#__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 New Referral\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 178,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleCreateReferral,\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: \"From Doctor *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 17\n }, this), isDoctor ? /*#__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: 184,\n columnNumber: 19\n }, this) : /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"fromDoctorId\",\n value: formData.fromDoctorId,\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 referring doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 195,\n columnNumber: 21\n }, this), doctors.map(doctor => /*#__PURE__*/_jsxDEV(\"option\", {\n value: doctor.doctorId,\n children: [\"Dr. \", doctor.firstName, \" \", doctor.lastName, \" (\", doctor.specialization.specializationName, \")\"]\n }, doctor.doctorId, true, {\n fileName: _jsxFileName,\n lineNumber: 197,\n columnNumber: 23\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 188,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 181,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"To Doctor *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"toDoctorId\",\n value: formData.toDoctorId,\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 receiving doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 214,\n columnNumber: 19\n }, this), doctors.map(doctor => /*#__PURE__*/_jsxDEV(\"option\", {\n value: doctor.doctorId,\n children: [\"Dr. \", doctor.firstName, \" \", doctor.lastName, \" (\", doctor.specialization.specializationName, \")\"]\n }, doctor.doctorId, true, {\n fileName: _jsxFileName,\n lineNumber: 216,\n columnNumber: 21\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 207,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 205,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Patient *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 224,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"patientId\",\n value: formData.patientId,\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 patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 232,\n columnNumber: 19\n }, this), patients.map(patient => /*#__PURE__*/_jsxDEV(\"option\", {\n value: patient.patientId,\n children: [patient.firstName, \" \", patient.lastName, \" (\", patient.embg, \")\"]\n }, patient.patientId, true, {\n fileName: _jsxFileName,\n lineNumber: 234,\n columnNumber: 21\n }, this))]\n }, void 0, true, {\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(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Referral Date *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n name: \"referralDate\",\n value: formData.referralDate,\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: 243,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 241,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Appointment Date *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n name: \"appointmentDate\",\n value: formData.appointmentDate,\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: 255,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 253,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Appointment Time *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 266,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"time\",\n name: \"appointmentTime\",\n value: formData.appointmentTime,\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: 267,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 265,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 180,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Reason for Referral *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 279,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"textarea\", {\n name: \"reason\",\n value: formData.reason,\n onChange: handleFormChange,\n placeholder: \"e.g., Requires specialist evaluation for suspected cardiac condition\",\n className: \"w-full px-4 py-2 border rounded-lg\",\n rows: \"3\",\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 280,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 278,\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 Referral\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 291,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\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), /*#__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 Referrals\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 303,\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: \"Search By\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n value: searchType,\n onChange: e => {\n setSearchType(e.target.value);\n setSearchValue('');\n setSearched(false);\n },\n className: \"w-full px-4 py-2 border rounded-lg\",\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"patient\",\n children: \"Patient ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 317,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"fromDoctor\",\n children: \"Referring Doctor ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 318,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"toDoctor\",\n children: \"Receiving Doctor ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 319,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 308,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 306,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Enter ID\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 324,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"number\",\n value: searchValue,\n onChange: e => setSearchValue(e.target.value),\n placeholder: \"Enter ID\",\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 325,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 323,\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: 335,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 305,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 302,\n columnNumber: 7\n }, this), searched && referrals.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-white rounded-lg shadow overflow-hidden\",\n children: /*#__PURE__*/_jsxDEV(\"table\", {\n className: \"w-full\",\n children: [/*#__PURE__*/_jsxDEV(\"thead\", {\n className: \"bg-gray-100\",\n children: /*#__PURE__*/_jsxDEV(\"tr\", {\n children: [/*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"From Doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 353,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"To Doctor\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 354,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"Patient\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 355,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"Reason\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 356,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"Referral Date\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 357,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"Appointment Date\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 358,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"th\", {\n className: \"px-6 py-3 text-left text-sm font-semibold\",\n children: \"Appointment Time\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 352,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 351,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"tbody\", {\n children: referrals.map(referral => /*#__PURE__*/_jsxDEV(\"tr\", {\n className: \"border-t hover:bg-gray-50\",\n children: [/*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.fromDoctorName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 365,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.toDoctorName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 366,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.patientName\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 367,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.reason\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 368,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.referralDate\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 369,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.appointmentDate\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 370,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"td\", {\n className: \"px-6 py-3\",\n children: referral.appointmentTime\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 371,\n columnNumber: 19\n }, this)]\n }, referral.referralId, true, {\n fileName: _jsxFileName,\n lineNumber: 364,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 362,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 350,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 9\n }, this), searched && referrals.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 referrals found\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 382,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 381,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 148,\n columnNumber: 5\n }, this);\n}\n_s(ReferralList, \"O4b6lM+BF+3zTl1z2/gCKLMFO0c=\");\n_c = ReferralList;\nexport default ReferralList;\nvar _c;\n$RefreshReg$(_c, \"ReferralList\");","map":{"version":3,"names":["React","useState","useEffect","referralService","patientService","doctorService","medicalRecordService","ErrorAlert","SuccessAlert","jsxDEV","_jsxDEV","ReferralList","_s","user","JSON","parse","localStorage","getItem","isDoctor","role","referrals","setReferrals","doctors","setDoctors","patients","setPatients","error","setError","success","setSuccess","searchType","setSearchType","searchValue","setSearchValue","searched","setSearched","loading","setLoading","showCreateForm","setShowCreateForm","getDefaultAppointmentDate","tomorrow","Date","setDate","getDate","toISOString","split","formData","setFormData","fromDoctorId","doctorId","toDoctorId","patientId","recordId","reason","referralDate","appointmentDate","appointmentTime","loadDoctorsAndPatients","doctorsRes","patientsRes","Promise","all","getAllDoctors","getAllPatients","data","err","console","handleSearch","e","preventDefault","trim","response","getReferralsByPatient","getReferralsByFromDoctor","getReferralsByToDoctor","Array","isArray","handleCreateReferral","parseInt","medicalRecordRes","getMedicalRecordByPatientId","referralData","medicalRecordId","createReferral","setTimeout","_err$response","_err$response$data","handleFormChange","name","value","target","prev","children","className","style","color","fileName","_jsxFileName","lineNumber","columnNumber","message","onClose","onClick","background","padding","borderRadius","border","cursor","fontSize","fontWeight","onMouseEnter","currentTarget","onMouseLeave","onSubmit","firstName","lastName","onChange","required","map","doctor","specialization","specializationName","patient","embg","type","placeholder","rows","disabled","length","referral","fromDoctorName","toDoctorName","patientName","referralId","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/referrals/ReferralList.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { referralService } from '../../services/referralService';\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 ReferralList() {\n const user = JSON.parse(localStorage.getItem('user') || '{}');\n const isDoctor = user.role === 'DOCTOR';\n\n const [referrals, setReferrals] = useState([]);\n const [doctors, setDoctors] = useState([]);\n const [patients, setPatients] = useState([]);\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [searchType, setSearchType] = useState('patient'); // 'patient', 'fromDoctor', 'toDoctor'\n const [searchValue, setSearchValue] = useState('');\n const [searched, setSearched] = useState(false);\n const [loading, setLoading] = useState(false);\n\n // For creating referral\n const [showCreateForm, setShowCreateForm] = useState(false);\n const getDefaultAppointmentDate = () => {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return tomorrow.toISOString().split('T')[0];\n };\n const [formData, setFormData] = useState({\n fromDoctorId: isDoctor ? (user.doctorId || '') : '',\n toDoctorId: '',\n patientId: '',\n recordId: '',\n reason: '',\n referralDate: new Date().toISOString().split('T')[0],\n appointmentDate: getDefaultAppointmentDate(),\n appointmentTime: '14:00',\n });\n\n useEffect(() => {\n loadDoctorsAndPatients();\n }, []);\n\n const loadDoctorsAndPatients = async () => {\n try {\n const [doctorsRes, patientsRes] = await Promise.all([\n doctorService.getAllDoctors(),\n patientService.getAllPatients(),\n ]);\n setDoctors(doctorsRes.data);\n setPatients(patientsRes.data);\n } catch (err) {\n console.error('Error loading data:', err);\n }\n };\n\n const handleSearch = async (e) => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n\n try {\n if (!searchValue.trim()) {\n setError('Please enter a search value');\n setLoading(false);\n return;\n }\n\n let response;\n if (searchType === 'patient') {\n response = await referralService.getReferralsByPatient(searchValue);\n } else if (searchType === 'fromDoctor') {\n response = await referralService.getReferralsByFromDoctor(searchValue);\n } else {\n response = await referralService.getReferralsByToDoctor(searchValue);\n }\n\n setReferrals(Array.isArray(response.data) ? response.data : [response.data]);\n setSearched(true);\n } catch (err) {\n setError('No referrals found');\n setReferrals([]);\n setSearched(true);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCreateReferral = async (e) => {\n e.preventDefault();\n setError(null);\n\n try {\n if (!formData.fromDoctorId || !formData.toDoctorId || !formData.patientId || !formData.reason || !formData.appointmentDate || !formData.appointmentTime) {\n setError('Please fill in all required fields');\n return;\n }\n\n // Get patient's medical record ID\n const patientId = parseInt(formData.patientId);\n const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientId);\n const recordId = medicalRecordRes.data.recordId;\n\n const referralData = {\n medicalRecordId: recordId,\n fromDoctorId: parseInt(formData.fromDoctorId),\n toDoctorId: parseInt(formData.toDoctorId),\n reason: formData.reason,\n referralDate: formData.referralDate,\n appointmentDate: formData.appointmentDate,\n appointmentTime: formData.appointmentTime + ':00',\n };\n\n await referralService.createReferral(referralData);\n setSuccess('Referral created successfully!');\n setFormData({\n fromDoctorId: '',\n toDoctorId: '',\n patientId: '',\n recordId: '',\n reason: '',\n referralDate: new Date().toISOString().split('T')[0],\n appointmentDate: getDefaultAppointmentDate(),\n appointmentTime: '14:00',\n });\n setShowCreateForm(false);\n\n // Refresh referrals list\n setTimeout(() => {\n setSearched(false);\n setSearchValue('');\n }, 1500);\n } catch (err) {\n setError(err.response?.data?.error || 'Failed to create referral');\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
| From Doctor | \nTo Doctor | \nPatient | \nReason | \nReferral Date | \nAppointment Date | \nAppointment Time | \n
|---|---|---|---|---|---|---|
| {referral.fromDoctorName} | \n{referral.toDoctorName} | \n{referral.patientName} | \n{referral.reason} | \n{referral.referralDate} | \n{referral.appointmentDate} | \n{referral.appointmentTime} | \n
No referrals found
\n