import { Box, Button, ButtonGroup, Stack } from '@mui/material'; import { useEffect, useState } from 'react'; import { AgGridReact } from 'ag-grid-react'; import useAxiosPrivate from '../../utils/useAxiosPrivate'; import EditNoteRoundedIcon from '@mui/icons-material/EditNoteRounded'; import DeleteSweepRoundedIcon from '@mui/icons-material/DeleteSweepRounded'; import AddCircleOutlineRoundedIcon from '@mui/icons-material/AddCircleOutlineRounded'; import Popup from './Popup'; import { useFormik } from "formik"; import { ToastContainer, toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import PictureAsPdfIcon from '@mui/icons-material/PictureAsPdf'; import DownloadIcon from '@mui/icons-material/Download'; import ExcelJS from 'exceljs'; import jsPDF from 'jspdf'; import 'jspdf-autotable'; import PatientInfoForm from "./PatientProfileForm" import PropTypes from "prop-types"; import VisibilityIcon from '@mui/icons-material/Visibility'; // import * as Yup from 'yup'; import { Link } from 'react-router-dom'; import { useNavigate } from 'react-router-dom'; // const PatientValidationForm = Yup.object({ // selectpatientcategory: Yup.string().required("Please choose patient category "), // pname: Yup.string().required("Please enter patient name"), // fhname: Yup.string().required("Please enter father anme "), // date: Yup.string().required("Please enter birth date"), // genderchoose: Yup.string().required("Please genderchoose"), // blood: Yup.string().required("Please enter blood"), // aadhar: Yup.string().required("Please enter aadhar"), // phone: Yup.string().required("Please enter phone number"), // village: Yup.string().required("Please enter village"), // post: Yup.string().required("Please enter post"), // ps: Yup.string().required("Please enter ps"), // tehsil:Yup.string().required("Please enter tehsil "), // district:Yup.string().required("Please enter district "), // state:Yup.string().required("Please enter sat"), // pin:Yup.string().required("Please enter pin"), // }); const PatientProfileList = () => { const [rowData, setRowData] = useState([]); const [colDefs, setColDefs] = useState([]); const [openPopup, setOpenPopup] = useState(false); const [viewMode, setViewMode] = useState(false); const axiosClientPrivate = useAxiosPrivate(); const [id, setId] = useState(1); const [showupdate, setShowupdate] = useState(false); const [fetchTrigger, setFetchTrigger] = useState(0); const navigate = useNavigate(); // public record PatientDto(Long id, String patientName, String fatherName, LocalDate dob, String gender, String bloodGroup, String aadharNo, String primaryPhone, String village, String post, String ps, String tehsil, String district, String state, Integer pinCode, Integer modifiedBy) { const initialValues = { selectpatientcategory: "", patientName: "", fatherName: "", dob: "", gender: "", bloodGroup: "", aadharNo: "", primaryPhone: "", village: "", post: "", ps: "", tehsil: "", district: "", state: "", pinCode: "", lastModified: "", modifiedBy: "" }; const { values, touched, errors, handleBlur, handleChange, setFieldValue, handleSubmit, resetForm } = useFormik({ initialValues: initialValues, // validationSchema: PatientValidationForm, onSubmit: async (values, { resetForm }) => { try { const response = await axiosClientPrivate.post('/patients', values); toast.success("Saved Successfully!", { position: "top-center" }); setFetchTrigger(prev => prev + 1); console.log('Response:', response.data); resetForm(); navigate(`/PatientAndContact/${ rowData[rowData.length-1].id + 1}`); } catch (error) { console.log(values); console.error('Error:', error); } }, }); const handleEdit = async (id) => { alert(id); try { const response = await axiosClientPrivate.get(`/patients/${id}`); console.log(response.data); setFieldValue("id", response.data.id); setFieldValue("selectpatientcategory", response.data.selectpatientcategory); setFieldValue("patientName", response.data.patientName); setFieldValue("fatherName", response.data.fatherName); setFieldValue("dob", response.data.dob); setFieldValue("gender", response.data.gender); setFieldValue("bloodGroup", response.data.bloodGroup); setFieldValue("aadharNo", response.data.aadharNo); setFieldValue("primaryPhone", response.data.primaryPhone); setFieldValue("village", response.data.village); setFieldValue("post", response.data.post); setFieldValue("ps", response.data.ps); setFieldValue("tehsil", response.data.tehsil); setFieldValue("district", response.data.district); setFieldValue("state", response.data.state); setFieldValue("pinCode", response.data.pinCode); setFieldValue("lastModified", response.data.lastModified); setFieldValue("modifiedBy", response.data.modifiedBy); setId(id); setShowupdate(true); setOpenPopup(true); } catch (error) { console.error('Error fetching item for edit:', error); } }; const handleView = async (id) => { alert(id); try { const response = await axiosClientPrivate.get(`/patients/${id}`); console.log(response.data); setFieldValue("id", response.data.id); setFieldValue("selectpatientcategory", response.data.selectpatientcategory); setFieldValue("patientName", response.data.patientName); setFieldValue("fatherName", response.data.fatherName); setFieldValue("dob", response.data.dob); setFieldValue("gender", response.data.gender); setFieldValue("bloodGroup", response.data.bloodGroup); setFieldValue("aadharNo", response.data.aadharNo); setFieldValue("primaryPhone", response.data.primaryPhone); setFieldValue("village", response.data.village); setFieldValue("post", response.data.post); setFieldValue("ps", response.data.ps); setFieldValue("tehsil", response.data.tehsil); setFieldValue("district", response.data.district); setFieldValue("state", response.data.state); setFieldValue("pinCode", response.data.pinCode); setFieldValue("lastModified", response.data.lastModified); setFieldValue("modifiedBy", response.data.modifiedBy); setId(id); setViewMode(true); setOpenPopup(true); } catch (error) { console.error('Error fetching item for view:', error); } }; const handleUpdate = async (id) => { alert(id); const update = values; try { console.log(values); await axiosClientPrivate.put(`/patients/${id}`, update); toast.success("Updated Successfully!", { position: "top-center", autoClose: 3000, }); resetForm(); setFetchTrigger(prev => prev + 1); } catch (err) { console.log(values); console.log(err); } } const handleDeleteRow = async (id) => { alert(id) if (window.confirm('Are you sure you want to delete this data?')) { try { await axiosClientPrivate.delete(`/patients/${id}`); setFetchTrigger(prev => prev + 1); } catch (error) { console.error('Error deleting row:', error); } } }; const CustomActionComponent = ({ id }) => { CustomActionComponent.propTypes = { id: PropTypes.number.isRequired, }; return