From ee1ef74cd56b4ad4540015b413d42eaba4457b7a Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Fri, 16 Oct 2020 18:26:05 +0200 Subject: [PATCH] [Lens] Add median operation (#79453) (#80837) --- .../dimension_panel/dimension_editor.tsx | 6 +++++- .../dimension_panel/dimension_panel.test.tsx | 2 ++ .../operations/definitions/index.ts | 4 ++++ .../operations/definitions/metrics.tsx | 13 +++++++++++++ .../operations/operations.test.ts | 9 +++++++-- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx index 8b0c9011f2c276..ed0591219b5599 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx @@ -264,7 +264,11 @@ export function DimensionEditor(props: DimensionEditorProps) { 3 ? 'lnsIndexPatternDimensionEditor__columns' : ''} gutterSize="none" - listItems={sideNavItems} + listItems={ + // add a padding item containing a non breakable space if the number of operations is not even + // otherwise the column layout will break within an element + sideNavItems.length % 2 === 1 ? [...sideNavItems, { label: '\u00a0' }] : sideNavItems + } maxWidth={false} /> diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx index d15825718682cd..1bf5039ef05fad 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx @@ -993,9 +993,11 @@ describe('IndexPatternDimensionEditorPanel', () => { 'Average', 'Count', 'Maximum', + 'Median', 'Minimum', 'Sum', 'Unique count', + '\u00a0', ]); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index 38aec866ca5cb1..735015492bd5a4 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -18,6 +18,8 @@ import { SumIndexPatternColumn, maxOperation, MaxIndexPatternColumn, + medianOperation, + MedianIndexPatternColumn, } from './metrics'; import { dateHistogramOperation, DateHistogramIndexPatternColumn } from './date_histogram'; import { countOperation, CountIndexPatternColumn } from './count'; @@ -43,6 +45,7 @@ export type IndexPatternColumn = | AvgIndexPatternColumn | CardinalityIndexPatternColumn | SumIndexPatternColumn + | MedianIndexPatternColumn | CountIndexPatternColumn; export type FieldBasedIndexPatternColumn = Extract; @@ -59,6 +62,7 @@ const internalOperationDefinitions = [ averageOperation, cardinalityOperation, sumOperation, + medianOperation, countOperation, rangeOperation, ]; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx index c02f7bcb7d2cda..1d3ecc165ce744 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx @@ -87,6 +87,7 @@ export type SumIndexPatternColumn = MetricColumn<'sum'>; export type AvgIndexPatternColumn = MetricColumn<'avg'>; export type MinIndexPatternColumn = MetricColumn<'min'>; export type MaxIndexPatternColumn = MetricColumn<'max'>; +export type MedianIndexPatternColumn = MetricColumn<'median'>; export const minOperation = buildMetricOperation({ type: 'min', @@ -137,3 +138,15 @@ export const sumOperation = buildMetricOperation({ values: { name }, }), }); + +export const medianOperation = buildMetricOperation({ + type: 'median', + displayName: i18n.translate('xpack.lens.indexPattern.median', { + defaultMessage: 'Median', + }), + ofName: (name) => + i18n.translate('xpack.lens.indexPattern.medianOf', { + defaultMessage: 'Median of {name}', + values: { name }, + }), +}); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts index c1bd4b84099b74..6808bc724f26b0 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts @@ -315,12 +315,12 @@ describe('getOperationTypesForField', () => { }, Object { "field": "bytes", - "operationType": "min", + "operationType": "max", "type": "field", }, Object { "field": "bytes", - "operationType": "max", + "operationType": "min", "type": "field", }, Object { @@ -338,6 +338,11 @@ describe('getOperationTypesForField', () => { "operationType": "cardinality", "type": "field", }, + Object { + "field": "bytes", + "operationType": "median", + "type": "field", + }, ], }, ]