From 8879f2d087e8d25eacbd5f62082fdc04955fe8b0 Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Wed, 25 Sep 2019 15:23:08 +0300 Subject: [PATCH 1/7] Prevent disabling of the only metrics agg --- .../vis/editors/default/components/agg.tsx | 4 ++++ .../vis/editors/default/components/agg_group.tsx | 10 +++++++++- .../default/components/agg_group_helper.tsx | 14 +++++++++++++- .../ui/public/vis/editors/default/sidebar.js | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg.tsx b/src/legacy/ui/public/vis/editors/default/components/agg.tsx index f15945e689926..3b57fbc3ef705 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg.tsx @@ -37,6 +37,7 @@ export interface DefaultEditorAggProps extends DefaultEditorAggCommonProps { aggIndex: number; aggIsTooLow: boolean; dragHandleProps: {} | null; + canBeDisabled: boolean; isDraggable: boolean; isLastBucket: boolean; isRemovable: boolean; @@ -49,6 +50,7 @@ function DefaultEditorAgg({ dragHandleProps, formIsTouched, groupName, + canBeDisabled, isDraggable, isLastBucket, isRemovable, @@ -142,6 +144,7 @@ function DefaultEditorAgg({ actionIcons.push({ id: 'disableAggregation', color: 'text', + disabled: !canBeDisabled, type: 'eye', onClick: () => onToggleEnableAgg(agg, false), tooltip: i18n.translate('common.ui.vis.editors.agg.disableAggButtonTooltip', { @@ -205,6 +208,7 @@ function DefaultEditorAgg({ return ( 1} isLastBucket={groupName === AggGroupNames.Buckets && index === group.length - 1} isRemovable={isAggRemovable(agg, group)} + canBeDisabled={ + groupName === AggGroupNames.Metrics ? canAggBeDisabled(agg, group) : true + } lastParentPipelineAggTitle={lastParentPipelineAggTitle} metricAggs={metricAggs} state={state} diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx index 5bfb2cdfb48d8..65192ca6df4d7 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx @@ -33,6 +33,18 @@ const isAggRemovable = (agg: AggConfig, group: AggConfig[]) => { return metricCount > agg.schema.min; }; +const canAggBeDisabled = (agg: AggConfig, group: AggConfig[]) => { + const enabledAggsCount = reduce( + group, + (count, aggregation: AggConfig) => { + return aggregation.enabled ? ++count : count; + }, + 0 + ); + + return enabledAggsCount !== 1; +}; + const calcAggIsTooLow = (agg: AggConfig, aggIndex: number, group: AggConfig[]) => { if (!agg.schema.mustBeFirst) { return false; @@ -59,4 +71,4 @@ function isInvalidAggsTouched(aggsState: AggsState) { return invalidAggs.every(agg => agg.touched); } -export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched }; +export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, canAggBeDisabled }; diff --git a/src/legacy/ui/public/vis/editors/default/sidebar.js b/src/legacy/ui/public/vis/editors/default/sidebar.js index ee33e0093f42b..8acf07783e86b 100644 --- a/src/legacy/ui/public/vis/editors/default/sidebar.js +++ b/src/legacy/ui/public/vis/editors/default/sidebar.js @@ -24,6 +24,7 @@ import 'ui/directives/css_truncate'; import { uiModules } from '../../../modules'; import sidebarTemplate from './sidebar.html'; import { move } from '../../../utils/collection'; +import { AggGroupNames } from './agg_groups'; uiModules.get('app/visualize').directive('visEditorSidebar', function () { return { @@ -76,6 +77,21 @@ uiModules.get('app/visualize').directive('visEditorSidebar', function () { } aggs.splice(index, 1); + + if (agg.schema.group === AggGroupNames.Metrics) { + const metrics = $scope.state.aggs.bySchemaGroup(AggGroupNames.Metrics); + const enabledAggsCount = _.reduce( + metrics, + (count, aggregation) => { + return aggregation.enabled ? ++count : count; + }, + 0 + ); + + if (!enabledAggsCount && metrics.length) { + metrics[0].enabled = true; + } + } }; $scope.onToggleEnableAgg = (agg, isEnable) => { From 7d927c60548887ea6c1f4896d3a93d04109ab4eb Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Thu, 26 Sep 2019 11:44:28 +0300 Subject: [PATCH 2/7] Refactoring --- .../editors/default/components/agg.test.tsx | 1 + .../vis/editors/default/components/agg.tsx | 6 ++-- .../editors/default/components/agg_group.tsx | 14 ++++++---- .../default/components/agg_group_helper.tsx | 28 +++++++------------ 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx b/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx index 8f49c93b5c152..e2a9b931da9d5 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx @@ -61,6 +61,7 @@ describe('DefaultEditorAgg component', () => { dragHandleProps: null, formIsTouched: false, groupName: AggGroupNames.Metrics, + isDisabled: false, isDraggable: false, isLastBucket: false, isRemovable: false, diff --git a/src/legacy/ui/public/vis/editors/default/components/agg.tsx b/src/legacy/ui/public/vis/editors/default/components/agg.tsx index 3b57fbc3ef705..6cb4c3c62f73c 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg.tsx @@ -37,7 +37,7 @@ export interface DefaultEditorAggProps extends DefaultEditorAggCommonProps { aggIndex: number; aggIsTooLow: boolean; dragHandleProps: {} | null; - canBeDisabled: boolean; + isDisabled: boolean; isDraggable: boolean; isLastBucket: boolean; isRemovable: boolean; @@ -50,7 +50,7 @@ function DefaultEditorAgg({ dragHandleProps, formIsTouched, groupName, - canBeDisabled, + isDisabled, isDraggable, isLastBucket, isRemovable, @@ -144,7 +144,7 @@ function DefaultEditorAgg({ actionIcons.push({ id: 'disableAggregation', color: 'text', - disabled: !canBeDisabled, + disabled: isDisabled, type: 'eye', onClick: () => onToggleEnableAgg(agg, false), tooltip: i18n.translate('common.ui.vis.editors.agg.disableAggButtonTooltip', { diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx index e061952a90f58..fdbf26ce41ce1 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { useEffect, useReducer } from 'react'; +import React, { useEffect, useReducer, useMemo } from 'react'; import { EuiTitle, EuiDragDropContext, @@ -36,14 +36,14 @@ import { isInvalidAggsTouched, isAggRemovable, calcAggIsTooLow, - canAggBeDisabled, + isAggDisabled, } from './agg_group_helper'; import { aggGroupReducer, initAggsState, AGGS_ACTION_KEYS } from './agg_group_state'; import { Schema } from '../schemas'; export interface DefaultEditorAggGroupProps extends DefaultEditorAggCommonProps { schemas: Schema[]; - addSchema: (schems: Schema) => void; + addSchema: (schemas: Schema) => void; reorderAggs: (group: AggConfig[]) => void; } @@ -81,6 +81,10 @@ function DefaultEditorAggGroup({ const isGroupValid = Object.values(aggsState).every(item => item.valid); const isAllAggsTouched = isInvalidAggsTouched(aggsState); + const isAggregationDisabled = useMemo( + () => (groupName === AggGroupNames.Metrics ? isAggDisabled(group) : true), + [groupName, group] + ); useEffect(() => { // when isAllAggsTouched is true, it means that all invalid aggs are touched and we will set ngModel's touched to true @@ -163,9 +167,7 @@ function DefaultEditorAggGroup({ isDraggable={stats.count > 1} isLastBucket={groupName === AggGroupNames.Buckets && index === group.length - 1} isRemovable={isAggRemovable(agg, group)} - canBeDisabled={ - groupName === AggGroupNames.Metrics ? canAggBeDisabled(agg, group) : true - } + isDisabled={isAggregationDisabled} lastParentPipelineAggTitle={lastParentPipelineAggTitle} metricAggs={metricAggs} state={state} diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx index 65192ca6df4d7..5f50fa47f0060 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx @@ -17,32 +17,24 @@ * under the License. */ -import { findIndex, reduce, isEmpty } from 'lodash'; +import { findIndex, isEmpty } from 'lodash'; import { AggConfig } from '../../../../agg_types/agg_config'; import { AggsState } from './agg_group_state'; const isAggRemovable = (agg: AggConfig, group: AggConfig[]) => { - const metricCount = reduce( - group, - (count, aggregation: AggConfig) => { - return aggregation.schema.name === agg.schema.name ? ++count : count; - }, - 0 - ); + const metricCount = group.reduce((count, aggregation: AggConfig) => { + return aggregation.schema.name === agg.schema.name ? ++count : count; + }, 0); // make sure the the number of these aggs is above the min return metricCount > agg.schema.min; }; -const canAggBeDisabled = (agg: AggConfig, group: AggConfig[]) => { - const enabledAggsCount = reduce( - group, - (count, aggregation: AggConfig) => { - return aggregation.enabled ? ++count : count; - }, - 0 - ); +const isAggDisabled = (group: AggConfig[]) => { + const enabledAggsCount = group.reduce((count, aggregation: AggConfig) => { + return aggregation.enabled ? ++count : count; + }, 0); - return enabledAggsCount !== 1; + return enabledAggsCount === 1; }; const calcAggIsTooLow = (agg: AggConfig, aggIndex: number, group: AggConfig[]) => { @@ -71,4 +63,4 @@ function isInvalidAggsTouched(aggsState: AggsState) { return invalidAggs.every(agg => agg.touched); } -export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, canAggBeDisabled }; +export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, isAggDisabled }; From 1a07a454448ead97b335c3029f22c5bc3bb0cabc Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Thu, 26 Sep 2019 14:42:20 +0300 Subject: [PATCH 3/7] Update agg_group.tsx --- .../ui/public/vis/editors/default/components/agg_group.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx index fdbf26ce41ce1..a9ba44646ed3f 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx @@ -82,7 +82,7 @@ function DefaultEditorAggGroup({ const isGroupValid = Object.values(aggsState).every(item => item.valid); const isAllAggsTouched = isInvalidAggsTouched(aggsState); const isAggregationDisabled = useMemo( - () => (groupName === AggGroupNames.Metrics ? isAggDisabled(group) : true), + () => (groupName === AggGroupNames.Metrics ? isAggDisabled(group) : false), [groupName, group] ); From 83aa5d22b27d8485509a78038087b956c428b9ee Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Thu, 26 Sep 2019 15:02:16 +0300 Subject: [PATCH 4/7] Add unit tests --- .../editors/default/components/agg.test.tsx | 12 +++++++++ .../components/agg_group_helper.test.ts | 25 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx b/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx index e2a9b931da9d5..b87eb3f5fb303 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg.test.tsx @@ -201,6 +201,18 @@ describe('DefaultEditorAgg component', () => { expect(defaultProps.onToggleEnableAgg).toBeCalledWith(defaultProps.agg, false); }); + it('should disable the disableAggregation button', () => { + defaultProps.isDisabled = true; + defaultProps.isRemovable = true; + const comp = mount(); + + expect( + comp + .find('EuiButtonIcon[data-test-subj="toggleDisableAggregationBtn disable"]') + .prop('disabled') + ).toBeTruthy(); + }); + it('should enable agg', () => { defaultProps.agg.enabled = false; const comp = mount(); diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts index b2dac344950bd..fe15071ff2f34 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts @@ -18,7 +18,12 @@ */ import { AggConfig } from '../../../../agg_types/agg_config'; -import { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched } from './agg_group_helper'; +import { + isAggRemovable, + calcAggIsTooLow, + isInvalidAggsTouched, + isAggDisabled, +} from './agg_group_helper'; import { AggsState } from './agg_group_state'; describe('DefaultEditorGroup helpers', () => { @@ -46,6 +51,7 @@ describe('DefaultEditorGroup helpers', () => { } as AggConfig, ]; }); + describe('isAggRemovable', () => { it('should return true when the number of aggs with the same schema is above the min', () => { const isRemovable = isAggRemovable(group[0], group); @@ -60,6 +66,23 @@ describe('DefaultEditorGroup helpers', () => { }); }); + describe('isAggDisabled', () => { + it('should return true when there is the only enabled agg', () => { + group[0].enabled = true; + const isDisabled = isAggDisabled(group); + + expect(isDisabled).toBeTruthy(); + }); + + it('should return false when there are multiple enabled aggs', () => { + group[0].enabled = true; + group[1].enabled = true; + const isDisabled = isAggDisabled(group); + + expect(isDisabled).toBeFalsy(); + }); + }); + describe('calcAggIsTooLow', () => { it('should return false when agg.schema.mustBeFirst has falsy value', () => { const isRemovable = calcAggIsTooLow(group[1], 0, group); From 3fcd79fee579087bc287da14dd322912a541d765 Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Tue, 1 Oct 2019 11:54:56 +0300 Subject: [PATCH 5/7] Fix when aggs with different schema name --- .../editors/default/components/agg_group.tsx | 8 +++---- .../default/components/agg_group_helper.tsx | 22 ++++++++++--------- .../ui/public/vis/editors/default/sidebar.js | 12 +++------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx index 493c99149e4cc..db4461764739e 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx @@ -37,7 +37,7 @@ import { isInvalidAggsTouched, isAggRemovable, calcAggIsTooLow, - isAggDisabled, + getEnabledMetricAggsCount, } from './agg_group_helper'; import { aggGroupReducer, initAggsState, AGGS_ACTION_KEYS } from './agg_group_state'; import { Schema } from '../schemas'; @@ -82,8 +82,8 @@ function DefaultEditorAggGroup({ const isGroupValid = Object.values(aggsState).every(item => item.valid); const isAllAggsTouched = isInvalidAggsTouched(aggsState); - const isAggregationDisabled = useMemo( - () => (groupName === AggGroupNames.Metrics ? isAggDisabled(group) : false), + const isMetricAggregationDisabled = useMemo( + () => (groupName === AggGroupNames.Metrics ? getEnabledMetricAggsCount(group) === 1 : false), [groupName, group] ); @@ -164,7 +164,7 @@ function DefaultEditorAggGroup({ isDraggable={stats.count > 1} isLastBucket={groupName === AggGroupNames.Buckets && index === group.length - 1} isRemovable={isAggRemovable(agg, group)} - isDisabled={isAggregationDisabled} + isDisabled={agg.schema.name === 'metric' ? isMetricAggregationDisabled : false} lastParentPipelineAggTitle={lastParentPipelineAggTitle} metricAggs={metricAggs} state={state} diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx index 5f50fa47f0060..847aa0b87d2d3 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.tsx @@ -22,19 +22,21 @@ import { AggConfig } from '../../../../agg_types/agg_config'; import { AggsState } from './agg_group_state'; const isAggRemovable = (agg: AggConfig, group: AggConfig[]) => { - const metricCount = group.reduce((count, aggregation: AggConfig) => { - return aggregation.schema.name === agg.schema.name ? ++count : count; - }, 0); + const metricCount = group.reduce( + (count, aggregation: AggConfig) => + aggregation.schema.name === agg.schema.name ? ++count : count, + 0 + ); // make sure the the number of these aggs is above the min return metricCount > agg.schema.min; }; -const isAggDisabled = (group: AggConfig[]) => { - const enabledAggsCount = group.reduce((count, aggregation: AggConfig) => { - return aggregation.enabled ? ++count : count; - }, 0); - - return enabledAggsCount === 1; +const getEnabledMetricAggsCount = (group: AggConfig[]) => { + return group.reduce( + (count, aggregation: AggConfig) => + aggregation.schema.name === 'metric' && aggregation.enabled ? ++count : count, + 0 + ); }; const calcAggIsTooLow = (agg: AggConfig, aggIndex: number, group: AggConfig[]) => { @@ -63,4 +65,4 @@ function isInvalidAggsTouched(aggsState: AggsState) { return invalidAggs.every(agg => agg.touched); } -export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, isAggDisabled }; +export { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, getEnabledMetricAggsCount }; diff --git a/src/legacy/ui/public/vis/editors/default/sidebar.js b/src/legacy/ui/public/vis/editors/default/sidebar.js index 8acf07783e86b..92cb99c56038d 100644 --- a/src/legacy/ui/public/vis/editors/default/sidebar.js +++ b/src/legacy/ui/public/vis/editors/default/sidebar.js @@ -25,6 +25,7 @@ import { uiModules } from '../../../modules'; import sidebarTemplate from './sidebar.html'; import { move } from '../../../utils/collection'; import { AggGroupNames } from './agg_groups'; +import { getEnabledMetricAggsCount } from './components/agg_group_helper'; uiModules.get('app/visualize').directive('visEditorSidebar', function () { return { @@ -80,16 +81,9 @@ uiModules.get('app/visualize').directive('visEditorSidebar', function () { if (agg.schema.group === AggGroupNames.Metrics) { const metrics = $scope.state.aggs.bySchemaGroup(AggGroupNames.Metrics); - const enabledAggsCount = _.reduce( - metrics, - (count, aggregation) => { - return aggregation.enabled ? ++count : count; - }, - 0 - ); - if (!enabledAggsCount && metrics.length) { - metrics[0].enabled = true; + if (getEnabledMetricAggsCount(metrics) === 0) { + metrics.find(aggregation => aggregation.schema.name === 'metric').enabled = true; } } }; From 2623e6bded26658c4a6b7d6e222946977ef0b286 Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Tue, 1 Oct 2019 13:06:17 +0300 Subject: [PATCH 6/7] Update agg_group_helper.test.ts --- .../default/components/agg_group_helper.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts index fe15071ff2f34..6bb27d4a0c14e 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group_helper.test.ts @@ -22,7 +22,7 @@ import { isAggRemovable, calcAggIsTooLow, isInvalidAggsTouched, - isAggDisabled, + getEnabledMetricAggsCount, } from './agg_group_helper'; import { AggsState } from './agg_group_state'; @@ -66,20 +66,20 @@ describe('DefaultEditorGroup helpers', () => { }); }); - describe('isAggDisabled', () => { - it('should return true when there is the only enabled agg', () => { + describe('getEnabledMetricAggsCount', () => { + it('should return 1 when there is the only enabled agg', () => { group[0].enabled = true; - const isDisabled = isAggDisabled(group); + const enabledAggs = getEnabledMetricAggsCount(group); - expect(isDisabled).toBeTruthy(); + expect(enabledAggs).toBe(1); }); - it('should return false when there are multiple enabled aggs', () => { + it('should return 2 when there are multiple enabled aggs', () => { group[0].enabled = true; group[1].enabled = true; - const isDisabled = isAggDisabled(group); + const enabledAggs = getEnabledMetricAggsCount(group); - expect(isDisabled).toBeFalsy(); + expect(enabledAggs).toBe(2); }); }); From 3069820ece1bd55e029b717af8500c56ea74a2dd Mon Sep 17 00:00:00 2001 From: maryia-lapata Date: Tue, 1 Oct 2019 16:51:55 +0300 Subject: [PATCH 7/7] Update agg_group.tsx --- .../ui/public/vis/editors/default/components/agg_group.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx index db4461764739e..f379350012e37 100644 --- a/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx +++ b/src/legacy/ui/public/vis/editors/default/components/agg_group.tsx @@ -83,7 +83,7 @@ function DefaultEditorAggGroup({ const isGroupValid = Object.values(aggsState).every(item => item.valid); const isAllAggsTouched = isInvalidAggsTouched(aggsState); const isMetricAggregationDisabled = useMemo( - () => (groupName === AggGroupNames.Metrics ? getEnabledMetricAggsCount(group) === 1 : false), + () => groupName === AggGroupNames.Metrics && getEnabledMetricAggsCount(group) === 1, [groupName, group] ); @@ -164,7 +164,7 @@ function DefaultEditorAggGroup({ isDraggable={stats.count > 1} isLastBucket={groupName === AggGroupNames.Buckets && index === group.length - 1} isRemovable={isAggRemovable(agg, group)} - isDisabled={agg.schema.name === 'metric' ? isMetricAggregationDisabled : false} + isDisabled={agg.schema.name === 'metric' && isMetricAggregationDisabled} lastParentPipelineAggTitle={lastParentPipelineAggTitle} metricAggs={metricAggs} state={state}