mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Lens] migrate metric visualization IDs (#139251)
This commit is contained in:
parent
5e44648cca
commit
54a5ed586a
28 changed files with 137 additions and 64 deletions
|
@ -88,7 +88,7 @@ export interface PieVisualizationState {
|
|||
layers: PieLayerState[];
|
||||
palette?: PaletteOutput;
|
||||
}
|
||||
export interface MetricState {
|
||||
export interface LegacyMetricState {
|
||||
layerId: string;
|
||||
accessor?: string;
|
||||
layerType: LayerType;
|
||||
|
|
|
@ -24,8 +24,9 @@ import type { LensByReferenceInput, LensByValueInput } from './embeddable';
|
|||
import type { Document } from '../persistence';
|
||||
import type { IndexPatternPersistedState } from '../indexpattern_datasource/types';
|
||||
import type { XYState } from '../visualizations/xy/types';
|
||||
import type { PieVisualizationState, MetricState } from '../../common';
|
||||
import type { PieVisualizationState, LegacyMetricState } from '../../common';
|
||||
import type { DatatableVisualizationState } from '../visualizations/datatable/visualization';
|
||||
import type { MetricVisualizationState } from '../visualizations/metric/visualization';
|
||||
import type { HeatmapVisualizationState } from '../visualizations/heatmap/types';
|
||||
import type { GaugeVisualizationState } from '../visualizations/gauge/constants';
|
||||
|
||||
|
@ -51,7 +52,8 @@ export type TypedLensByValueInput = Omit<LensByValueInput, 'attributes'> & {
|
|||
| LensAttributes<'lnsXY', XYState>
|
||||
| LensAttributes<'lnsPie', PieVisualizationState>
|
||||
| LensAttributes<'lnsDatatable', DatatableVisualizationState>
|
||||
| LensAttributes<'lnsMetric', MetricState>
|
||||
| LensAttributes<'lnsLegacyMetric', LegacyMetricState>
|
||||
| LensAttributes<'lnsMetric', MetricVisualizationState>
|
||||
| LensAttributes<'lnsHeatmap', HeatmapVisualizationState>
|
||||
| LensAttributes<'lnsGauge', GaugeVisualizationState>
|
||||
| LensAttributes<string, unknown>;
|
||||
|
|
|
@ -32,7 +32,7 @@ export type {
|
|||
VisualizationSuggestion,
|
||||
} from './types';
|
||||
export type {
|
||||
MetricState,
|
||||
LegacyMetricState as MetricState,
|
||||
ValueLabelConfig,
|
||||
PieVisualizationState,
|
||||
PieLayerState,
|
||||
|
|
|
@ -23,7 +23,7 @@ import { act } from 'react-dom/test-utils';
|
|||
|
||||
import { PalettePanelContainer } from '../../shared_components';
|
||||
import { layerTypes } from '../../../common';
|
||||
import type { MetricState } from '../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../common/types';
|
||||
|
||||
// mocking random id generator function
|
||||
jest.mock('@elastic/eui', () => {
|
||||
|
@ -48,13 +48,13 @@ function paletteParamsContaining(paramsToCheck: PaletteOutput<CustomPaletteParam
|
|||
|
||||
describe('metric dimension editor', () => {
|
||||
let frame: FramePublicAPI;
|
||||
let state: MetricState;
|
||||
let setState: (newState: MetricState) => void;
|
||||
let props: VisualizationDimensionEditorProps<MetricState> & {
|
||||
let state: LegacyMetricState;
|
||||
let setState: (newState: LegacyMetricState) => void;
|
||||
let props: VisualizationDimensionEditorProps<LegacyMetricState> & {
|
||||
paletteService: PaletteRegistry;
|
||||
};
|
||||
|
||||
function testState(): MetricState {
|
||||
function testState(): LegacyMetricState {
|
||||
return {
|
||||
layerId: 'first',
|
||||
layerType: layerTypes.DATA,
|
||||
|
|
|
@ -22,7 +22,7 @@ import {
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import React, { useCallback, useState } from 'react';
|
||||
import { ColorMode } from '@kbn/charts-plugin/common';
|
||||
import type { MetricState } from '../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../common/types';
|
||||
import { isNumericFieldForDatatable } from '../../../common/expressions';
|
||||
import { applyPaletteParams, PalettePanelContainer } from '../../shared_components';
|
||||
import type { VisualizationDimensionEditorProps } from '../../types';
|
||||
|
@ -33,7 +33,7 @@ import './dimension_editor.scss';
|
|||
const idPrefix = htmlIdGenerator()();
|
||||
|
||||
export function MetricDimensionEditor(
|
||||
props: VisualizationDimensionEditorProps<MetricState> & {
|
||||
props: VisualizationDimensionEditorProps<LegacyMetricState> & {
|
||||
paletteService: PaletteRegistry;
|
||||
}
|
||||
) {
|
||||
|
@ -117,7 +117,7 @@ export function MetricDimensionEditor(
|
|||
idSelected={`${idPrefix}${currentColorMode}`}
|
||||
onChange={(id) => {
|
||||
const newMode = id.replace(idPrefix, '') as ColorMode;
|
||||
const params: Partial<MetricState> = {
|
||||
const params: Partial<LegacyMetricState> = {
|
||||
colorMode: newMode,
|
||||
};
|
||||
if (!state?.palette && newMode !== ColorMode.None) {
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
import React from 'react';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { EuiButtonGroup } from '@elastic/eui';
|
||||
import { MetricState } from '../../../../common/types';
|
||||
import { LegacyMetricState } from '../../../../common/types';
|
||||
|
||||
export interface TitlePositionProps {
|
||||
state: MetricState;
|
||||
setState: (newState: MetricState) => void;
|
||||
state: LegacyMetricState;
|
||||
setState: (newState: LegacyMetricState) => void;
|
||||
}
|
||||
|
||||
export const DEFAULT_TEXT_ALIGNMENT = 'left';
|
||||
|
@ -50,7 +50,7 @@ export const AlignOptions: React.FC<TitlePositionProps> = ({ state, setState })
|
|||
options={alignButtonIcons}
|
||||
idSelected={state.textAlign ?? DEFAULT_TEXT_ALIGNMENT}
|
||||
onChange={(id) => {
|
||||
setState({ ...state, textAlign: id as MetricState['textAlign'] });
|
||||
setState({ ...state, textAlign: id as LegacyMetricState['textAlign'] });
|
||||
}}
|
||||
isIconOnly
|
||||
buttonSize="compressed"
|
||||
|
|
|
@ -10,12 +10,12 @@ import { i18n } from '@kbn/i18n';
|
|||
import { ToolbarPopover, TooltipWrapper } from '../../../shared_components';
|
||||
import { TitlePositionOptions } from './title_position_option';
|
||||
import { FramePublicAPI } from '../../../types';
|
||||
import type { MetricState } from '../../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../../common/types';
|
||||
import { TextFormattingOptions } from './text_formatting_options';
|
||||
|
||||
export interface VisualOptionsPopoverProps {
|
||||
state: MetricState;
|
||||
setState: (newState: MetricState) => void;
|
||||
state: LegacyMetricState;
|
||||
setState: (newState: LegacyMetricState) => void;
|
||||
datasourceLayers: FramePublicAPI['datasourceLayers'];
|
||||
}
|
||||
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
import React, { memo } from 'react';
|
||||
import { EuiFlexGroup, EuiFlexItem, htmlIdGenerator } from '@elastic/eui';
|
||||
import type { VisualizationToolbarProps } from '../../../types';
|
||||
import type { MetricState } from '../../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../../common/types';
|
||||
|
||||
import { AppearanceOptionsPopover } from './appearance_options_popover';
|
||||
|
||||
export const MetricToolbar = memo(function MetricToolbar(
|
||||
props: VisualizationToolbarProps<MetricState>
|
||||
props: VisualizationToolbarProps<LegacyMetricState>
|
||||
) {
|
||||
const { state, setState, frame } = props;
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
import React from 'react';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { EuiButtonIcon, EuiSuperSelect } from '@elastic/eui';
|
||||
import type { MetricState } from '../../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../../common/types';
|
||||
|
||||
export interface TitlePositionProps {
|
||||
state: MetricState;
|
||||
setState: (newState: MetricState) => void;
|
||||
state: LegacyMetricState;
|
||||
setState: (newState: LegacyMetricState) => void;
|
||||
}
|
||||
|
||||
export const DEFAULT_TITLE_SIZE = 'm';
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
import React from 'react';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { EuiFormRow, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
|
||||
import type { MetricState } from '../../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../../common/types';
|
||||
import { SizeOptions } from './size_options';
|
||||
import { AlignOptions } from './align_options';
|
||||
|
||||
export interface TitlePositionProps {
|
||||
state: MetricState;
|
||||
setState: (newState: MetricState) => void;
|
||||
state: LegacyMetricState;
|
||||
setState: (newState: LegacyMetricState) => void;
|
||||
}
|
||||
|
||||
export const TextFormattingOptions: React.FC<TitlePositionProps> = ({ state, setState }) => {
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
import React from 'react';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { EuiButtonGroup, EuiFormRow } from '@elastic/eui';
|
||||
import type { MetricState } from '../../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../../common/types';
|
||||
|
||||
export interface TitlePositionProps {
|
||||
state: MetricState;
|
||||
setState: (newState: MetricState) => void;
|
||||
state: LegacyMetricState;
|
||||
setState: (newState: LegacyMetricState) => void;
|
||||
}
|
||||
|
||||
export const DEFAULT_TITLE_POSITION = 'top';
|
||||
|
@ -52,7 +52,7 @@ export const TitlePositionOptions: React.FC<TitlePositionProps> = ({ state, setS
|
|||
options={titlePositions}
|
||||
idSelected={state.titlePosition ?? DEFAULT_TITLE_POSITION}
|
||||
onChange={(value) => {
|
||||
setState({ ...state, titlePosition: value as MetricState['titlePosition'] });
|
||||
setState({ ...state, titlePosition: value as LegacyMetricState['titlePosition'] });
|
||||
}}
|
||||
buttonSize="compressed"
|
||||
/>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { IconChartMetric } from '@kbn/chart-icons';
|
||||
import { SuggestionRequest, VisualizationSuggestion, TableSuggestion } from '../../types';
|
||||
import type { MetricState } from '../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../common/types';
|
||||
import { layerTypes } from '../../../common';
|
||||
import { legacyMetricSupportedTypes } from './visualization';
|
||||
|
||||
|
@ -20,7 +20,7 @@ export function getSuggestions({
|
|||
table,
|
||||
state,
|
||||
keptLayerIds,
|
||||
}: SuggestionRequest<MetricState>): Array<VisualizationSuggestion<MetricState>> {
|
||||
}: SuggestionRequest<LegacyMetricState>): Array<VisualizationSuggestion<LegacyMetricState>> {
|
||||
// We only render metric charts for single-row queries. We require a single, numeric column.
|
||||
if (
|
||||
table.isMultiRow ||
|
||||
|
@ -42,7 +42,7 @@ export function getSuggestions({
|
|||
return [getSuggestion(table)];
|
||||
}
|
||||
|
||||
function getSuggestion(table: TableSuggestion): VisualizationSuggestion<MetricState> {
|
||||
function getSuggestion(table: TableSuggestion): VisualizationSuggestion<LegacyMetricState> {
|
||||
const col = table.columns[0];
|
||||
const title = table.label || col.operation.label;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import { getLegacyMetricVisualization } from './visualization';
|
||||
import type { MetricState } from '../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../common/types';
|
||||
import { layerTypes } from '../../../common';
|
||||
import { createMockDatasource, createMockFramePublicAPI } from '../../mocks';
|
||||
import { generateId } from '../../id_generator';
|
||||
|
@ -17,7 +17,7 @@ import { themeServiceMock } from '@kbn/core/public/mocks';
|
|||
|
||||
jest.mock('../../id_generator');
|
||||
|
||||
function exampleState(): MetricState {
|
||||
function exampleState(): LegacyMetricState {
|
||||
return {
|
||||
accessor: 'a',
|
||||
layerId: 'l1',
|
||||
|
|
|
@ -17,7 +17,7 @@ import { VIS_EVENT_TO_TRIGGER } from '@kbn/visualizations-plugin/public';
|
|||
import { IconChartMetric } from '@kbn/chart-icons';
|
||||
import { getSuggestions } from './metric_suggestions';
|
||||
import { Visualization, OperationMetadata, DatasourceLayers } from '../../types';
|
||||
import type { MetricState } from '../../../common/types';
|
||||
import type { LegacyMetricState } from '../../../common/types';
|
||||
import { layerTypes } from '../../../common';
|
||||
import { MetricDimensionEditor } from './dimension_editor';
|
||||
import { MetricToolbar } from './metric_config_panel';
|
||||
|
@ -25,7 +25,7 @@ import { DEFAULT_TITLE_POSITION } from './metric_config_panel/title_position_opt
|
|||
import { DEFAULT_TITLE_SIZE } from './metric_config_panel/size_options';
|
||||
import { DEFAULT_TEXT_ALIGNMENT } from './metric_config_panel/align_options';
|
||||
|
||||
interface MetricConfig extends Omit<MetricState, 'palette' | 'colorMode'> {
|
||||
interface MetricConfig extends Omit<LegacyMetricState, 'palette' | 'colorMode'> {
|
||||
title: string;
|
||||
description: string;
|
||||
metricTitle: string;
|
||||
|
@ -46,9 +46,9 @@ const getFontSizeAndUnit = (fontSize: string) => {
|
|||
|
||||
const toExpression = (
|
||||
paletteService: PaletteRegistry,
|
||||
state: MetricState,
|
||||
state: LegacyMetricState,
|
||||
datasourceLayers: DatasourceLayers,
|
||||
attributes?: Partial<Omit<MetricConfig, keyof MetricState>>,
|
||||
attributes?: Partial<Omit<MetricConfig, keyof LegacyMetricState>>,
|
||||
datasourceExpressionsByLayers: Record<string, Ast> | undefined = {}
|
||||
): Ast | null => {
|
||||
if (!state.accessor) {
|
||||
|
@ -175,12 +175,12 @@ export const getLegacyMetricVisualization = ({
|
|||
}: {
|
||||
paletteService: PaletteRegistry;
|
||||
theme: ThemeServiceStart;
|
||||
}): Visualization<MetricState> => ({
|
||||
id: 'lnsMetric',
|
||||
}): Visualization<LegacyMetricState> => ({
|
||||
id: 'lnsLegacyMetric',
|
||||
|
||||
visualizationTypes: [
|
||||
{
|
||||
id: 'lnsMetric',
|
||||
id: 'lnsLegacyMetric',
|
||||
icon: IconChartMetric,
|
||||
label: i18n.translate('xpack.lens.legacyMetric.label', {
|
||||
defaultMessage: 'Legacy Metric',
|
||||
|
@ -192,7 +192,7 @@ export const getLegacyMetricVisualization = ({
|
|||
],
|
||||
|
||||
getVisualizationTypeId() {
|
||||
return 'lnsMetric';
|
||||
return 'lnsLegacyMetric';
|
||||
},
|
||||
|
||||
clearLayer(state) {
|
||||
|
@ -240,8 +240,8 @@ export const getLegacyMetricVisualization = ({
|
|||
defaultMessage: 'Value',
|
||||
}),
|
||||
},
|
||||
groupLabel: i18n.translate('xpack.lens.legacyMetric.label', {
|
||||
defaultMessage: 'Legacy Metric',
|
||||
groupLabel: i18n.translate('xpack.lens.metric.label', {
|
||||
defaultMessage: 'Metric',
|
||||
}),
|
||||
layerId: props.state.layerId,
|
||||
accessors: props.state.accessor
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
export const LENS_METRIC_ID = 'lnsMetricNew'; // TODO - rename old one to "legacy"
|
||||
export const LENS_METRIC_ID = 'lnsMetric';
|
||||
|
||||
export const GROUP_ID = {
|
||||
METRIC: 'metric',
|
||||
|
|
|
@ -27,15 +27,18 @@ import {
|
|||
commonUpdateVisLayerType,
|
||||
getLensCustomVisualizationMigrations,
|
||||
getLensFilterMigrations,
|
||||
commonMigrateMetricIds,
|
||||
} from '../migrations/common_migrations';
|
||||
import {
|
||||
CustomVisualizationMigrations,
|
||||
LensDocShape713,
|
||||
LensDocShape715,
|
||||
LensDocShape810,
|
||||
LensDocShape840,
|
||||
LensDocShapePre712,
|
||||
VisState716,
|
||||
VisState810,
|
||||
VisState840,
|
||||
VisStatePre715,
|
||||
VisStatePre830,
|
||||
} from '../migrations/types';
|
||||
|
@ -124,6 +127,14 @@ export const makeLensEmbeddableFactory =
|
|||
attributes: migratedLensState,
|
||||
} as unknown as SerializableRecord;
|
||||
},
|
||||
'8.5.0': (state) => {
|
||||
const lensState = state as unknown as { attributes: LensDocShape840<VisState840> };
|
||||
const migratedLensState = commonMigrateMetricIds(lensState.attributes);
|
||||
return {
|
||||
...lensState,
|
||||
attributes: migratedLensState,
|
||||
} as unknown as SerializableRecord;
|
||||
},
|
||||
}),
|
||||
getLensCustomVisualizationMigrations(customVisualizationMigrations)
|
||||
),
|
||||
|
|
|
@ -30,8 +30,9 @@ import {
|
|||
LensDocShape810,
|
||||
LensDocShape830,
|
||||
VisStatePre830,
|
||||
LensDocShape840,
|
||||
} from './types';
|
||||
import { DOCUMENT_FIELD_NAME, layerTypes, MetricState } from '../../common';
|
||||
import { DOCUMENT_FIELD_NAME, layerTypes, LegacyMetricState } from '../../common';
|
||||
import { LensDocShape } from './saved_object_migrations';
|
||||
|
||||
export const commonRenameOperationsForFormula = (
|
||||
|
@ -248,7 +249,7 @@ export const commonLockOldMetricVisSettings = (
|
|||
return newAttributes as LensDocShape830<VisState830>;
|
||||
}
|
||||
|
||||
const visState = newAttributes.state.visualization as MetricState;
|
||||
const visState = newAttributes.state.visualization as LegacyMetricState;
|
||||
visState.textAlign = visState.textAlign ?? 'center';
|
||||
visState.titlePosition = visState.titlePosition ?? 'bottom';
|
||||
visState.size = visState.size ?? 'xl';
|
||||
|
@ -398,3 +399,21 @@ export const commonFixValueLabelsInXY = (
|
|||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const commonMigrateMetricIds = (
|
||||
attributes: LensDocShape840<unknown>
|
||||
): LensDocShape840<unknown> => {
|
||||
const typeMappings = {
|
||||
lnsMetric: 'lnsLegacyMetric',
|
||||
lnsMetricNew: 'lnsMetric',
|
||||
} as Record<string, string>;
|
||||
|
||||
if (!attributes.visualizationType || !(attributes.visualizationType in typeMappings)) {
|
||||
return attributes as LensDocShape840<unknown>;
|
||||
}
|
||||
|
||||
const newAttributes = cloneDeep(attributes);
|
||||
newAttributes.visualizationType = typeMappings[attributes.visualizationType];
|
||||
|
||||
return newAttributes;
|
||||
};
|
||||
|
|
|
@ -23,7 +23,7 @@ import {
|
|||
VisState820,
|
||||
VisState830,
|
||||
} from './types';
|
||||
import { layerTypes, MetricState } from '../../common';
|
||||
import { layerTypes, LegacyMetricState } from '../../common';
|
||||
import { Filter } from '@kbn/es-query';
|
||||
|
||||
describe('Lens migrations', () => {
|
||||
|
@ -2086,7 +2086,7 @@ describe('Lens migrations', () => {
|
|||
const result = migrations['8.3.0'](example, context) as ReturnType<
|
||||
SavedObjectMigrationFn<LensDocShape, LensDocShape>
|
||||
>;
|
||||
const visState = result.attributes.state.visualization as MetricState;
|
||||
const visState = result.attributes.state.visualization as LegacyMetricState;
|
||||
expect(visState.textAlign).toBe('center');
|
||||
expect(visState.titlePosition).toBe('bottom');
|
||||
expect(visState.size).toBe('xl');
|
||||
|
@ -2109,7 +2109,7 @@ describe('Lens migrations', () => {
|
|||
},
|
||||
context
|
||||
) as ReturnType<SavedObjectMigrationFn<LensDocShape, LensDocShape>>;
|
||||
const visState = result.attributes.state.visualization as MetricState;
|
||||
const visState = result.attributes.state.visualization as LegacyMetricState;
|
||||
expect(visState.textAlign).toBe('right');
|
||||
expect(visState.titlePosition).toBe('top');
|
||||
expect(visState.size).toBe('s');
|
||||
|
@ -2232,4 +2232,34 @@ describe('Lens migrations', () => {
|
|||
expect(visState.valueLabels).toBe('hide');
|
||||
});
|
||||
});
|
||||
|
||||
describe('8.5.0 migrates metric IDs', () => {
|
||||
const context = { log: { warn: () => {} } } as unknown as SavedObjectMigrationContext;
|
||||
const example = {
|
||||
type: 'lens',
|
||||
id: 'mocked-saved-object-id',
|
||||
attributes: {
|
||||
savedObjectId: '1',
|
||||
title: 'MyRenamedOps',
|
||||
description: '',
|
||||
visualizationType: 'lnsMetric',
|
||||
state: {},
|
||||
},
|
||||
} as unknown as SavedObjectUnsanitizedDoc<LensDocShape810>;
|
||||
|
||||
it('lnsMetric => lnsLegacyMetric', () => {
|
||||
const result = migrations['8.5.0'](example, context) as ReturnType<
|
||||
SavedObjectMigrationFn<LensDocShape, LensDocShape>
|
||||
>;
|
||||
expect(result.attributes.visualizationType).toBe('lnsLegacyMetric');
|
||||
});
|
||||
|
||||
it('lnsMetricNew => lnsMetric', () => {
|
||||
const result = migrations['8.5.0'](
|
||||
{ ...example, attributes: { ...example.attributes, visualizationType: 'lnsMetricNew' } },
|
||||
context
|
||||
) as ReturnType<SavedObjectMigrationFn<LensDocShape, LensDocShape>>;
|
||||
expect(result.attributes.visualizationType).toBe('lnsMetric');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -33,6 +33,7 @@ import {
|
|||
XYVisualizationState830,
|
||||
VisState810,
|
||||
VisState820,
|
||||
LensDocShape840,
|
||||
} from './types';
|
||||
import {
|
||||
commonRenameOperationsForFormula,
|
||||
|
@ -50,6 +51,7 @@ import {
|
|||
commonFixValueLabelsInXY,
|
||||
commonLockOldMetricVisSettings,
|
||||
commonPreserveOldLegendSizeDefault,
|
||||
commonMigrateMetricIds,
|
||||
} from './common_migrations';
|
||||
|
||||
interface LensDocShapePre710<VisualizationState = unknown> {
|
||||
|
@ -510,6 +512,11 @@ const preserveOldLegendSizeDefault: SavedObjectMigrationFn<LensDocShape810, Lens
|
|||
doc
|
||||
) => ({ ...doc, attributes: commonPreserveOldLegendSizeDefault(doc.attributes) });
|
||||
|
||||
const migrateMetricIds: SavedObjectMigrationFn<LensDocShape840, LensDocShape840> = (doc) => ({
|
||||
...doc,
|
||||
attributes: commonMigrateMetricIds(doc.attributes),
|
||||
});
|
||||
|
||||
const lensMigrations: SavedObjectMigrationMap = {
|
||||
'7.7.0': removeInvalidAccessors,
|
||||
// The order of these migrations matter, since the timefield migration relies on the aggConfigs
|
||||
|
@ -530,6 +537,7 @@ const lensMigrations: SavedObjectMigrationMap = {
|
|||
enhanceTableRowHeight
|
||||
),
|
||||
'8.3.0': flow(lockOldMetricVisSettings, preserveOldLegendSizeDefault, fixValueLabelsInXY),
|
||||
'8.5.0': flow(migrateMetricIds),
|
||||
};
|
||||
|
||||
export const getAllMigrations = (
|
||||
|
|
|
@ -269,3 +269,6 @@ export interface XYVisualizationState830 extends VisState820 {
|
|||
|
||||
export type VisStatePre830 = XYVisualizationStatePre830;
|
||||
export type VisState830 = XYVisualizationState830;
|
||||
|
||||
export type VisState840 = VisState830;
|
||||
export type LensDocShape840<VisualizationState = unknown> = LensDocShape830<VisualizationState>;
|
||||
|
|
|
@ -98,7 +98,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
it('lens metric chart', async () => {
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await a11y.testAppSnapshot();
|
||||
});
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
|
|||
field: 'bytes',
|
||||
});
|
||||
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
|
||||
await PageObjects.lens.waitForVisualization('legacyMtrVis');
|
||||
await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322');
|
||||
|
|
|
@ -83,7 +83,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
await PageObjects.navigationalSearch.searchFor('type:application lens');
|
||||
await PageObjects.navigationalSearch.clickOnOption(0);
|
||||
await PageObjects.lens.waitForEmptyWorkspace();
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis');
|
||||
});
|
||||
it('preserves time range', async () => {
|
||||
|
@ -120,7 +120,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
await PageObjects.visualize.waitForGroupsSelectPage();
|
||||
await PageObjects.visualize.clickVisType('lens');
|
||||
await PageObjects.lens.waitForEmptyWorkspace();
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis');
|
||||
|
||||
const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes();
|
||||
|
|
|
@ -99,7 +99,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
await PageObjects.lens.switchToVisualization('lnsDatatable');
|
||||
expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('Maximum of bytes');
|
||||
expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('19,986');
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986');
|
||||
});
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
field: 'bytes',
|
||||
});
|
||||
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
|
||||
await PageObjects.lens.waitForVisualization('legacyMtrVis');
|
||||
await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322');
|
||||
|
@ -301,7 +301,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
field: 'bytes',
|
||||
});
|
||||
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
|
||||
await PageObjects.lens.waitForVisualization('legacyMtrVis');
|
||||
await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322');
|
||||
|
@ -347,7 +347,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
field: 'bytes',
|
||||
});
|
||||
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
|
||||
await PageObjects.lens.waitForVisualization('legacyMtrVis');
|
||||
await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322');
|
||||
|
|
|
@ -143,7 +143,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
it('should render metric', async () => {
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.waitForVisualization('legacyMtrVis');
|
||||
await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322');
|
||||
});
|
||||
|
|
|
@ -65,7 +65,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
await PageObjects.visualize.clickVisType('lens');
|
||||
await PageObjects.lens.goToTimeRange();
|
||||
|
||||
await PageObjects.lens.switchToVisualization('lnsMetricNew', 'Metric');
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric', 'Metric');
|
||||
|
||||
await PageObjects.lens.configureDimension({
|
||||
dimension: 'lnsMetric_primaryMetricDimensionPanel > lns-empty-dimension',
|
||||
|
|
|
@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
it('should allow seamless transition to and from table view', async () => {
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.assertLegacyMetric('Sum of bytes', '16,788');
|
||||
await PageObjects.lens.switchToVisualization('lnsDatatable');
|
||||
expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('Sum of bytes');
|
||||
|
@ -84,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|||
await PageObjects.visualize.clickVisType('lens');
|
||||
await PageObjects.lens.goToTimeRange();
|
||||
await PageObjects.lens.switchDataPanelIndexPattern('lens_regular_data');
|
||||
await PageObjects.lens.switchToVisualization('lnsMetric');
|
||||
await PageObjects.lens.switchToVisualization('lnsLegacyMetric');
|
||||
await PageObjects.lens.configureDimension({
|
||||
dimension: 'lns-empty-dimension',
|
||||
operation: 'sum',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue