import { PANEL_TYPES } from 'constants/queryBuilder'; import { useGetQueryRange } from 'hooks/queryBuilder/useGetQueryRange'; import { useStepInterval } from 'hooks/queryBuilder/useStepInterval'; import { getDashboardVariables } from 'lib/dashbaordVariables/getDashboardVariables'; import getChartData from 'lib/getChartData'; import isEmpty from 'lodash-es/isEmpty'; import { useDashboard } from 'providers/Dashboard/Dashboard'; import { memo, useMemo, useState } from 'react'; import { useInView } from 'react-intersection-observer'; import { useDispatch, useSelector } from 'react-redux'; import { UpdateTimeInterval } from 'store/actions'; import { AppState } from 'store/reducers'; import { GlobalReducer } from 'types/reducer/globalTime'; import EmptyWidget from '../EmptyWidget'; import { MenuItemKeys } from '../WidgetHeader/contants'; import { GridCardGraphProps } from './types'; import WidgetGraphComponent from './WidgetGraphComponent'; function GridCardGraph({ widget, name, onClickHandler, headerMenuList = [MenuItemKeys.View], isQueryEnabled, threshold, }: GridCardGraphProps): JSX.Element { const dispatch = useDispatch(); const [errorMessage, setErrorMessage] = useState(); const onDragSelect = (start: number, end: number): void => { const startTimestamp = Math.trunc(start); const endTimestamp = Math.trunc(end); if (startTimestamp !== endTimestamp) { dispatch(UpdateTimeInterval('custom', [startTimestamp, endTimestamp])); } }; const { ref: graphRef, inView: isGraphVisible } = useInView({ threshold: 0, triggerOnce: true, initialInView: false, }); const { selectedDashboard } = useDashboard(); const { minTime, maxTime, selectedTime: globalSelectedInterval } = useSelector< AppState, GlobalReducer >((state) => state.globalTime); const updatedQuery = useStepInterval(widget?.query); const isEmptyWidget = widget?.id === PANEL_TYPES.EMPTY_WIDGET || isEmpty(widget); const queryResponse = useGetQueryRange( { selectedTime: widget?.timePreferance, graphType: widget?.panelTypes, query: updatedQuery, globalSelectedInterval, variables: getDashboardVariables(selectedDashboard?.data.variables), }, { queryKey: [ maxTime, minTime, globalSelectedInterval, selectedDashboard?.data?.variables, widget?.query, widget?.panelTypes, widget.timePreferance, ], keepPreviousData: true, enabled: isGraphVisible && !isEmptyWidget && isQueryEnabled, refetchOnMount: false, onError: (error) => { setErrorMessage(error.message); }, }, ); const chartData = useMemo( () => getChartData({ queryData: [ { queryData: queryResponse?.data?.payload?.data?.result || [], }, ], createDataset: undefined, isWarningLimit: widget.panelTypes === PANEL_TYPES.TIME_SERIES, }), [queryResponse, widget?.panelTypes], ); const isEmptyLayout = widget?.id === PANEL_TYPES.EMPTY_WIDGET; const menuList = widget.panelTypes === PANEL_TYPES.TABLE ? headerMenuList.filter((menu) => menu !== MenuItemKeys.CreateAlerts) : headerMenuList; return ( {isEmptyLayout && } ); } GridCardGraph.defaultProps = { onDragSelect: undefined, onClickHandler: undefined, isQueryEnabled: true, threshold: undefined, headerMenuList: [MenuItemKeys.View], }; export default memo(GridCardGraph);