mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[Lens] Carry previous configured formatter in Last value (#93784)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
edb1c4b48e
commit
adfbe976d6
11 changed files with 93 additions and 59 deletions
|
@ -611,7 +611,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx",
|
||||
"lineNumber": 23
|
||||
"lineNumber": 24
|
||||
},
|
||||
"signature": [
|
||||
"\"percentile\""
|
||||
|
@ -625,7 +625,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx",
|
||||
"lineNumber": 24
|
||||
"lineNumber": 25
|
||||
},
|
||||
"signature": [
|
||||
"{ percentile: number; format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; }"
|
||||
|
@ -634,7 +634,7 @@
|
|||
],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/percentile.tsx",
|
||||
"lineNumber": 22
|
||||
"lineNumber": 23
|
||||
},
|
||||
"initialIsOpen": false
|
||||
},
|
||||
|
@ -1318,7 +1318,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx",
|
||||
"lineNumber": 128
|
||||
"lineNumber": 125
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn & { params?: { format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; } | undefined; } & FieldBasedIndexPatternColumn & { operationType: \"avg\"; }"
|
||||
|
@ -1333,7 +1333,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/calculations/counter_rate.tsx",
|
||||
"lineNumber": 34
|
||||
"lineNumber": 35
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn",
|
||||
|
@ -1365,7 +1365,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/calculations/cumulative_sum.tsx",
|
||||
"lineNumber": 32
|
||||
"lineNumber": 33
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn",
|
||||
|
@ -1381,7 +1381,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/calculations/derivative.tsx",
|
||||
"lineNumber": 34
|
||||
"lineNumber": 35
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn",
|
||||
|
@ -1475,7 +1475,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx",
|
||||
"lineNumber": 130
|
||||
"lineNumber": 127
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn & { params?: { format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; } | undefined; } & FieldBasedIndexPatternColumn & { operationType: \"max\"; }"
|
||||
|
@ -1490,7 +1490,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx",
|
||||
"lineNumber": 131
|
||||
"lineNumber": 128
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn & { params?: { format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; } | undefined; } & FieldBasedIndexPatternColumn & { operationType: \"median\"; }"
|
||||
|
@ -1505,7 +1505,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx",
|
||||
"lineNumber": 129
|
||||
"lineNumber": 126
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn & { params?: { format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; } | undefined; } & FieldBasedIndexPatternColumn & { operationType: \"min\"; }"
|
||||
|
@ -1598,7 +1598,7 @@
|
|||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx",
|
||||
"lineNumber": 127
|
||||
"lineNumber": 124
|
||||
},
|
||||
"signature": [
|
||||
"BaseIndexPatternColumn & { params?: { format?: { id: string; params?: { decimals: number; } | undefined; } | undefined; } | undefined; } & FieldBasedIndexPatternColumn & { operationType: \"sum\"; }"
|
||||
|
|
|
@ -17,6 +17,7 @@ import {
|
|||
} from './utils';
|
||||
import { DEFAULT_TIME_SCALE } from '../../time_scale_utils';
|
||||
import { OperationDefinition } from '..';
|
||||
import { getFormatFromPreviousColumn } from '../helpers';
|
||||
|
||||
const ofName = buildLabelFunction((name?: string) => {
|
||||
return i18n.translate('xpack.lens.indexPattern.CounterRateOf', {
|
||||
|
@ -81,13 +82,7 @@ export const counterRateOperation: OperationDefinition<
|
|||
scale: 'ratio',
|
||||
references: referenceIds,
|
||||
timeScale,
|
||||
params:
|
||||
previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format }
|
||||
: undefined,
|
||||
params: getFormatFromPreviousColumn(previousColumn),
|
||||
};
|
||||
},
|
||||
isTransferable: (column, newIndexPattern) => {
|
||||
|
|
|
@ -15,6 +15,7 @@ import {
|
|||
hasDateField,
|
||||
} from './utils';
|
||||
import { OperationDefinition } from '..';
|
||||
import { getFormatFromPreviousColumn } from '../helpers';
|
||||
|
||||
const ofName = (name?: string) => {
|
||||
return i18n.translate('xpack.lens.indexPattern.cumulativeSumOf', {
|
||||
|
@ -77,13 +78,7 @@ export const cumulativeSumOperation: OperationDefinition<
|
|||
isBucketed: false,
|
||||
scale: 'ratio',
|
||||
references: referenceIds,
|
||||
params:
|
||||
previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format }
|
||||
: undefined,
|
||||
params: getFormatFromPreviousColumn(previousColumn),
|
||||
};
|
||||
},
|
||||
isTransferable: () => {
|
||||
|
|
|
@ -17,6 +17,7 @@ import {
|
|||
} from './utils';
|
||||
import { adjustTimeScaleOnOtherColumnChange } from '../../time_scale_utils';
|
||||
import { OperationDefinition } from '..';
|
||||
import { getFormatFromPreviousColumn } from '../helpers';
|
||||
|
||||
const ofName = buildLabelFunction((name?: string) => {
|
||||
return i18n.translate('xpack.lens.indexPattern.derivativeOf', {
|
||||
|
@ -82,13 +83,7 @@ export const derivativeOperation: OperationDefinition<
|
|||
scale: 'ratio',
|
||||
references: referenceIds,
|
||||
timeScale: previousColumn?.timeScale,
|
||||
params:
|
||||
previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format }
|
||||
: undefined,
|
||||
params: getFormatFromPreviousColumn(previousColumn),
|
||||
};
|
||||
},
|
||||
isTransferable: (column, newIndexPattern) => {
|
||||
|
|
|
@ -19,7 +19,7 @@ import {
|
|||
hasDateField,
|
||||
} from './utils';
|
||||
import { updateColumnParam } from '../../layer_helpers';
|
||||
import { isValidNumber, useDebounceWithOptions } from '../helpers';
|
||||
import { getFormatFromPreviousColumn, isValidNumber, useDebounceWithOptions } from '../helpers';
|
||||
import { adjustTimeScaleOnOtherColumnChange } from '../../time_scale_utils';
|
||||
import { HelpPopover, HelpPopoverButton } from '../../../help_popover';
|
||||
import type { OperationDefinition, ParamEditorProps } from '..';
|
||||
|
@ -89,13 +89,10 @@ export const movingAverageOperation: OperationDefinition<
|
|||
scale: 'ratio',
|
||||
references: referenceIds,
|
||||
timeScale: previousColumn?.timeScale,
|
||||
params:
|
||||
previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format, window: 5 }
|
||||
: { window: 5 },
|
||||
params: {
|
||||
window: 5,
|
||||
...getFormatFromPreviousColumn(previousColumn),
|
||||
},
|
||||
};
|
||||
},
|
||||
paramEditor: MovingAverageParamEditor,
|
||||
|
|
|
@ -11,7 +11,7 @@ import { buildExpressionFunction } from '../../../../../../../src/plugins/expres
|
|||
import { OperationDefinition } from './index';
|
||||
import { FormattedIndexPatternColumn, FieldBasedIndexPatternColumn } from './column_types';
|
||||
|
||||
import { getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
import { getFormatFromPreviousColumn, getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
|
||||
const supportedTypes = new Set(['string', 'boolean', 'number', 'ip', 'date']);
|
||||
|
||||
|
@ -70,13 +70,7 @@ export const cardinalityOperation: OperationDefinition<CardinalityIndexPatternCo
|
|||
scale: SCALE,
|
||||
sourceField: field.name,
|
||||
isBucketed: IS_BUCKETED,
|
||||
params:
|
||||
previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format }
|
||||
: undefined,
|
||||
params: getFormatFromPreviousColumn(previousColumn),
|
||||
};
|
||||
},
|
||||
toEsAggsFn: (column, columnId) => {
|
||||
|
|
|
@ -98,3 +98,12 @@ export function isValidNumber(
|
|||
(lowerBound === undefined || inputValueAsNumber >= lowerBound)
|
||||
);
|
||||
}
|
||||
|
||||
export function getFormatFromPreviousColumn(previousColumn: IndexPatternColumn | undefined) {
|
||||
return previousColumn?.dataType === 'number' &&
|
||||
previousColumn.params &&
|
||||
'format' in previousColumn.params &&
|
||||
previousColumn.params.format
|
||||
? { format: previousColumn.params.format }
|
||||
: undefined;
|
||||
}
|
||||
|
|
|
@ -340,6 +340,60 @@ describe('last_value', () => {
|
|||
);
|
||||
});
|
||||
|
||||
it('should pick the previous format configuration if set', () => {
|
||||
const indexPattern = createMockedIndexPattern();
|
||||
expect(
|
||||
lastValueOperation.buildColumn({
|
||||
indexPattern,
|
||||
layer: {
|
||||
columns: {
|
||||
col1: {
|
||||
label: 'Count',
|
||||
dataType: 'number',
|
||||
isBucketed: false,
|
||||
sourceField: 'Records',
|
||||
operationType: 'count',
|
||||
},
|
||||
},
|
||||
columnOrder: [],
|
||||
indexPatternId: '',
|
||||
},
|
||||
|
||||
field: {
|
||||
aggregatable: true,
|
||||
searchable: true,
|
||||
type: 'boolean',
|
||||
name: 'test',
|
||||
displayName: 'test',
|
||||
},
|
||||
previousColumn: {
|
||||
label: 'Count',
|
||||
dataType: 'number',
|
||||
isBucketed: false,
|
||||
sourceField: 'Records',
|
||||
operationType: 'count',
|
||||
params: {
|
||||
format: {
|
||||
id: 'number',
|
||||
params: {
|
||||
decimals: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}).params
|
||||
).toEqual(
|
||||
expect.objectContaining({
|
||||
format: {
|
||||
id: 'number',
|
||||
params: {
|
||||
decimals: 2,
|
||||
},
|
||||
},
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
describe('param editor', () => {
|
||||
it('should render current sortField', () => {
|
||||
const updateLayerSpy = jest.fn();
|
||||
|
|
|
@ -15,7 +15,7 @@ import { FieldBasedIndexPatternColumn } from './column_types';
|
|||
import { IndexPatternField, IndexPattern } from '../../types';
|
||||
import { updateColumnParam } from '../layer_helpers';
|
||||
import { DataType } from '../../../types';
|
||||
import { getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
import { getFormatFromPreviousColumn, getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
|
||||
function ofName(name: string) {
|
||||
return i18n.translate('xpack.lens.indexPattern.lastValueOf', {
|
||||
|
@ -162,6 +162,7 @@ export const lastValueOperation: OperationDefinition<LastValueIndexPatternColumn
|
|||
sourceField: field.name,
|
||||
params: {
|
||||
sortField,
|
||||
...getFormatFromPreviousColumn(previousColumn),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { buildExpressionFunction } from '../../../../../../../src/plugins/expressions/public';
|
||||
import { OperationDefinition } from './index';
|
||||
import { getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
import { getFormatFromPreviousColumn, getInvalidFieldMessage, getSafeName } from './helpers';
|
||||
import {
|
||||
FormattedIndexPatternColumn,
|
||||
FieldBasedIndexPatternColumn,
|
||||
|
@ -99,10 +99,7 @@ function buildMetricOperation<T extends MetricColumn<string>>({
|
|||
isBucketed: false,
|
||||
scale: 'ratio',
|
||||
timeScale: optionalTimeScaling ? previousColumn?.timeScale : undefined,
|
||||
params:
|
||||
previousColumn && previousColumn.dataType === 'number'
|
||||
? previousColumn.params
|
||||
: undefined,
|
||||
params: getFormatFromPreviousColumn(previousColumn),
|
||||
} as T),
|
||||
onFieldChange: (oldColumn, field) => {
|
||||
return {
|
||||
|
|
|
@ -12,6 +12,7 @@ import { AggFunctionsMapping } from 'src/plugins/data/public';
|
|||
import { buildExpressionFunction } from '../../../../../../../src/plugins/expressions/public';
|
||||
import { OperationDefinition } from './index';
|
||||
import {
|
||||
getFormatFromPreviousColumn,
|
||||
getInvalidFieldMessage,
|
||||
getSafeName,
|
||||
isValidNumber,
|
||||
|
@ -72,10 +73,6 @@ export const percentileOperation: OperationDefinition<PercentileIndexPatternColu
|
|||
getDefaultLabel: (column, indexPattern, columns) =>
|
||||
ofName(getSafeName(column.sourceField, indexPattern), column.params.percentile),
|
||||
buildColumn: ({ field, previousColumn, indexPattern }) => {
|
||||
const existingFormat =
|
||||
previousColumn?.params && 'format' in previousColumn?.params
|
||||
? previousColumn?.params?.format
|
||||
: undefined;
|
||||
const existingPercentileParam =
|
||||
previousColumn?.operationType === 'percentile' && previousColumn?.params.percentile;
|
||||
const newPercentileParam = existingPercentileParam || DEFAULT_PERCENTILE_VALUE;
|
||||
|
@ -87,8 +84,8 @@ export const percentileOperation: OperationDefinition<PercentileIndexPatternColu
|
|||
isBucketed: false,
|
||||
scale: 'ratio',
|
||||
params: {
|
||||
format: existingFormat,
|
||||
percentile: newPercentileParam,
|
||||
...getFormatFromPreviousColumn(previousColumn),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue