/* eslint-disable react/jsx-props-no-spreading */ import './RangePickerModal.styles.scss'; import { DatePicker } from 'antd'; import { DATE_TIME_FORMATS } from 'constants/dateTimeFormats'; import { DateTimeRangeType } from 'container/TopNav/CustomDateTimeModal'; import { CustomTimeType, LexicalContext, Time, } from 'container/TopNav/DateTimeSelectionV2/config'; import dayjs, { Dayjs } from 'dayjs'; import { useTimezone } from 'providers/Timezone'; import { Dispatch, SetStateAction, useMemo } from 'react'; import { useSelector } from 'react-redux'; import { AppState } from 'store/reducers'; import { GlobalReducer } from 'types/reducer/globalTime'; interface RangePickerModalProps { setCustomDTPickerVisible: Dispatch>; setIsOpen: Dispatch>; onCustomDateHandler: ( dateTimeRange: DateTimeRangeType, lexicalContext?: LexicalContext | undefined, ) => void; selectedTime: string; onTimeChange?: ( interval: Time | CustomTimeType, dateTimeRange?: [number, number], ) => void; } function RangePickerModal(props: RangePickerModalProps): JSX.Element { const { setCustomDTPickerVisible, setIsOpen, onCustomDateHandler, selectedTime, onTimeChange, } = props; const { RangePicker } = DatePicker; const { maxTime, minTime } = useSelector( (state) => state.globalTime, ); // Using any type here because antd's DatePicker expects its own internal Dayjs type // which conflicts with our project's Dayjs type that has additional plugins (tz, utc etc). // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types const disabledDate = (current: any): boolean => { const currentDay = dayjs(current); return currentDay.isAfter(dayjs()); }; const onPopoverClose = (visible: boolean): void => { if (!visible) { setCustomDTPickerVisible(false); } setIsOpen(visible); }; const onModalOkHandler = (date_time: any): void => { if (date_time?.[1]) { onPopoverClose(false); } onCustomDateHandler(date_time, LexicalContext.CUSTOM_DATE_PICKER); }; const { timezone } = useTimezone(); const rangeValue: [Dayjs, Dayjs] = useMemo( () => [ dayjs(minTime / 1000_000).tz(timezone.value), dayjs(maxTime / 1000_000).tz(timezone.value), ], [maxTime, minTime, timezone.value], ); return (
date.tz(timezone.value).format(DATE_TIME_FORMATS.ISO_DATETIME) } onOk={onModalOkHandler} {...(selectedTime === 'custom' && !onTimeChange && { value: rangeValue, })} // use default value if onTimeChange is provided {...(selectedTime === 'custom' && onTimeChange && { defaultValue: rangeValue, })} />
); } RangePickerModal.defaultProps = { onTimeChange: undefined, }; export default RangePickerModal;