import { Button, Select as DefaultSelect } from 'antd'; import getLocalStorageKey from 'api/browser/localstorage/get'; import setLocalStorageKey from 'api/browser/localstorage/set'; import { LOCALSTORAGE } from 'constants/localStorage'; import dayjs, { Dayjs } from 'dayjs'; import getTimeString from 'lib/getTimeString'; import React, { useCallback, useEffect, useState } from 'react'; import { connect, useSelector } from 'react-redux'; import { RouteComponentProps, withRouter } from 'react-router-dom'; import { bindActionCreators, Dispatch } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { GlobalTimeLoading, UpdateTimeInterval } from 'store/actions'; import { AppState } from 'store/reducers'; import AppActions from 'types/actions'; import { GlobalReducer } from 'types/reducer/globalTime'; import CustomDateTimeModal, { DateTimeRangeType } from '../CustomDateTimeModal'; import { getDefaultOption, getOptions, Time } from './config'; import RefreshText from './Refresh'; import { Container, Form, FormItem } from './styles'; const { Option } = DefaultSelect; function DateTimeSelection({ location, updateTimeInterval, globalTimeLoading, }: Props): JSX.Element { const [formSelector] = Form.useForm(); const params = new URLSearchParams(location.search); const searchStartTime = params.get('startTime'); const searchEndTime = params.get('endTime'); const localstorageStartTime = getLocalStorageKey('startTime'); const localstorageEndTime = getLocalStorageKey('endTime'); const getTime = useCallback((): [number, number] | undefined => { if (searchEndTime && searchStartTime) { const startDate = dayjs( new Date(parseInt(getTimeString(searchStartTime), 10)), ); const endDate = dayjs(new Date(parseInt(getTimeString(searchEndTime), 10))); return [startDate.toDate().getTime() || 0, endDate.toDate().getTime() || 0]; } if (localstorageStartTime && localstorageEndTime) { const startDate = dayjs(localstorageStartTime); const endDate = dayjs(localstorageEndTime); return [startDate.toDate().getTime() || 0, endDate.toDate().getTime() || 0]; } return undefined; }, [ localstorageEndTime, localstorageStartTime, searchEndTime, searchStartTime, ]); const [startTime, setStartTime] = useState(); const [endTime, setEndTime] = useState(); const [options, setOptions] = useState(getOptions(location.pathname)); const [refreshButtonHidden, setRefreshButtonHidden] = useState(false); const [customDateTimeVisible, setCustomDTPickerVisible] = useState( false, ); const { maxTime, minTime, selectedTime } = useSelector< AppState, GlobalReducer >((state) => state.globalTime); const getInputLabel = ( startTime?: Dayjs, endTime?: Dayjs, timeInterval: Time = '15min', ): string | Time => { if (startTime && endTime && timeInterval === 'custom') { const format = 'YYYY/MM/DD HH:mm'; const startString = startTime.format(format); const endString = endTime.format(format); return `${startString} - ${endString}`; } return timeInterval; }; const getDefaultTime = (pathName: string): Time => { const defaultSelectedOption = getDefaultOption(pathName); const routes = getLocalStorageKey(LOCALSTORAGE.METRICS_TIME_IN_DURATION); if (routes !== null) { const routesObject = JSON.parse(routes || '{}'); const selectedTime = routesObject[pathName]; if (selectedTime) { return selectedTime; } } return defaultSelectedOption; }; const [selectedTimeInterval, setSelectedTimeInterval] = useState