import { AutoComplete, Col, Input, Row, Select, Spin } from 'antd'; import { getMetricName } from 'api/metrics/getMetricName'; import { PANEL_TYPES } from 'constants/queryBuilder'; import { GRAPH_TYPES } from 'container/NewDashboard/ComponentsSlider'; import React, { useEffect, useState } from 'react'; import { IMetricsBuilderQuery } from 'types/api/dashboard/getAll'; import { EReduceOperator } from 'types/common/dashboard'; import { AggregateFunctions } from '../Options'; import QueryHeader from '../QueryHeader'; import MetricTagKeyFilter from './MetricTagKeyFilter'; import { IOption } from './MetricTagKeyFilter/types'; import { GetTagKeys } from './MetricTagKeyFilter/utils'; import { IQueryBuilderQueryHandleChange } from './types'; const { Option } = Select; interface IMetricsBuilderProps { queryIndex: number | string; selectedGraph: GRAPH_TYPES; queryData: IMetricsBuilderQuery; handleQueryChange: (args: IQueryBuilderQueryHandleChange) => void; } function MetricsBuilder({ queryIndex, selectedGraph, queryData, handleQueryChange, }: IMetricsBuilderProps): JSX.Element { const [groupByOptions, setGroupByOptions] = useState([]); const [metricName, setMetricName] = useState( queryData.metricName, ); const [metricNameList, setMetricNameList] = useState([]); const [metricNameLoading, setMetricNameLoading] = useState(false); const handleMetricNameSelect = (e: string): void => { handleQueryChange({ queryIndex, metricName: e }); setMetricName(e); }; const handleMetricNameSearch = async (searchQuery = ''): Promise => { handleMetricNameSelect(searchQuery); setMetricNameList([]); setMetricNameLoading(true); const { payload } = await getMetricName(searchQuery); setMetricNameLoading(false); if (!payload || !payload.data) { return; } setMetricNameList(payload.data); }; const [aggregateFunctionList, setAggregateFunctionList] = useState( AggregateFunctions, ); const handleAggregateFunctionsSearch = (searchQuery = ''): void => { setAggregateFunctionList( AggregateFunctions.filter(({ label }) => label.includes(searchQuery.toUpperCase()), ) || [], ); }; useEffect(() => { GetTagKeys(metricName || '').then((tagKeys) => { setGroupByOptions(tagKeys); }); }, [metricName]); return ( handleQueryChange({ queryIndex, toggleDisable: true }) } onDelete={(): void => { handleQueryChange({ queryIndex, toggleDelete: true }); }} >
: null} options={metricNameList.map((option) => ({ label: option, value: option, }))} defaultValue={queryData.metricName} value={metricName} onSelect={handleMetricNameSelect} /> handleQueryChange({ queryIndex, tagFilters: updatedTagFilters }) } /> {selectedGraph === PANEL_TYPES.TIME_SERIES ? ( <> {' '} { handleQueryChange({ queryIndex, legend: e.target.value }); }} size="middle" defaultValue={queryData.legend} addonBefore="Legend Format" />
); } export default MetricsBuilder;