import { Button, Stack, Typography, Avatar, Grid, useMediaQuery, Card, CardContent, // Tabs, // Tab, } from "@mui/material"; import { useTheme } from "@mui/material/styles"; import Box from '@mui/material/Box'; import "react-toastify/dist/ReactToastify.css"; import "ag-grid-community/styles/ag-grid.css"; import "ag-grid-community/styles/ag-theme-alpine.css"; import avatar from "../../assets/images/avatar.avif"; // import PropTypes from 'prop-types'; import React from "react"; import ArrowForwardIosSharpIcon from "@mui/icons-material/ArrowForwardIosSharp"; import MuiAccordion from "@mui/material/Accordion"; import MuiAccordionSummary from "@mui/material/AccordionSummary"; import MuiAccordionDetails from "@mui/material/AccordionDetails"; import { styled } from "@mui/material/styles"; import { useEffect, useState,Suspense } from "react"; import useAxiosPrivate from "../../utils/useAxiosPrivate"; import { useParams } from "react-router-dom"; import Popup from "./Popup"; import { ToastContainer, toast } from "react-toastify"; import { useFormik } from "formik"; import CircularProgress from '@mui/material/CircularProgress'; // exercise,measurement,diet pop forms import ExerciseMinuteForm from "./ExerciseMinuteForm"; import BodyMeasurementForm from "./DailyMeasurementForm"; import PatientDietForm from "./PatientDietForm"; import BottomRightDial from './BottomRightDial' // pop history imports import Dialog from "@mui/material/Dialog"; import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; import DialogContentText from "@mui/material/DialogContentText"; import DialogTitle from "@mui/material/DialogTitle"; import Divider from "@mui/material/Divider"; import EditNoteRoundedIcon from '@mui/icons-material/EditNoteRounded'; import DeleteSweepRoundedIcon from '@mui/icons-material/DeleteSweepRounded'; import AddCircleOutlineRoundedIcon from '@mui/icons-material/AddCircleOutlineRounded'; import { useNavigate } from 'react-router-dom'; //table import { Table, CardMedia, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, } from "@mui/material"; import WaterDropIcon from "@mui/icons-material/WaterDrop"; // bloodgroup icon import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { Fullscreen } from "@mui/icons-material"; const Accordion = styled((props) => ( ))(({ theme }) => ({ border: `1px solid ${theme.palette.divider}`, "&:not(:last-child)": { borderBottom: 0, }, "&::before": { display: "none", }, })); const AccordionSummary = styled((props) => ( } {...props} /> ))(({ theme }) => ({ backgroundColor: theme.palette.mode === "dark" ? "rgba(255, 255, 255, .05)" : "rgba(0, 0, 0, .03)", flexDirection: "row-reverse", "& .MuiAccordionSummary-expandIconWrapper.Mui-expanded": { transform: "rotate(90deg)", }, "& .MuiAccordionSummary-content": { marginLeft: theme.spacing(1), }, })); const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ padding: theme.spacing(2), borderTop: "1px solid rgba(0, 0, 0, .125)", })); const DoctorDashboard = () => { // const [rowData, setRowData] = useState([]); const axiosClientPrivate = useAxiosPrivate(); const [patientinfo, setPatientinfo] = useState({}); // const [healthparemeter,setHealthparemeter] = useState({}); const [patientname, setPatientname] = useState(""); const [idpara, setIdpara] = useState({}); const [idexercise, setIdexercise] = useState({}); const [dietpair, setDietpair] = useState({}); const [parameters, setParameters] = useState([]); const [patientexercise, setPatientexercise] = useState([]); const [patientdiet, setPatientdiet] = useState([]); const [fetchTrigger, setFetchTrigger] = useState(0); // const [unitpair,setUnitpair] = useState({}); // add buttons const [showupdate, setShowupdate] = useState(false); const [exercises, setExercise] = useState([]); const [unit, setUnit] = useState([{}]); const [bodyparams, setBodyparams] = useState([]); const [nutrient, setNutrient] = useState([]); const [patientid, setPatientid] = useState(null); const [titlle, setTitle] = useState("Patient Master"); const [currentForm, setCurrentForm] = useState("ExerciseMinuteForm"); const [openPopup, setOpenPopup] = useState(false); const [bodyparameterpair, setBodyparameterpair] = useState({}); const [unitpair, setUnitpair] = useState({}); const [nutrientpair, setNutrientpair] = useState({}); const [bodyparaunit, setBodyparaunit] = useState({}); const [paraid, setParaid] = useState({}); const [paraunitid, setParaunitid] = useState({}); const [exerciseid, setExerciseid] = useState({}); const [nutrientidpair, setNutrientidpair] = useState({}); // complain history const [complaintHistory,setComplaintHistory] = useState([]); // history model state const [open, setOpen] = useState(false); const [historyTitle, setHistoryTitle] = useState(""); const [measurementHistory, setMeasurementHistory] = useState([]); const [dailyParameter, setDailyParameter] = useState([]); const [dailyExercise, setDailyExercise] = useState([]); const [daillyDiet, setDailyDiet] = useState([]); // current consultation const [currentComplain,setCurrentComplain] = useState({}); const [currentConsultationId,setCurrentConsultationId] = useState(); const [currentMeasurement,setCurrentMeasurement] = useState(); const [bloodGroup, setBloodGroup] = useState(""); const [isLoading, setIsLoading] = useState(false); const navigate = useNavigate(); const handleClickOpen = (title) => { setOpen(true); setHistoryTitle(title); }; const handleClose = () => { setOpen(false); }; // const descriptionElementRef = useRef(null); // React.useEffect(() => { // if (open) { // const { current: descriptionElement } = descriptionElementRef; // if (descriptionElement !== null) { // descriptionElement.focus(); // } // } // }, [open]); // to calculate the age of a patient function calculateAge(dob) { if (dob == null) { return ""; } const dobDate = new Date(dob); const currentDate = new Date(); let age = currentDate.getFullYear() - dobDate.getFullYear(); const monthDifference = currentDate.getMonth() - dobDate.getMonth(); const dayDifference = currentDate.getDate() - dobDate.getDate(); if (monthDifference < 0 || (monthDifference === 0 && dayDifference < 0)) { age--; } return age; } // Function to format the date from YYYY-MM-DD to DD-MM-YYYY function formatDate(dateString) { if (dateString != null || dateString != undefined || dateString != "") { const [year, month, day] = dateString.split("-"); return `${day}-${month}-${year}`; } } // for history date const historyFormat = (dateString) => { const date = new Date(dateString); const day = date.getDate(); const month = date .toLocaleString("default", { month: "long" }) .toUpperCase(); const year = date.getFullYear(); return `${day}-${month}-${year}`; }; // patient display data const { encodedId } = useParams(); const pid = atob(encodedId); // alert(pid) // const patietnEncodeId = btoa(pid); const patietnEncodeId = btoa((JSON.stringify({pid : pid}))); // console.log("patient id : ",patientid); useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get(`/patients`, { signal: controller.signal, }); const items = response.data.content; // console.log("patient info : ",items); // setRowData(items); const patient = items.find((item) => item.id == pid); // console.log(" iterator : ",patient); setPatientname( patient.patientName + "," + patient.gender + "," + calculateAge(patient.dob) ); setBloodGroup(patient.bloodGroup); if (patient) { // console.log('got a patient with id', id); const age = calculateAge(patient.dob); const object = { "Patient Id": patient.id ? patient.id : "", "Patient Name": patient.patientName ? patient.patientName : "", "Father Name": patient.fatherName ? patient.fatherName : "", DOB: patient.dob ? formatDate(patient.dob) : "", Age: age, Email: patient.emailId, }; setPatientinfo(object); // console.log("getting the object : ",object); } } catch (err) { console.error("Failed to fetch data: ", err); // setRowData([]); } }; getAllOhc(); return () => { controller.abort(); }; }, [pid, axiosClientPrivate]); useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/units", { signal: controller.signal, }); const items = response.data.content; // console.log("units :-",items); const unitobj = {}; items.map((item) => { unitobj[item.id] = item.unitName; }); setUnitpair(unitobj); // console.log("id name :-",unitobj); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, []); // body measurement parameter useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/measurements", { signal: controller.signal, }); const items = response.data.content; console.log("body parameter :-",items); const idpara = {}; items.forEach((item) => { idpara[item.id] = item.bmName; }); setIdpara(idpara); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate]); // id diet pair useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/nutrient-masters", { signal: controller.signal, }); const items = response.data.content; console.log("nutrient master :-", items); const iddietpair = {}; if (items.length > 0) { items.forEach((item) => { iddietpair[item.id] = item.nutrientName; }); } setDietpair(iddietpair); console.log("id diet pair :-", iddietpair); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate]); // id exercise pair useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/exercise-masters", { signal: controller.signal, }); const items = response.data.content; // console.log("exercise master :-",items); const idexercisepair = {}; if (items.length > 0) { items.forEach((item) => { idexercisepair[item.id] = item.exerciseName; }); } setIdexercise(idexercisepair); console.log("id exercise pair :-", idexercisepair); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate]); //patient measurement value useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get(`/patient-measurements`, { signal: controller.signal, }); const items = response.data.content; console.log("measurement items",items); console.log("current consulatation",currentConsultationId); const currentMeasurement = items .filter((item) => item.consultationId == currentConsultationId) .map((item) => item.bodyMeasurementValues); console.log("patient measurement values",currentMeasurement); // const parameter = items.find((item) => item.empId == patientid) // const transformData = (data) => { // console.log("Input data:", data); // console.log("idpara:", idpara); // return Object.keys(data).map((key) => ({ // label: idpara[Number(key)], // Convert the key to a number // // value: data[key].value + data[key].value[data[key].unitId] // // value: `${data[key].value} ${unitpair[data[key].unitId]}`, // value: `${data[key].value}`, // })); // }; const transformData = (data) => { console.log("Input data:", data); console.log("idpara:", idpara); return Object.keys(data).map((key) => { const valueData = data[key]; const label = idpara[Number(key)]; // Convert the key to a number and map it to a label using idpara return { label: label !== undefined ? label : "Unknown Label", // Fallback if label is undefined value: valueData && valueData.value !== undefined && valueData.unitId !== undefined ? `${valueData.value} ${unitpair[valueData.unitId]}` // Combine value with unit : `${valueData.value}`, // Just use the value if unitId is missing }; }); }; const check = transformData(currentMeasurement) console.log("current measurement",check); // setCurrentMeasurement(transformData(currentMeasurement)); // const historyData = items.filter((item) => item.empId == pid); // // console.log(" measurement history data :- ",historyData); // if (historyData.length > 0) { // const data = historyData.map((item) => { // return { // date: item.date, // bodyMeasurementValues: transformData(item.bodyMeasurementValues), // }; // }); // setMeasurementHistory(data); // console.log("history object", data); // } // const getLatestDataForEmpId = (data, empId) => { // return data.reduce((latest, current) => { // if (current.empId == empId) { // return !latest || // new Date(current.lastModified) > new Date(latest.lastModified) // ? current // : latest; // } // return latest; // }, null); // }; // const latestData = getLatestDataForEmpId(items, pid); // console.log("measurement latest data",latestData); // if (latestData.bodyMeasurementValues != null) { // const formattedData = transformData(latestData.bodyMeasurementValues); // setParameters(formattedData); // console.log("parameter array :", formattedData); // } } catch (err) { console.error("Failed to fetch data: ", err); // setRowData([]); } }; getAllOhc(); return () => { controller.abort(); }; }, [fetchTrigger, pid, axiosClientPrivate, idpara, unitpair,currentConsultationId]); //patient Exercise plan useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get( "/patient-exercise-plans", { signal: controller.signal } ); const items = response.data.content; console.log("exercise items", items); const getLatestDataForEmpId = (data, empId) => { return data.reduce((latest, current) => { if (current.empId == empId) { return !latest || new Date(current.lastModified) > new Date(latest.lastModified) ? current : latest; } return latest; }, null); }; const latestData = getLatestDataForEmpId(items, pid); console.log("exercise latest data", latestData); const transformData = (data) => { return Object.keys(data).map((key) => ({ label: idexercise[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); }; if (latestData.exercisePlanValues != null && latestData != null) { const formattedData = transformData(latestData.exercisePlanValues); setPatientexercise(formattedData); console.log("exercise final value", formattedData); } } catch (err) { console.error("Failed to fetch patient exercise plan: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [fetchTrigger, unitpair, idexercise, pid, axiosClientPrivate]); //patient Deit plan useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/patient-diet-plans", { signal: controller.signal, }); const items = response.data.content; console.log("nutrients items", items); const getLatestDataForEmpId = (data, empId) => { // to get the latest data return data.reduce((latest, current) => { if (current.empId == empId) { return !latest || new Date(current.lastModified) > new Date(latest.lastModified) ? current : latest; } return latest; }, null); }; const latestData = getLatestDataForEmpId(items, pid); console.log("exercise latest data", latestData); const transformData = (data) => { return Object.keys(data).map((key) => ({ label: dietpair[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); }; if (latestData.dietPlanDetails != null) { const formattedData = transformData(latestData.dietPlanDetails); setPatientdiet(formattedData); console.log("diet final value", formattedData); } } catch (err) { console.error("Failed to fetch exercise: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [unitpair, dietpair, pid, axiosClientPrivate]); // fetching daily measurement data(tracking) useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/patient-daily-measurements", { signal: controller.signal, }); const items = response.data.content; console.log("daily measurement",items); const getLatestDataForEmpId = (data, empId) => { return data.reduce((latest, current) => { if (current.empId == empId) { return !latest || new Date(current.lastModified) > new Date(latest.lastModified) ? current : latest; } return latest; }, null); }; const transformData = (data) => { return Object.keys(data).map((key) => ({ label: idpara[Number(key)], // Convert the key to a number value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); } const latestData = getLatestDataForEmpId(items, 1); if (latestData.bodyMeasurementValues != null) { const formattedData = transformData(latestData.bodyMeasurementValues); setDailyParameter(formattedData); console.log("daily measurement",formattedData); } setTimeout(() => { setIsLoading(false); }, 300); console.log("actula fitness data :-", latestData); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate,unitpair,idpara]); // fetching daily exercise data useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get("/patient-daily-exercises", { signal: controller.signal, }); const items = response.data.content; const getLatestDataForEmpId = (data, empId) => { return data.reduce((latest, current) => { if (current.empId == empId) { return !latest || new Date(current.lastModified) > new Date(latest.lastModified) ? current : latest; } return latest; }, null); }; const transformData = (data) => { return Object.keys(data).map((key) => ({ label: idexercise[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); } const latestData = getLatestDataForEmpId(items, 1); if (latestData.exerciseValues != null) { const formattedData = transformData(latestData.exerciseValues); setDailyExercise(formattedData); } setTimeout(() => { setIsLoading(false); }, 300); console.log("actula exercise data :-", latestData); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate,unitpair,idexercise]); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("sm")); const [expanded, setExpanded] = useState("panel1"); const handleChange = (panel) => (event, newExpanded) => { setExpanded(newExpanded ? panel : false); }; // const exerciseData = [ // { name: 'Push-ups', minutes: 10, remarks: 'Warm-up' }, // // { name: 'Squats', minutes: 15, remarks: 'Strength training' }, // // { name: 'Running', minutes: 30, remarks: 'Cardio' }, // // { name: 'Push-ups', minutes: 10, remarks: 'Warm-up' }, // // { name: 'Squats', minutes: 15, remarks: 'Strength training' }, // // { name: 'Running', minutes: 30, remarks: 'Cardio' }, // // { name: 'Push-ups', minutes: 10, remarks: 'Warm-up' }, // // { name: 'Squats', minutes: 15, remarks: 'Strength training' }, // // { name: 'Running', minutes: 30, remarks: 'Cardio' }, // // { name: 'Push-ups', minutes: 10, remarks: 'Warm-up' }, // // { name: 'Squats', minutes: 15, remarks: 'Strength training' }, // // { name: 'Running', minutes: 30, remarks: 'Cardio' }, // // { name: 'Push-ups', minutes: 10, remarks: 'Warm-up' }, // // { name: 'Squats', minutes: 15, remarks: 'Strength training' }, // // { name: 'Running', minutes: 30, remarks: 'Cardio' }, // ]; // health parameter // const data = [ // { value: "120cm", label: "Height", bgColor: "#ce93d8" }, // { value: "50Kg", label: "Weight", bgColor: "#ffffff", textColor: "#000" }, // { value: "22", label: "Bmi", bgColor: "#9e9e9e" }, // { value: "120/80", label: "Bp", bgColor: "#000000" }, // { value: "72bpm", label: "Pulse", bgColor: "#8bc34a" }, // { value: "80%", label: "Health Index", bgColor: "#29b6f6" }, // { value: "90 mg/dL", label: "Fbs", bgColor: "#a5d6a7" }, // { value: "140 mg/dL", label: "Rbs", bgColor: "#cfd8dc" }, // { value: "160 mg/dL", label: "Ppbs", bgColor: "#ffcc80" }, // ]; const getTextColor = (bgColor) => { return bgColor === "#ffffff" ? "#000000" : "#ffffff"; }; const colors = [ "#ce93d8", "#ffffff", "#9e9e9e", "#000000", "#8bc34a", "#29b6f6", "#a5d6a7", "#cfd8dc", "#ffcc80", ]; // consultation - fetching current and history useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { setIsLoading(true); const response = await axiosClientPrivate.get( `/patient-consultations/employee/${pid}`, { signal: controller.signal } ); const items = response.data.content; console.log("patient consultation data",items); // patient measurement target const measurementData = (data) => { return Object.keys(data).map((key) => ({ label: idpara[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); }; // patient exercise target const exerciseData = (data) => { return Object.keys(data).map((key) => ({ label: idexercise[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); }; // patient diet target const dietData = (data) => { return Object.keys(data).map((key) => ({ label: dietpair[Number(key)], // Convert the key to a number // value: data[key].value + data[key].value[data[key].unitId] value: `${data[key].value} ${unitpair[data[key].unitId]}`, })); }; const historyData = items.map((item)=>{ return { consultationId : item.id, date : historyFormat(item.date), complaint : item.complaint, remark : item.remark, patientMeasurement : measurementData(item.bodyMeasurements), patientExercise : exerciseData(item.exercises), patientDiet : dietData(item.dietPlans) }; }) // historyData.reverse(); if(historyData.length > 0){ historyData.reverse() historyData.shift(); setComplaintHistory(historyData); } console.log('history data',historyData); // to get the current complain,date,remark const getLatestDataForEmpId = (data, empId) => { return data.reduce((latest, current) => { if (current.empId == empId) { return !latest || new Date(current.lastModified) > new Date(latest.lastModified) ? current : latest; } return latest; }, null); }; const latestData = getLatestDataForEmpId(items, pid); setCurrentConsultationId(latestData.id) console.log("patient latest complain",latestData); const currentComplain = { consultationId : latestData.id, date : historyFormat(latestData.date), complain : latestData.complaint, remark : latestData.remark, patientMeasurement : measurementData(latestData.bodyMeasurements), patientExercise : exerciseData(latestData.exercises), patientDiet : dietData(latestData.dietPlans) } setCurrentComplain(currentComplain); setIsLoading(false); console.log("patient latest complain",currentComplain); }catch (err) { console.error("Failed to fetch complain: ", err) setIsLoading(false) } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate,idpara,idexercise,dietpair,pid,unitpair,fetchTrigger]); const consultationDelete = async(consultationId)=>{ // alert(consultationId); if(window.confirm('Are you sure you want to delete this data?')){ try { await axiosClientPrivate.delete(`/patient-consultations/${consultationId}`); toast.success("Deleted Successfully!", { position: "top-center", autoClose : 300 }); setFetchTrigger(Prev => Prev+1); } catch (error) { console.error('Error deleting row:', error); } } } // if(!currentComplain.length){ // setIsLoading(false); // } const hasCurrentMeasurementData = currentComplain['patientMeasurement'] && currentComplain['patientMeasurement'].length > 0; const hasCurrentExerciseData = currentComplain['patientExercise'] && currentComplain['patientExercise'].length > 0; const hasCurrentDietData = currentComplain['patientDiet'] && currentComplain['patientDiet'].length > 0; // add buttons // exercise plan useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get( "/exercise-masters", { signal: controller.signal } ); const items = response.data.content; setExercise(items); const pair = {}; items.forEach((item) => { pair[item.exerciseName] = item.id; }); setExerciseid(pair); console.log("exercise and id pair", pair); } catch (err) { console.error("Failed to fetch exercise: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, []); // console.log("jhkhkjh",exercises); const exerciseMinuteFormik = useFormik({ enableReinitialize: true, initialValues: { exercises: exercises.map((item) => ({ exercisename: item.exerciseName, minutes: "", remark: "", })), }, // validationSchema: ExerciseMinuteValidationForm, // if you have a validation schema for this form onSubmit: async (values, { resetForm }) => { const filteredExercises = values.exercises.filter( (exercise) => exercise.minutes && exercise.remark ); console.log("filter", filteredExercises); const exercisePlanValues = filteredExercises.reduce((acc, param) => { acc[exerciseid[param.exercisename]] = { value: parseFloat(param.minutes), // unitId: paraunitid[param.measurementname], remark: param.remark, }; return acc; }, {}); const finalValues = { date: getFormattedDate(), empId: patientid, exercisePlanValues: exercisePlanValues, }; console.log("exercise final json obj", finalValues); try { const response = await axiosClientPrivate.post( "/patient-exercise-plans", finalValues ); toast.success("Saved Successfully!", { position: "top-center", }); console.log("Response:", response.data); resetForm(); setFetchTrigger((prev) => prev + 1); } catch (error) { console.log(values); console.error("Error:", error); } }, }); // body measurement parameter useEffect(() => { const controller = new AbortController(); const getAllOhc = async () => { try { const response = await axiosClientPrivate.get( "/measurements", { signal: controller.signal } ); const items = response.data.content; console.log("body parameter :-", items); const parameter = {}; const paraid = {}; const paraunitid = {}; items.forEach((item) => { parameter[item.bmName] = unitpair[item.id]; paraid[item.bmName] = item.id; paraunitid[item.bmName] = item.unitId; }); console.log("check key value parameter", parameter); setBodyparameterpair(parameter); setParaid(paraid); setParaunitid(paraunitid); console.log("parameter and id pair", paraid); console.log("parameter and unit pair", paraunitid); setBodyparams(items); } catch (err) { console.error("Failed to fetch data: ", err); } }; getAllOhc(); return () => { controller.abort(); }; }, [axiosClientPrivate, unitpair]); function getFormattedDate() { const date = new Date(); const day = String(date.getDate()).padStart(2, "0"); const month = String(date.getMonth() + 1).padStart(2, "0"); // Months are zero-indexed const year = date.getFullYear(); return `${year}-${month}-${day}`; } useEffect(() => { const controller = new AbortController(); const fetchNutrientMasters = async () => { try { const response = await axiosClientPrivate.get("/nutrient-masters", { signal: controller.signal, }); const items = response.data.content; // console.log("Nutrient masters:", items); // const nutrient = {}; // items.forEach(item => { // nutrient[item.id] = item.nutrientName; // }); setNutrient(items); const nutrientpair = {}; items.forEach((item) => { nutrientpair[item.nutrientName] = unitpair[item.unitId]; }); setNutrientpair(nutrientpair); const nutrient = {}; items.forEach((item) => { nutrient[item.nutrientName] = item.id; }); // console.log("nutrietn and id pair",nutrient); setNutrientidpair(nutrient); } catch (err) { console.error("Failed to fetch data: ", err); } }; fetchNutrientMasters(); return () => { controller.abort(); }; }, [unitpair, axiosClientPrivate]); const patientDietFormik = useFormik({ enableReinitialize: true, initialValues: { nutrients: nutrient.map((item) => ({ nutrientname: item.nutrientName, nutrientvalue: "", remark: "", })), }, // validationSchema: ExerciseMinuteValidationForm, // if you have a validation schema for this form onSubmit: async (values, { resetForm }) => { console.log("not filter values:", values); const filterednutrients = values.nutrients.filter( (item) => item.nutrientvalue && item.remark ); const dietPlanDetails = filterednutrients.reduce((acc, param) => { acc[nutrientidpair[param.nutrientname]] = { value: parseFloat(param.nutrientvalue), // unitId: paraunitid[param.measurementname], remark: param.remark, }; return acc; }, {}); const finalValues = { date: getFormattedDate(), empId: patientid, dietPlanDetails: dietPlanDetails, }; // console.log('format ---->:', bodyMeasurementValues); console.log("filter values:", finalValues); try { const response = await axiosClientPrivate.post( "/patient-diet-plans", finalValues ); toast.success("Saved Successfully!", { position: "top-center", }); console.log("Response:", response.data); resetForm(); } catch (error) { console.log(values); console.error("Error:", error); } }, }); const bodyMeasurementFormik = useFormik({ enableReinitialize: true, initialValues: { // empId : patientid, parameters: bodyparams.map((item) => ({ measurementname: item.bmName, measuremenvalue: "", remark: "", })), }, // validationSchema: ExerciseMinuteValidationForm, // if you have a validation schema for this form onSubmit: async (values, { resetForm }) => { // console.log('not filter values:', values); const filteredMeasurement = values.parameters.filter( (item) => item.measuremenvalue && item.remark ); const bodyMeasurementValues = filteredMeasurement.reduce((acc, param) => { acc[paraid[param.measurementname]] = { value: parseFloat(param.measuremenvalue), // unitId: paraunitid[param.measurementname], remark: param.remark, }; return acc; }, {}); const finalValues = { date: getFormattedDate(), empId: patientid, bodyMeasurementValues: bodyMeasurementValues, }; // console.log('format ---->:', bodyMeasurementValues); console.log("filter values:", finalValues); try { const response = await axiosClientPrivate.post( "/patient-measurements", finalValues ); toast.success("Saved Successfully!", { position: "top-center", }); console.log("Response:", response.data); resetForm(); setFetchTrigger((prev) => prev + 1); } catch (error) { console.log(finalValues); console.error("Error:", error); } }, }); const switchForm = (formName, id) => { // alert("patient id "+`${id}`); // console.log("patient id ",id); setCurrentForm(formName); setPatientid(id); setOpenPopup(true); }; useEffect(() => { if (currentForm === "BodyMeasurementForm") { setTitle("Patient Measurement Plan"); } else if (currentForm === "PatientDietForm") { setTitle("Patient Diet Plan"); } else if (currentForm === "PatientInfoForm") { setTitle("Patient Master"); } }, [currentForm]); let formikProps; switch (currentForm) { case "ExerciseMinuteForm": formikProps = exerciseMinuteFormik; break; case "BodyMeasurementForm": formikProps = bodyMeasurementFormik; break; case "PatientDietForm": formikProps = patientDietFormik; break; default: break; } const formComponents = { ExerciseMinuteForm: ExerciseMinuteForm, BodyMeasurementForm: BodyMeasurementForm, PatientDietForm: PatientDietForm, }; const FormComponent = formComponents[currentForm]; // const useStyles = makeStyles((theme) => ({ // tableContainer: { // marginTop: theme.spacing(2), // Maintain margin consistency // overflowX: 'auto', // Enable horizontal scroll for responsive behavior // }, // table: { // minWidth: 650, // Set a minimum width for desktop layout // }, // tableCell: { // padding: theme.spacing(1), // Adjust cell padding for readability // textAlign: 'center', // Center text alignment // borderBottom: `1px solid ${theme.palette.divider}`, // Add subtle border for visual separation // fontSize: theme.typography.body1.fontSize, // Consistent font size // fontWeight: theme.typography.fontWeightMedium, // Slightly bold for emphasis // '&:nth-child(odd)': { // Alternate row background for better visual hierarchy // backgroundColor: theme.palette.background.default, // }, // '&:nth-child(even)': { // backgroundColor: theme.palette.background.paper, // }, // }, // })); // const classes = useStyles(); // const theme = useTheme(); const isSmallScreen = useMediaQuery(theme.breakpoints.down("md")); const isLargeScreen = useMediaQuery(theme.breakpoints.up("lg")); const isxLargeScreen = useMediaQuery(theme.breakpoints.up("xl")); return ( {/*RAJESH YADAV*/} {patientname} {bloodGroup} Patient Dashboard {currentComplain['patientMeasurement'] && currentComplain['patientMeasurement'].length > 0 ? ( currentComplain['patientMeasurement'].map((param, index) => ( )) ) : ( <> )} {/* Patient Information Row */} {isSmallScreen ? ( {Object.entries(patientinfo).map(([key, value]) => ( {key} {value} ))} ) : ( {/* Table header */} {Object.keys(patientinfo).map((key) => ( {key} ))} {/* Table content */} {Object.values(patientinfo).map((value, index) => ( {value} ))} )} {/*patient profile and patietn health data*/} Last Consultation Date : {currentComplain['date']} Last Complaints :{currentComplain['complain']} Remarks : {currentComplain['remark']} {/* Display an icon if no image is provided */} Patient Health Parameter {isLoading ? ( ) : hasCurrentMeasurementData ? ( currentComplain['patientMeasurement'].map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} Patient Daily Fitness {/**/} 0 // ? "flex-start" // : "center", alignItems: "center", gap: 3, }} > {isLoading ? ( ) : dailyParameter && dailyParameter.length > 0 ? ( dailyParameter.map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} {/* Display an icon if no image is provided */} Patient Exercise Plan {isLoading ? ( ) : hasCurrentExerciseData ? ( currentComplain['patientExercise'].map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} Patient Daily Exercise {/**/} 0 // ? "flex-start" // : "center", alignItems: "center", gap: 3, }} > {isLoading ? ( ) : dailyExercise && dailyExercise.length > 0 ? ( dailyExercise.map((item, index) => ( {item.label} {item.value} )) ) : ( No exercise available )} {/* Display an icon if no image is provided */} Patient Diet Plan {isLoading ? ( ) : hasCurrentDietData ? ( currentComplain['patientDiet'].map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} Patient Daily Diet {/**/} 0 ? "flex-start" : "center", alignItems: "center", gap: 3, }} > {daillyDiet && daillyDiet.length > 0 ? ( daillyDiet.map((item, index) => ( {item.label} {item.value} )) ) : ( No Diet available )} } aria-controls="panel1-content" id="panel1-header" // sx={{textAlign : 'center',display : 'flex',justifyContent : 'center'}} sx={{ borderRadius: "10px", backgroundColor: '#b2ebf2', display: 'flex', justifyContent: 'center', alignItems: 'center', '&:hover': { backgroundColor: '#80deea', }, '&.Mui-expanded': { backgroundColor: '#4dd0e1', }, '& .MuiAccordionSummary-content': { fontWeight: 'bold', justifyContent: 'center', // Center text horizontally }, }} > Consultation History {complaintHistory.map((item, index) => ( } aria-controls="panel1a-content" id="panel1a-header" sx={{ color : '#00796b', borderRadius: "10px", backgroundColor: '#b2ebf2', '&:hover': { backgroundColor: '#80deea', }, '&.Mui-expanded': { backgroundColor: '#4dd0e1', }, '& .MuiAccordionSummary-content': { fontWeight: 'bold', // justifyContent: 'center', direction : isSmallScreen ? "column" : "row", justifyContent : "space-around", alignItems : isSmallScreen ? "start" : "center", spacing : isSmallScreen ? 2 : 25 }, // direction : isSmallScreen ? "column" : "row", // justifyContent : "center", // alignItems : isSmallScreen ? "start" : "center", // spacing : isSmallScreen ? 2 : 25 }} > Last Consultation Date : {item.date} Last Complaints : {item.complaint} Remarks : {item.remark} {/* Display an icon if no image is provided */} Patient Health Parameter {item.patientMeasurement && item.patientMeasurement.length > 0 ? ( item.patientMeasurement.map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} {/* Display an icon if no image is provided */} Patient Exercise Plan {item.patientExercise && item.patientExercise.length > 0 ? ( item.patientExercise.map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} {/* Display an icon if no image is provided */} Patient Diet Plan {item.patientDiet && item.patientDiet.length > 0 ? ( item.patientDiet.map((item, index) => ( {item.label} {item.value} )) ) : ( No parameters available )} ))} Add Consultation {historyTitle} {measurementHistory.map((item, index) => ( {historyFormat(item.date)} {item.bodyMeasurementValues.map((measurement, subIndex) => ( {measurement.label}: {measurement.value} ))} {index < measurementHistory.length - 1 && ( )} ))} {/**/} ); }; export default DoctorDashboard;