TabUIEffect.js
Mon Dec 02 2024 15:21:19 GMT+0000 (Coordinated Universal Time)
Saved by @khainguyenhm
import React, { useEffect } from 'react';
import {
useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState,
} from 'recoil';
import _ from 'lodash';
import { KEY_RECOIL } from '../../../../ConstantsV2/aiConstants';
import { DEVICE_TAB_TYPES } from '../StripsManagementV2/constants';
import {
activeTabState,
controlModalState,
isActiveTabState,
pickDateActionState,
pickedBookmarkDateState,
pickedEndDateState,
pickedStartDateState,
selectedStripState,
} from '../Recoil';
import { TPickDateAction } from '../Recoil/model';
import { controlHrSummaryModalState } from './recoilBeat';
import { deviceEventDataState, emptySelectedKeyState, eventStripsDataState } from './recoilStrips';
// Custom hook to handle date pick actions
const usePickDateAction = (keyRecoil, pickedStartDate, pickedEndDate, pickedBookmarkDate) => {
const setPickDateAction = useSetRecoilState(pickDateActionState(keyRecoil));
useEffect(() => {
if (pickedStartDate && !pickedEndDate) {
setPickDateAction(TPickDateAction.END);
} else if (pickedStartDate && pickedEndDate) {
setPickDateAction(TPickDateAction.NONE);
} else if (!pickedStartDate && pickedEndDate) {
setPickDateAction(TPickDateAction.NONE);
}
}, [pickedStartDate, pickedEndDate]);
useEffect(() => {
if (pickedBookmarkDate) {
setPickDateAction(TPickDateAction.NONE);
}
}, [pickedBookmarkDate]);
return setPickDateAction;
};
// Custom hook to handle modal reset when changing tab or strip
const useModalReset = (selectedStrip, controlModal, resetControlModal, resetControlHrSummaryModal, isActiveTab) => {
useEffect(() => {
if (!controlModal.isShowNewEvents && !controlModal.isShowAddNewEvent) {
resetControlModal();
}
}, [selectedStrip]);
useEffect(() => {
if (!isActiveTab) {
resetControlModal();
resetControlHrSummaryModal();
}
}, [isActiveTab]);
};
// Base component to render the correct tab
const TabUIEffect = ({ keyRecoil, tab }) => {
switch (tab) {
case '1':
return <TabBeatUIEffect keyRecoil={keyRecoil} />;
case '2':
return <TabECGEventUIEffect keyRecoil={keyRecoil} />;
case '3':
return <TabStripManagermentUIEffect keyRecoil={keyRecoil} />;
case '4':
return <TabTeamplatesUIEffect keyRecoil={keyRecoil} />;
case '5':
return <TabHRSummaryUIEffect keyRecoil={keyRecoil} />;
default:
return null;
}
};
// TabBeatUIEffect component
const TabBeatUIEffect = ({ keyRecoil }) => {
const [pickedStartDate, setPickedStartDate] = useRecoilState(pickedStartDateState(keyRecoil));
const [pickedEndDate, setPickedEndDate] = useRecoilState(pickedEndDateState(keyRecoil));
const [pickedBookmarkDate, setPickedBookmarkDate] = useRecoilState(pickedBookmarkDateState(keyRecoil));
const controlModal = useRecoilValue(controlModalState(keyRecoil));
const resetControlModal = useResetRecoilState(controlModalState(keyRecoil));
const resetControlHrSummaryModal = useResetRecoilState(controlHrSummaryModalState);
const selectedStrip = useRecoilValue(selectedStripState(keyRecoil));
const isActiveTab = useRecoilValue(isActiveTabState(keyRecoil));
// Handle pick date action updates
const setPickDateAction = usePickDateAction(keyRecoil, pickedStartDate, pickedEndDate, pickedBookmarkDate);
// Reset modal when strip or tab changes
useModalReset(selectedStrip, controlModal, resetControlModal, resetControlHrSummaryModal, isActiveTab);
useEffect(() => {
if (Object.keys(controlModal).length > 1) {
if (!(controlModal.isShowChangeDurationButtonType && controlModal.isShowAddNewEvent && controlModal.isShowAddEcgBookmark)) {
setPickedStartDate(null);
setPickedEndDate(null);
setPickedBookmarkDate(null);
setPickDateAction(TPickDateAction.NONE);
}
if (controlModal.isShowChangeDurationButtonType || controlModal.isShowAddNewEvent) {
setPickDateAction(TPickDateAction.START);
}
if (controlModal.isShowAddEcgBookmark) {
setPickDateAction(TPickDateAction.BOOKMARK);
}
}
}, [controlModal]);
return null;
};
// Other Tab Components (ECG, Strip Management, Templates, HR Summary) follow the same structure
// TabStripManagermentUIEffect component
const TabStripManagermentUIEffect = ({ keyRecoil }) => {
const activeButton = useRecoilValue(activeTabState(keyRecoil));
const eventStripsData = useRecoilValue(eventStripsDataState(keyRecoil));
const deviceEventData = useRecoilValue(deviceEventDataState(keyRecoil));
const setEmptySelectedKey = useSetRecoilState(emptySelectedKeyState(keyRecoil));
const setEmptySelectedKeyDevice = useSetRecoilState(emptySelectedKeyState(keyRecoil));
useEffect(() => {
const isDeviceEvent = DEVICE_TAB_TYPES.includes(activeButton);
const config = { isEmptyTab: false };
if (isDeviceEvent) {
const filteredData = _.filter(deviceEventData?.[activeButton], x => x.filterType === activeButton);
_.assign(config, { isEmptyTab: _.isEmpty(filteredData) });
setEmptySelectedKeyDevice(config);
}
if (_.isEmpty(eventStripsData)) {
_.assign(config, { isEmptyAutoEvents: true });
}
setEmptySelectedKey(config);
}, [activeButton, eventStripsData, deviceEventData]);
return null;
};
export default TabUIEffect;



Comments