// mui
import {
Box,
Tabs,
Tab,
Grid,
Card,
Stack,
Typography,
TableHead,
TableCell,
TableBody,
Table,
TableRow,
MenuItem,
Skeleton,
List,
ListSubheader,
ListItem,
ListItemText,
ListItemButton,
Divider,
} from '@mui/material';
import { styled } from '@mui/material/styles';
import { Download as DownloadIcon, Circle as CircleIcon, TableView } from '@mui/icons-material';
// components
import Page from '../../components/Page';
// utils
import { useState, SyntheticEvent, useContext, useEffect } from 'react';
import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate';
import { useNavigate, useParams } from 'react-router-dom';
import axios from '../../utils/axios';
import { fDateBirth, fDateSuffix, fDateTime } from '../../utils/formatTime';
import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';
import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem';
import {
Timeline,
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineSeparator,
} from '@mui/lab';
import TableMoreMenu from '../../components/table/TableMoreMenu';
import Label from '../../components/Label';
import { fSplit } from '../../utils/formatNumber';
interface TabPanelProps {
children?: React.ReactNode;
index: number;
value: number;
}
function TabPanel(props: TabPanelProps) {
const { children, value, index, ...other } = props;
return (
{value === index && children}
);
}
function a11yProps(index: number) {
return {
id: `simple-tab-${index}`,
'aria-controls': `simple-tabpanel-${index}`,
};
}
interface StyledTabsProps {
children?: React.ReactNode;
value: number;
onChange: (event: React.SyntheticEvent, newValue: number) => void;
}
const StyledTabs = styled((props: StyledTabsProps) => )({
'& .MuiTabs-indicator': {
display: 'flex',
justifyContent: 'center',
backgroundColor: '19BBBB',
},
'& .MuiTabs-indicatorSpan': {
maxWidth: 40,
width: '100%',
backgroundColor: '#635ee7',
},
});
interface StyledTabProps {
label: string;
icon?: string | React.ReactElement;
}
const StyledTab = styled((props: StyledTabProps) => )(
({ theme }) => ({
fontWeight: 600,
fontSize: '14px',
color: theme.palette.grey[600],
maxWidth: '15%',
flex: 1,
margin: '0 !important',
'&.Mui-selected': {
color: theme.palette.grey[900],
},
'&:hover': {
color: theme.palette.grey[900],
opacity: 1,
},
})
);
type ServiceMonitoringProps = {
companyName: string;
serviceCode: string;
memberId: string;
fullName: string;
dateOfBirth: string;
phoneNumber: string;
email: string;
symptoms: string;
sign: string;
mainDiagnose: string;
comparativeDiagnosis: string;
serviceName: string;
benefits: {
amountIncurred: number;
amountApproved: number;
amountNotAprroved: number;
excessPaid: number;
description: string;
name: string;
}[];
benefitTotal: {
totalIncurred: number;
totalApprove: number;
totalNotApprove: number;
totalExcess: number;
};
hospital: string;
admissionDate: string;
dischargeDate: string;
dailyMonitorings: Record<
string,
Array<{
time: string;
status: string;
subject: string;
bodyTemperature: string;
sistole: string;
diastole: string;
respirationRate: string;
analysis: string;
complaints: string;
plans: {
type: number;
plan: string;
}[];
}>
>;
laboratoriumResults: Record<
string,
Array<{
code: string;
date: string;
examination: string;
location: string;
}>
>;
};
export default function ServiceMonitoring() {
const navigate = useNavigate();
const controller = new AbortController();
const [value, setValue] = useState(0);
const [loading, setLoading] = useState(false);
const handleChange = (event: SyntheticEvent, newValue: number) => {
setValue(newValue);
};
const [data, setData] = useState(null);
const { corporateValue } = useContext(UserCurrentCorporateContext);
const { memberId, requestLogId } = useParams();
useEffect(() => {
(async () => {
try {
setLoading(true);
const response = await axios.get(`${corporateValue}/service-monitoring/${requestLogId}`, {
signal: controller.signal,
});
setData(response.data.data);
if (response.data.data.serviceCode !== 'IP') {
setValue(1);
}
} catch (error: any) {
console.error('Error fetching data:', error.message);
} finally {
setLoading(false);
}
})();
return () => {
controller.abort();
};
}, [corporateValue]);
return (
navigate(`/alarm-center/member/${memberId}}`)}
sx={{ cursor: 'pointer' }}
/>
Service Monitoring
{/* Item 1 */}
{loading ? : 'Employee Profile'}
{loading ? : 'Company Name'}
{loading ? (
) : data && data.companyName ? (
data.companyName
) : (
'-'
)}
{loading ? : 'Member ID'}
{loading ? (
) : data && data.memberId ? (
data.memberId
) : (
'-'
)}
{loading ? : 'Full Name'}
{loading ? (
) : data && data.fullName ? (
data.fullName
) : (
'-'
)}
{loading ? : 'Date of Birth'}
{loading ? (
) : data && data.dateOfBirth ? (
fDateBirth(data.dateOfBirth)
) : (
'-'
)}
{loading ? : 'Phone Number'}
{loading ? (
) : data && data.phoneNumber ? (
data.phoneNumber
) : (
'-'
)}
{loading ? : 'Email'}
{loading ? (
) : data && data.email ? (
data.email
) : (
'-'
)}
{loading ? : 'Diagnose Summary'}
{loading ? : 'Symptoms'}
{loading ? (
) : data && data.symptoms ? (
data.symptoms
) : (
'-'
)}
{loading ? : 'Sign'}
{loading ? (
) : data && data.sign ? (
data.sign
) : (
'-'
)}
{loading ? : 'Main Diagnose'}
{loading ? (
) : data && data.mainDiagnose ? (
data.mainDiagnose
) : (
'-'
)}
{loading ? (
) : (
'Comparative Diagnosis'
)}
{loading ? (
) : data && data.comparativeDiagnosis ? (
data.comparativeDiagnosis
) : (
'-'
)}
{loading ? : 'Services'}
{loading ? : 'Service Name'}
{loading ? (
) : data && data.serviceName ? (
data.serviceName
) : (
'-'
)}
{loading ? : 'Benefits'}
{loading ? (
) : data && data.benefits && data.benefits.length > 0 ? (
data.benefits.map((benefitValue, benefitIndex) => (
{benefitIndex + 1 + `. ` + benefitValue.name}
}
key={benefitIndex}
>
Amount Incurred : Rp. {fSplit(benefitValue.amountApproved)}
Amount Approved : Rp. {fSplit(benefitValue.amountApproved)}
Amount Not Approved : Rp. {fSplit(benefitValue.amountNotAprroved)}
Excess Paid : Rp. {fSplit(benefitValue.excessPaid)}
Description : Rp. {fSplit(benefitValue.description)}
))
) : (
-
)}
{loading ? : 'Benefits Total'}
{loading ? : 'Total Incurred : Rp. '}
{loading ? (
) : data && data.benefitTotal ? (
fSplit(data.benefitTotal.totalIncurred)
) : (
'-'
)}
{loading ? : 'Total Approve : Rp. '}
{loading ? (
) : data && data.benefitTotal ? (
fSplit(data.benefitTotal.totalApprove)
) : (
'-'
)}
{loading ? : 'Total Not Approve : Rp.'}
{loading ? (
) : data && data.benefitTotal ? (
fSplit(data.benefitTotal.totalNotApprove)
) : (
'-'
)}
{loading ? : 'Total Excess : Rp.'}
{loading ? (
) : data && data.benefitTotal ? (
fSplit(data.benefitTotal.totalExcess)
) : (
'-'
)}
{loading ? : 'Hospital'}
{loading ? (
) : data && data.hospital ? (
data.hospital
) : (
'-'
)}
{loading ? : 'Admission Date'}
{loading ? (
) : data && data.admissionDate ? (
fDateSuffix(data.admissionDate)
) : (
'-'
)}
{loading ? : 'Discharge Date'}
{loading ? (
) : data && data.dischargeDate ? (
fDateSuffix(data.dischargeDate)
) : (
'-'
)}
{/*
Benefit Item
*/}
{loading ? (
) : (
{data && data.dailyMonitorings ? (
{data &&
data.dailyMonitorings &&
Object.keys(data.dailyMonitorings).length > 0 &&
Object.keys(data.dailyMonitorings).map((date, dateIndex) => (
{date ? date : '-'}
{data.dailyMonitorings[date].map(
(dailyMonitoring, dailyMonitoringIndex) => (
Subject
{dailyMonitoring.subject
? dailyMonitoring.subject
: '-'}
Objektif
Body Temperature
{dailyMonitoring.bodyTemperature
? dailyMonitoring.bodyTemperature
: '-'}
Sistole
{dailyMonitoring.sistole
? dailyMonitoring.sistole
: '-'}
Diastole
{dailyMonitoring.diastole
? dailyMonitoring.diastole
: '-'}
Respiration Rate
{dailyMonitoring.respirationRate
? dailyMonitoring.respirationRate
: '-'}
Complaints
{dailyMonitoring.complaints
? dailyMonitoring.complaints
: '-'}
Analysis
{dailyMonitoring.analysis
? dailyMonitoring.analysis
: '-'}
Perencanaan
{data.dailyMonitorings ? (
{dailyMonitoring.plans.length > 0 &&
dailyMonitoring.plans.map((plan, planIndex) => (
- {plan.plan}
))}
) : (
'-'
)}
)
)}
))}
) : (
No Data Found
)}
{data &&
data.laboratoriumResults &&
Object.keys(data.laboratoriumResults).length > 0 ? (
Object.keys(data.dailyMonitorings).map((date, dateIndex) => (
{date ? date : '-'}
{data.laboratoriumResults[date].map(
(laboratoriumResult, laboratoriumResultIndex) => (
Date
Examination
Location
{/* */}
{laboratoriumResult.examination
? laboratoriumResult.examination
: '-'}
{laboratoriumResult.location
? laboratoriumResult.location
: '-'}
{/*
>
}
/> */}
)
)}
))
) : (
No Data Found
)}
)}
);
}