import { Button, Tabs, Typography } from 'antd'; import TextToolTip from 'components/TextToolTip'; import { GRAPH_TYPES } from 'container/NewDashboard/ComponentsSlider'; import { QueryBuilder } from 'container/QueryBuilder'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { useShareBuilderUrl } from 'hooks/queryBuilder/useShareBuilderUrl'; import useUrlQuery from 'hooks/useUrlQuery'; import { useCallback, useEffect, useState } from 'react'; import { connect, useSelector } from 'react-redux'; import { bindActionCreators, Dispatch } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { UpdateQuery, UpdateQueryProps, } from 'store/actions/dashboard/updateQuery'; import { AppState } from 'store/reducers'; import AppActions from 'types/actions'; import { Widgets } from 'types/api/dashboard/getAll'; import { Query } from 'types/api/queryBuilder/queryBuilderData'; import { EQueryType } from 'types/common/dashboard'; import DashboardReducer from 'types/reducer/dashboards'; import ClickHouseQueryContainer from './QueryBuilder/clickHouse'; import PromQLQueryContainer from './QueryBuilder/promQL'; function QuerySection({ updateQuery, selectedGraph }: QueryProps): JSX.Element { const { currentQuery, redirectWithQueryBuilderData } = useQueryBuilder(); const urlQuery = useUrlQuery(); const [isInit, setIsInit] = useState(false); const { dashboards, isLoadingQueryResult } = useSelector< AppState, DashboardReducer >((state) => state.dashboards); const [selectedDashboards] = dashboards; const { widgets } = selectedDashboards.data; const getWidget = useCallback(() => { const widgetId = urlQuery.get('widgetId'); return widgets?.find((e) => e.id === widgetId); }, [widgets, urlQuery]); const selectedWidget = getWidget() as Widgets; const { query } = selectedWidget; const { compositeQuery } = useShareBuilderUrl({ defaultValue: query }); useEffect(() => { if (!isInit && compositeQuery) { setIsInit(true); updateQuery({ updatedQuery: compositeQuery, widgetId: urlQuery.get('widgetId') || '', yAxisUnit: selectedWidget.yAxisUnit, }); } }, [isInit, compositeQuery, selectedWidget, urlQuery, updateQuery]); const handleStageQuery = useCallback( (updatedQuery: Query): void => { updateQuery({ updatedQuery, widgetId: urlQuery.get('widgetId') || '', yAxisUnit: selectedWidget.yAxisUnit, }); redirectWithQueryBuilderData(updatedQuery); }, [urlQuery, selectedWidget, updateQuery, redirectWithQueryBuilderData], ); const handleQueryCategoryChange = (qCategory: string): void => { const currentQueryType = qCategory as EQueryType; handleStageQuery({ ...currentQuery, queryType: currentQueryType }); }; const handleRunQuery = (): void => { handleStageQuery(currentQuery); }; const items = [ { key: EQueryType.QUERY_BUILDER, label: 'Query Builder', tab: Query Builder, children: , }, { key: EQueryType.CLICKHOUSE, label: 'ClickHouse Query', tab: ClickHouse Query, children: , }, { key: EQueryType.PROM, label: 'PromQL', tab: PromQL, children: , }, ]; return ( } items={items} /> ); } interface DispatchProps { updateQuery: ( props: UpdateQueryProps, ) => (dispatch: Dispatch) => void; } const mapDispatchToProps = ( dispatch: ThunkDispatch, ): DispatchProps => ({ updateQuery: bindActionCreators(UpdateQuery, dispatch), }); interface QueryProps extends DispatchProps { selectedGraph: GRAPH_TYPES; } export default connect(null, mapDispatchToProps)(QuerySection);