import './MetricsAggregateSection.styles.scss'; import { Tooltip } from 'antd'; import cx from 'classnames'; import InputWithLabel from 'components/InputWithLabel/InputWithLabel'; import { ATTRIBUTE_TYPES, PANEL_TYPES } from 'constants/queryBuilder'; import SpaceAggregationOptions from 'container/QueryBuilder/components/SpaceAggregationOptions/SpaceAggregationOptions'; import { GroupByFilter, OperatorsSelect } from 'container/QueryBuilder/filters'; import { useQueryOperations } from 'hooks/queryBuilder/useQueryBuilderOperations'; import { Info } from 'lucide-react'; import { memo, useCallback, useEffect, useMemo } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; import { MetricAggregation } from 'types/api/v5/queryRange'; import { useQueryBuilderV2Context } from '../../QueryBuilderV2Context'; const MetricsAggregateSection = memo(function MetricsAggregateSection({ query, index, version, panelType, }: { query: IBuilderQuery; index: number; version: string; panelType: PANEL_TYPES | null; }): JSX.Element { const { setAggregationOptions } = useQueryBuilderV2Context(); const { operators, spaceAggregationOptions, handleChangeQueryData, handleChangeOperator, handleSpaceAggregationChange, } = useQueryOperations({ index, query, entityVersion: version, }); // this function is only relevant for metrics and now operators are part of aggregations const queryAggregation = useMemo( () => query.aggregations?.[0] as MetricAggregation, [query.aggregations], ); const isHistogram = useMemo( () => query.aggregateAttribute?.type === ATTRIBUTE_TYPES.HISTOGRAM, [query.aggregateAttribute?.type], ); useEffect(() => { setAggregationOptions([ { func: queryAggregation.spaceAggregation || 'count', arg: queryAggregation.metricName || '', }, ]); }, [ queryAggregation.spaceAggregation, queryAggregation.metricName, setAggregationOptions, query, ]); const handleChangeGroupByKeys = useCallback( (value: IBuilderQuery['groupBy']) => { handleChangeQueryData('groupBy', value); }, [handleChangeQueryData], ); const handleChangeAggregateEvery = useCallback( (value: string) => { handleChangeQueryData('stepInterval', Number(value)); }, [handleChangeQueryData], ); const showAggregationInterval = useMemo(() => { // eslint-disable-next-line sonarjs/prefer-single-boolean-return if (panelType === PANEL_TYPES.VALUE) { return false; } return true; }, [panelType]); const disableOperatorSelector = !queryAggregation.metricName || queryAggregation.metricName === ''; return (