Skip to content

Commit 8eb8fac

Browse files
committed
Fix all tests I could find
1 parent 6365ab6 commit 8eb8fac

9 files changed

Lines changed: 77 additions & 70 deletions

File tree

x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/config_panel_wrapper.tsx

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ function LayerPanels(
158158
className="lnsConfigPanel__addLayerBtn"
159159
fullWidth
160160
size="s"
161-
data-test-subj={`lnsXY_layer_add`}
161+
data-test-subj="lnsXY_layer_add"
162162
aria-label={i18n.translate('xpack.lens.xyChart.addLayerButton', {
163163
defaultMessage: 'Add layer',
164164
})}
@@ -236,20 +236,32 @@ function LayerPanel(
236236
const [popoverState, setPopoverState] = useState<{
237237
isOpen: boolean;
238238
openId: string | null;
239+
addingToDimensionId: string | null;
239240
}>({
240241
isOpen: false,
241242
openId: null,
243+
addingToDimensionId: null,
242244
});
243245

244246
const { dimensions } = activeVisualization.getLayerOptions(layerVisualizationConfigProps);
245247
const isEmptyLayer = !dimensions.some(d => d.accessors.length > 0);
246248

247-
function wrapInPopover(id: string, trigger: React.ReactElement, panel: React.ReactElement) {
249+
function wrapInPopover(
250+
id: string,
251+
dimensionId: string,
252+
trigger: React.ReactElement,
253+
panel: React.ReactElement
254+
) {
255+
const noMatch = popoverState.isOpen ? !dimensions.some(d => d.accessors.includes(id)) : false;
248256
return (
249257
<EuiPopover
250-
isOpen={popoverState.isOpen && popoverState.openId === id}
258+
isOpen={
259+
popoverState.isOpen &&
260+
(popoverState.openId === id ||
261+
(noMatch && popoverState.addingToDimensionId === dimensionId))
262+
}
251263
closePopover={() => {
252-
setPopoverState({ isOpen: false, openId: null });
264+
setPopoverState({ isOpen: false, openId: null, addingToDimensionId: null });
253265
}}
254266
button={trigger}
255267
display="block"
@@ -308,7 +320,7 @@ function LayerPanel(
308320
<DragDrop
309321
key={accessor}
310322
className="lnsConfigPanel__dimension"
311-
data-test-subj="indexPattern-dropTarget"
323+
data-test-subj={dimension.dataTestSubj}
312324
droppable={
313325
dragDropContext.dragging &&
314326
layerDatasource.canHandleDrop({
@@ -328,22 +340,26 @@ function LayerPanel(
328340
>
329341
{wrapInPopover(
330342
accessor,
343+
dimension.dimensionId,
331344
<NativeRenderer
332345
render={props.datasourceMap[datasourceId].renderDimensionTrigger}
333346
nativeProps={{
334347
...layerDatasourceConfigProps,
335348
columnId: accessor,
336349
filterOperations: dimension.filterOperations,
350+
suggestedPriority: dimension.suggestedPriority,
337351
togglePopover: () => {
338352
if (popoverState.isOpen) {
339353
setPopoverState({
340354
isOpen: false,
341355
openId: null,
356+
addingToDimensionId: null,
342357
});
343358
} else {
344359
setPopoverState({
345360
isOpen: true,
346361
openId: accessor,
362+
addingToDimensionId: null, // not set for existing dimension
347363
});
348364
}
349365
},
@@ -397,7 +413,7 @@ function LayerPanel(
397413
{dimension.supportsMoreColumns ? (
398414
<DragDrop
399415
className="lnsIndexPatternDimensionPanel"
400-
data-test-subj="indexPattern-dropTarget"
416+
data-test-subj={dimension.dataTestSubj}
401417
droppable={
402418
dragDropContext.dragging &&
403419
layerDatasource.canHandleDrop({
@@ -426,10 +442,11 @@ function LayerPanel(
426442
}}
427443
>
428444
{wrapInPopover(
429-
dimension.dimensionLabel,
445+
newId,
446+
dimension.dimensionId,
430447
<EuiButtonEmpty
431448
iconType="plusInCircleFilled"
432-
data-test-subj="indexPattern-configure-dimension"
449+
data-test-subj="lns-empty-dimension"
433450
aria-label={i18n.translate('xpack.lens.configure.addConfig', {
434451
defaultMessage: 'Add a configuration',
435452
})}
@@ -441,11 +458,13 @@ function LayerPanel(
441458
setPopoverState({
442459
isOpen: false,
443460
openId: null,
461+
addingToDimensionId: null,
444462
});
445463
} else {
446464
setPopoverState({
447465
isOpen: true,
448-
openId: dimension.dimensionLabel,
466+
openId: newId,
467+
addingToDimensionId: dimension.dimensionId,
449468
});
450469
}
451470
}}
@@ -463,6 +482,7 @@ function LayerPanel(
463482
core: props.core,
464483
columnId: newId,
465484
filterOperations: dimension.filterOperations,
485+
suggestedPriority: dimension.suggestedPriority,
466486

467487
setState: (newState: unknown) => {
468488
props.updateVisualization(
@@ -474,6 +494,11 @@ function LayerPanel(
474494
})
475495
);
476496
props.updateDatasource(datasourceId, newState);
497+
setPopoverState({
498+
isOpen: true,
499+
openId: newId,
500+
addingToDimensionId: null, // clear now that dimension exists
501+
});
477502
},
478503
}}
479504
/>

x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ describe('editor_frame', () => {
13841384
act(() => {
13851385
instance
13861386
.find(DragDrop)
1387-
.filter('[data-test-subj="indexPattern-dropTarget"]')
1387+
.filter('[data-test-subj="mockVisA"]')
13881388
.prop('onDrop')!({
13891389
indexPatternId: '1',
13901390
field: {},

x-pack/legacy/plugins/lens/public/editor_frame_service/mocks.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function createMockVisualization(): jest.Mocked<Visualization> {
3333
getPersistableState: jest.fn(_state => _state),
3434
getSuggestions: jest.fn(_options => []),
3535
initialize: jest.fn((_frame, _state?) => ({})),
36-
getLayerOptions: jest.fn(() => ({
36+
getLayerOptions: jest.fn(props => ({
3737
dimensions: [
3838
{
3939
layerId: 'layer1',
@@ -42,6 +42,7 @@ export function createMockVisualization(): jest.Mocked<Visualization> {
4242
supportsMoreColumns: true,
4343
accessors: [],
4444
filterOperations: jest.fn(() => true),
45+
dataTestSubj: 'mockVisA',
4546
},
4647
],
4748
})),

x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.tsx

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import _ from 'lodash';
88
import React, { memo } from 'react';
9+
import { i18n } from '@kbn/i18n';
10+
import { EuiLink } from '@elastic/eui';
911
import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'src/core/public';
1012
import { IStorageWrapper } from 'src/plugins/kibana_utils/public';
1113
import {
@@ -17,7 +19,7 @@ import {
1719
import { DataPublicPluginStart } from '../../../../../../../src/plugins/data/public';
1820
import { IndexPatternColumn, OperationType } from '../indexpattern';
1921
import { getAvailableOperationsByMetadata, buildColumn, changeField } from '../operations';
20-
import { PopoverEditor, PopoverTrigger } from './popover_editor';
22+
import { PopoverEditor } from './popover_editor';
2123
import { changeColumn } from '../state_helpers';
2224
import { isDraggedField, hasField } from '../utils';
2325
import { IndexPatternPrivateState, IndexPatternField } from '../types';
@@ -179,20 +181,37 @@ export const IndexPatternDimensionTriggerComponent = function IndexPatternDimens
179181
props: IndexPatternDimensionTriggerProps
180182
) {
181183
const layerId = props.layerId;
182-
const currentIndexPattern =
183-
props.state.indexPatterns[props.state.layers[layerId]?.indexPatternId];
184-
const operationFieldSupportMatrix = getOperationFieldSupportMatrix(props);
185184

186185
const selectedColumn: IndexPatternColumn | null =
187186
props.state.layers[layerId].columns[props.columnId] || null;
188187

188+
const { columnId, uniqueLabel } = props;
189189
return (
190-
<PopoverTrigger
191-
{...props}
192-
currentIndexPattern={currentIndexPattern}
193-
selectedColumn={selectedColumn}
194-
operationFieldSupportMatrix={operationFieldSupportMatrix}
195-
/>
190+
<div
191+
id={columnId}
192+
className={[
193+
'lnsPopoverEditor',
194+
selectedColumn ? 'lnsPopoverEditor__anchor' : 'lnsPopoverEditor__link',
195+
].join(' ')}
196+
>
197+
{selectedColumn ? (
198+
<EuiLink
199+
className="lnsPopoverEditor__link"
200+
onClick={() => {
201+
props.togglePopover();
202+
}}
203+
data-test-subj="lns-dimensionTrigger"
204+
aria-label={i18n.translate('xpack.lens.configure.editConfig', {
205+
defaultMessage: 'Edit configuration',
206+
})}
207+
title={i18n.translate('xpack.lens.configure.editConfig', {
208+
defaultMessage: 'Edit configuration',
209+
})}
210+
>
211+
{uniqueLabel}
212+
</EuiLink>
213+
) : null}
214+
</div>
196215
);
197216
};
198217

x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/popover_editor.tsx

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,11 @@ import {
1414
EuiCallOut,
1515
EuiFormRow,
1616
EuiFieldText,
17-
EuiLink,
1817
EuiSpacer,
1918
} from '@elastic/eui';
2019
import classNames from 'classnames';
2120
import { IndexPatternColumn, OperationType } from '../indexpattern';
22-
import {
23-
IndexPatternDimensionTriggerProps,
24-
IndexPatternDimensionEditorProps,
25-
OperationFieldSupportMatrix,
26-
} from './dimension_panel';
21+
import { IndexPatternDimensionEditorProps, OperationFieldSupportMatrix } from './dimension_panel';
2722
import {
2823
operationDefinitionMap,
2924
getOperationDisplay,
@@ -40,12 +35,6 @@ import { FormatSelector } from './format_selector';
4035

4136
const operationPanels = getOperationDisplay();
4237

43-
export interface PopoverTriggerProps extends IndexPatternDimensionTriggerProps {
44-
selectedColumn?: IndexPatternColumn;
45-
operationFieldSupportMatrix: OperationFieldSupportMatrix;
46-
currentIndexPattern: IndexPattern;
47-
}
48-
4938
export interface PopoverEditorProps extends IndexPatternDimensionEditorProps {
5039
selectedColumn?: IndexPatternColumn;
5140
operationFieldSupportMatrix: OperationFieldSupportMatrix;
@@ -380,38 +369,6 @@ export function PopoverEditor(props: PopoverEditorProps) {
380369
</EuiFlexGroup>
381370
</EuiFlexItem>
382371
</EuiFlexGroup>
383-
)
384-
</div>
385-
);
386-
}
387-
388-
export function PopoverTrigger(props: PopoverTriggerProps) {
389-
const { selectedColumn, columnId, uniqueLabel } = props;
390-
return (
391-
<div
392-
id={columnId}
393-
className={[
394-
'lnsPopoverEditor',
395-
selectedColumn ? 'lnsPopoverEditor__anchor' : 'lnsPopoverEditor__link',
396-
].join(' ')}
397-
>
398-
{selectedColumn ? (
399-
<EuiLink
400-
className="lnsPopoverEditor__link"
401-
onClick={() => {
402-
props.togglePopover();
403-
}}
404-
data-test-subj="indexPattern-configure-dimension"
405-
aria-label={i18n.translate('xpack.lens.configure.editConfig', {
406-
defaultMessage: 'Edit configuration',
407-
})}
408-
title={i18n.translate('xpack.lens.configure.editConfig', {
409-
defaultMessage: 'Edit configuration',
410-
})}
411-
>
412-
{uniqueLabel}
413-
</EuiLink>
414-
) : null}
415372
</div>
416373
);
417374
}

x-pack/legacy/plugins/lens/public/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ interface VisualizationDimensionConfig {
292292
hideGrouping?: boolean;
293293

294294
required?: boolean;
295+
296+
dataTestSubj?: string;
295297
}
296298

297299
/**

x-pack/legacy/plugins/lens/public/xy_visualization/to_expression.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,15 @@ export const buildExpression = (
164164

165165
hide: [Boolean(layer.hide)],
166166

167-
xAccessor: [layer.xAccessor],
167+
xAccessor: [layer.xAccessor!],
168168
yScaleType: [
169169
getScaleType(metadata[layer.layerId][layer.accessors[0]], ScaleType.Ordinal),
170170
],
171171
xScaleType: [
172172
getScaleType(metadata[layer.layerId][layer.xAccessor!], ScaleType.Linear),
173173
],
174174
isHistogram: [isHistogramDimension],
175-
splitAccessor: [layer.splitAccessor],
175+
splitAccessor: [layer.splitAccessor!],
176176
seriesType: [layer.seriesType],
177177
accessors: layer.accessors,
178178
columnToLabel: [JSON.stringify(columnToLabel)],

x-pack/legacy/plugins/lens/public/xy_visualization/xy_visualization.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ export const xyVisualization: Visualization<State, PersistableState> = {
160160
suggestedPriority: 1,
161161
supportsMoreColumns: !layer.xAccessor,
162162
required: true,
163+
dataTestSubj: 'lnsXY_xDimensionPanel',
163164
},
164165
{
165166
dimensionId: 'y',
@@ -170,6 +171,7 @@ export const xyVisualization: Visualization<State, PersistableState> = {
170171
filterOperations: isNumericMetric,
171172
supportsMoreColumns: true,
172173
required: true,
174+
dataTestSubj: 'lnsXY_yDimensionPanel',
173175
},
174176
{
175177
dimensionId: 'breakdown',
@@ -180,6 +182,7 @@ export const xyVisualization: Visualization<State, PersistableState> = {
180182
filterOperations: isBucketed,
181183
suggestedPriority: 0,
182184
supportsMoreColumns: !layer.splitAccessor,
185+
dataTestSubj: 'lnsXY_splitDimensionPanel',
183186
},
184187
],
185188
};

x-pack/test/functional/apps/lens/smokescreen.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,21 @@ export default function({ getService, getPageObjects, ...rest }: FtrProviderCont
7777

7878
await PageObjects.lens.configureDimension({
7979
dimension:
80-
'[data-test-subj="lnsXY_xDimensionPanel"] [data-test-subj="indexPattern-configure-dimension"]',
80+
'[data-test-subj="lnsXY_xDimensionPanel"] [data-test-subj="lns-empty-dimension"]',
8181
operation: 'date_histogram',
8282
field: '@timestamp',
8383
});
8484

8585
await PageObjects.lens.configureDimension({
8686
dimension:
87-
'[data-test-subj="lnsXY_yDimensionPanel"] [data-test-subj="indexPattern-configure-dimension"]',
87+
'[data-test-subj="lnsXY_yDimensionPanel"] [data-test-subj="lns-empty-dimension"]',
8888
operation: 'avg',
8989
field: 'bytes',
9090
});
9191

9292
await PageObjects.lens.configureDimension({
9393
dimension:
94-
'[data-test-subj="lnsXY_splitDimensionPanel"] [data-test-subj="indexPattern-configure-dimension"]',
94+
'[data-test-subj="lnsXY_splitDimensionPanel"] [data-test-subj="lns-empty-dimension"]',
9595
operation: 'terms',
9696
field: 'ip',
9797
});

0 commit comments

Comments
 (0)