import { Button, Tabs, Typography } from 'antd'; import TextToolTip from 'components/TextToolTip'; import { GRAPH_TYPES } from 'container/NewDashboard/ComponentsSlider'; import { WidgetGraphProps } from 'container/NewWidget/types'; import { QueryBuilder } from 'container/QueryBuilder'; import { useGetWidgetQueryRange } from 'hooks/queryBuilder/useGetWidgetQueryRange'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { useShareBuilderUrl } from 'hooks/queryBuilder/useShareBuilderUrl'; import useUrlQuery from 'hooks/useUrlQuery'; import { useCallback } 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 AppReducer from 'types/reducer/app'; import DashboardReducer from 'types/reducer/dashboards'; import ClickHouseQueryContainer from './QueryBuilder/clickHouse'; import PromQLQueryContainer from './QueryBuilder/promQL'; function QuerySection({ updateQuery, selectedGraph, selectedTime, }: QueryProps): JSX.Element { const { currentQuery, redirectWithQueryBuilderData } = useQueryBuilder(); const urlQuery = useUrlQuery(); const { featureResponse } = useSelector( (state) => state.app, ); const { dashboards } = useSelector( (state) => state.dashboards, ); const getWidgetQueryRange = useGetWidgetQueryRange({ graphType: selectedGraph, selectedTime: selectedTime.enum, }); 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; useShareBuilderUrl(query); const handleStageQuery = useCallback( (updatedQuery: Query): void => { updateQuery({ widgetId: urlQuery.get('widgetId') || '', yAxisUnit: selectedWidget.yAxisUnit, }); redirectWithQueryBuilderData(updatedQuery); }, [urlQuery, selectedWidget, updateQuery, redirectWithQueryBuilderData], ); const handleQueryCategoryChange = (qCategory: string): void => { const currentQueryType = qCategory as EQueryType; featureResponse.refetch().then(() => { 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; selectedTime: WidgetGraphProps['selectedTime']; } export default connect(null, mapDispatchToProps)(QuerySection);