{"ast":null,"code":"var _jsxFileName = \"C:\\\\Users\\\\User\\\\Downloads\\\\medora5\\\\frontend\\\\src\\\\pages\\\\patients\\\\PatientForm.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { patientService } from '../../services/patientService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport SuccessAlert from '../../components/SuccessAlert';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction PatientForm() {\n _s();\n const {\n id\n } = useParams();\n const navigate = useNavigate();\n const [formData, setFormData] = useState({\n firstName: '',\n lastName: '',\n emailAddress: '',\n embg: '',\n phoneNumber: '',\n dateOfBirth: '',\n gender: '',\n bloodType: ''\n });\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [loading, setLoading] = useState(false);\n useEffect(() => {\n if (id) {\n const fetchPatient = async () => {\n try {\n setLoading(true);\n const response = await patientService.getPatientById(id);\n setFormData(response.data);\n } catch (err) {\n setError('Failed to fetch patient');\n } finally {\n setLoading(false);\n }\n };\n fetchPatient();\n }\n }, [id]);\n const handleChange = e => {\n const {\n name,\n value\n } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n const handleSubmit = async e => {\n e.preventDefault();\n if (!formData.firstName || !formData.lastName || !formData.embg) {\n setError('Please fill in all required fields');\n return;\n }\n try {\n setLoading(true);\n if (id) {\n await patientService.updatePatient(id, formData);\n setSuccess('Patient updated successfully!');\n } else {\n await patientService.createPatient(formData);\n setSuccess('Patient created successfully!');\n }\n setTimeout(() => navigate('/patients'), 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 save patient');\n } finally {\n setLoading(false);\n }\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-2xl mx-auto\",\n children: [/*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"text-3xl font-bold mb-6\",\n children: id ? 'Edit Patient' : 'Add New Patient'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 77,\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: 81,\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: 82,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSubmit,\n className: \"bg-white rounded-lg shadow p-6 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: \"First Name *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n name: \"firstName\",\n value: formData.firstName,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Last Name *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 98,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n name: \"lastName\",\n value: formData.lastName,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 99,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 97,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"EMBG *\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 111,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n name: \"embg\",\n value: formData.embg,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n required: true,\n disabled: !!id\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 112,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 110,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Email\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 124,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"email\",\n name: \"emailAddress\",\n value: formData.emailAddress,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 125,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 9\n }, this), /*#__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: \"Phone\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 136,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"tel\",\n name: \"phoneNumber\",\n value: formData.phoneNumber,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 137,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 135,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Date of Birth\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"date\",\n name: \"dateOfBirth\",\n value: formData.dateOfBirth,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 147,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 145,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 134,\n columnNumber: 9\n }, this), /*#__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: \"Gender\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 159,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"gender\",\n value: formData.gender,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"\",\n children: \"Select Gender\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"MALE\",\n children: \"Male\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"FEMALE\",\n children: \"Female\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 168,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"OTHER\",\n children: \"Other\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 169,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 160,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 158,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-semibold mb-2\",\n children: \"Blood Type\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 173,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n name: \"bloodType\",\n value: formData.bloodType,\n onChange: handleChange,\n className: \"w-full px-4 py-2 border rounded-lg\",\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"\",\n children: \"Select Blood Type\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 180,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"O_POSITIVE\",\n children: \"O+\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 181,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"O_NEGATIVE\",\n children: \"O-\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"A_POSITIVE\",\n children: \"A+\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"A_NEGATIVE\",\n children: \"A-\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"B_POSITIVE\",\n children: \"B+\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"B_NEGATIVE\",\n children: \"B-\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 186,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"AB_POSITIVE\",\n children: \"AB+\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"AB_NEGATIVE\",\n children: \"AB-\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 188,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 172,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 157,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-4 pt-4\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: loading,\n className: \"bg-purple-600 text-white px-6 py-2 rounded hover:bg-purple-700 disabled:opacity-50\",\n children: loading ? 'Saving...' : 'Save Patient'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 194,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"button\",\n onClick: () => navigate('/patients'),\n className: \"bg-gray-300 text-gray-700 px-6 py-2 rounded hover:bg-gray-400\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 201,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 84,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 76,\n columnNumber: 5\n }, this);\n}\n_s(PatientForm, \"melAM2YoSo1xkiixaAp+f924jRY=\", false, function () {\n return [useParams, useNavigate];\n});\n_c = PatientForm;\nexport default PatientForm;\nvar _c;\n$RefreshReg$(_c, \"PatientForm\");","map":{"version":3,"names":["React","useState","useEffect","useNavigate","useParams","patientService","ErrorAlert","SuccessAlert","jsxDEV","_jsxDEV","PatientForm","_s","id","navigate","formData","setFormData","firstName","lastName","emailAddress","embg","phoneNumber","dateOfBirth","gender","bloodType","error","setError","success","setSuccess","loading","setLoading","fetchPatient","response","getPatientById","data","err","handleChange","e","name","value","target","prev","handleSubmit","preventDefault","updatePatient","createPatient","setTimeout","_err$response","_err$response$data","className","children","fileName","_jsxFileName","lineNumber","columnNumber","message","onClose","onSubmit","type","onChange","required","disabled","onClick","_c","$RefreshReg$"],"sources":["C:/Users/User/Downloads/medora5/frontend/src/pages/patients/PatientForm.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { patientService } from '../../services/patientService';\nimport ErrorAlert from '../../components/ErrorAlert';\nimport SuccessAlert from '../../components/SuccessAlert';\n\nfunction PatientForm() {\n const { id } = useParams();\n const navigate = useNavigate();\n const [formData, setFormData] = useState({\n firstName: '',\n lastName: '',\n emailAddress: '',\n embg: '',\n phoneNumber: '',\n dateOfBirth: '',\n gender: '',\n bloodType: '',\n });\n const [error, setError] = useState(null);\n const [success, setSuccess] = useState(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (id) {\n const fetchPatient = async () => {\n try {\n setLoading(true);\n const response = await patientService.getPatientById(id);\n setFormData(response.data);\n } catch (err) {\n setError('Failed to fetch patient');\n } finally {\n setLoading(false);\n }\n };\n\n fetchPatient();\n }\n }, [id]);\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (!formData.firstName || !formData.lastName || !formData.embg) {\n setError('Please fill in all required fields');\n return;\n }\n\n try {\n setLoading(true);\n if (id) {\n await patientService.updatePatient(id, formData);\n setSuccess('Patient updated successfully!');\n } else {\n await patientService.createPatient(formData);\n setSuccess('Patient created successfully!');\n }\n setTimeout(() => navigate('/patients'), 1500);\n } catch (err) {\n setError(err.response?.data?.error || 'Failed to save patient');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n