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 { 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(query.queryName, [ { func: queryAggregation.spaceAggregation || 'count', arg: queryAggregation.metricName || '', }, ]); // eslint-disable-next-line react-hooks/exhaustive-deps }, [ queryAggregation.spaceAggregation, queryAggregation.metricName, query.queryName, ]); 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 (
{!isHistogram && (
Learn more about temporal aggregation } >
AGGREGATE WITHIN TIME SERIES{' '}
{showAggregationInterval && (
Set the time interval for aggregation
Learn about step intervals
} placement="top" >
every
)}
Learn more about spatial aggregation } >
AGGREGATE ACROSS TIME SERIES
by
)} {isHistogram && (
by
Set the time interval for aggregation
Learn about step intervals
} placement="top" >
every
)} ); }); export default MetricsAggregateSection;