Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[XY] Mark size configuration. #130361

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
9388bba
added xy plugin.
Kuznietsov Mar 8, 2022
8df9659
Merge branch 'main' into chart_expressions-xy
kibanamachine Mar 9, 2022
ab72728
Added expressionXY limits.
Kuznietsov Mar 9, 2022
5747322
Merge branch 'chart_expressions-xy' of github.com:Kunzetsov/kibana in…
Kuznietsov Mar 9, 2022
b4ee9c1
Added xy expression functions to the expression_xy plugin.
Kuznietsov Mar 10, 2022
400845d
Moved xy to a separate plugin.
Kuznietsov Mar 11, 2022
b2090f3
Small refactoring.
Kuznietsov Mar 11, 2022
33a06fa
Fixed types.
Kuznietsov Mar 14, 2022
d94fa4f
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 14, 2022
663e093
Fixed import of scss.
Kuznietsov Mar 14, 2022
cbffe77
Fixed imports.
Kuznietsov Mar 14, 2022
389f933
Added required plugins.
Kuznietsov Mar 14, 2022
90aa97a
Fixed import
Kuznietsov Mar 14, 2022
1d3a264
Fixed types.
Kuznietsov Mar 14, 2022
a78d45d
Changed expression names.
Kuznietsov Mar 14, 2022
35cab91
Fixed bugs, caused by the refactoring process.
Kuznietsov Mar 14, 2022
847b3c4
Merge branch 'main' into chart_expressions-xy
kibanamachine Mar 15, 2022
ed7f8ea
Fixed lens snapshots.
Kuznietsov Mar 15, 2022
b6daa5d
Removed new line.
Kuznietsov Mar 15, 2022
bda6524
Merge branch 'chart_expressions-xy' of github.com:Kunzetsov/kibana in…
Kuznietsov Mar 15, 2022
c8d40fe
Fixed xy_chart tests.
Kuznietsov Mar 15, 2022
5fed60c
Added lazy loading for xy chart.
Kuznietsov Mar 15, 2022
dc195b2
Fixed xy chart test.
Kuznietsov Mar 15, 2022
d39681f
Fixed broken chart selectors.
Kuznietsov Mar 16, 2022
b901d68
Fixed dashboard tests.
Kuznietsov Mar 16, 2022
d327dfe
dashboard test fixed.
Kuznietsov Mar 16, 2022
b500961
Fixed heatmap vis.
Kuznietsov Mar 16, 2022
7a25b74
Smokescreen test fixed.
Kuznietsov Mar 16, 2022
0004794
more fixes.
Kuznietsov Mar 16, 2022
fc8c0b3
async dashboard tests fixed.
Kuznietsov Mar 16, 2022
98454ad
Fixed xy smokescreen tests selectors.
Kuznietsov Mar 16, 2022
05cccac
fixed show_underlying_data tests.
Kuznietsov Mar 16, 2022
bcf5201
Updated snapshots.
Kuznietsov Mar 16, 2022
99dc773
updated limits.
Kuznietsov Mar 16, 2022
94a5850
Fixed more selectors
Kuznietsov Mar 16, 2022
bfea6f1
Fixed persistent context test.
Kuznietsov Mar 16, 2022
7cb4db4
Fixed some more test at ml.
Kuznietsov Mar 16, 2022
98e8661
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 16, 2022
5ea9cc5
Fixed types and imports
Kuznietsov Mar 16, 2022
4f72658
Fixed handlers.inspectorAdapters.tables.logDatatable
Kuznietsov Mar 16, 2022
ee4ec20
Fixed logDatatable
Kuznietsov Mar 17, 2022
e72005c
Translations fixed.
Kuznietsov Mar 17, 2022
902972d
Fixed "Visualize App ... cleans filters and query" test.
Kuznietsov Mar 17, 2022
05b0f8d
Fixed "lens disable auto-apply tests" test.
Kuznietsov Mar 17, 2022
cae1e75
Updated dashboard tests.
Kuznietsov Mar 17, 2022
00c7e28
Fixed translations.
Kuznietsov Mar 17, 2022
0ad3793
Expression tests fixed.
Kuznietsov Mar 17, 2022
2fbe81f
Cleaned up expression_xy.
Kuznietsov Mar 17, 2022
e9c497f
cleaned up lens xy_visualization.
Kuznietsov Mar 17, 2022
ea299ec
fixed more tests.
Kuznietsov Mar 17, 2022
9ea2cbb
Fix of tsvb.
Kuznietsov Mar 17, 2022
46edc6b
Fixed more tests.
Kuznietsov Mar 17, 2022
672885c
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 17, 2022
f109200
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 17, 2022
498b34e
Fixed xy chart limits.
Kuznietsov Mar 18, 2022
eeefc8b
Merge branch 'chart_expressions-xy' of github.com:Kunzetsov/kibana in…
Kuznietsov Mar 18, 2022
e00f089
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 18, 2022
4996ea6
Fixed new tests.
Kuznietsov Mar 18, 2022
97bb678
Fixed types.
Kuznietsov Mar 18, 2022
df91d70
Added extended layers expressions.
Kuznietsov Mar 18, 2022
f91c8d5
Merge branch 'main' into chart_expressions-xy
kibanamachine Mar 20, 2022
0b6db50
Merge branch 'main' into chart_expressions-xy
kibanamachine Mar 21, 2022
d3065be
Added support of tables at layers.
Kuznietsov Mar 21, 2022
f49d5f4
Fixed tests.
Kuznietsov Mar 22, 2022
f45c81c
Fixed more tests.
Kuznietsov Mar 22, 2022
eb78296
Fixed lens types.
Kuznietsov Mar 22, 2022
bb91aee
Added tables to layers.
Kuznietsov Mar 23, 2022
3e6d15a
Checks fixed.
Kuznietsov Mar 23, 2022
ac86ab9
updated tests.
Kuznietsov Mar 23, 2022
75b2e91
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 23, 2022
5c9f160
Merge branch 'chart_expressions-xy' into chart_expressions-xy-extende…
Kuznietsov Mar 24, 2022
fe16d49
Fixed types.
Kuznietsov Mar 24, 2022
902dae6
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 24, 2022
21e34b4
First try to fix merge conflicts.
Kuznietsov Mar 24, 2022
9cc22c8
Fixed annotatations.
Kuznietsov Mar 25, 2022
a99a223
Fixed types.
Kuznietsov Mar 25, 2022
b553456
Updated snapshots
Kuznietsov Mar 25, 2022
60f5645
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 25, 2022
dec0d18
Fixed tests.
Kuznietsov Mar 25, 2022
628ade6
Fixed dependencies.
Kuznietsov Mar 25, 2022
cc63956
Fixed i18n.
Kuznietsov Mar 25, 2022
0e4092d
Moved XY state types to lens.
Kuznietsov Mar 25, 2022
ef30205
Fixed more types.
Kuznietsov Mar 25, 2022
f29bdcf
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 28, 2022
8139986
Update src/plugins/chart_expressions/expression_xy/README.md
Kuznietsov Mar 28, 2022
8307b73
[CI] Auto-commit changed files from 'node scripts/build_plugin_list_d…
kibanamachine Mar 28, 2022
27af05d
Merge branch 'chart_expressions-xy' into chart_expressions-xy-extende…
Kuznietsov Mar 28, 2022
500fb78
Removed yConfig from *Layers types
Kuznietsov Mar 28, 2022
839b023
Fixed styles.
Kuznietsov Mar 28, 2022
b61e59a
Fixed types.
Kuznietsov Mar 28, 2022
53a6659
Removed not used utils and styles.
Kuznietsov Mar 28, 2022
490159a
Merge branch 'main' into chart_expressions-xy
Kuznietsov Mar 28, 2022
38982d7
Merge branch 'chart_expressions-xy' into chart_expressions-xy-extende…
Kuznietsov Mar 29, 2022
73df8aa
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Mar 29, 2022
65f9520
Fixed types and tests.
Kuznietsov Mar 29, 2022
9a97062
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Mar 29, 2022
d7a014a
updated size.
Kuznietsov Mar 29, 2022
1563ea0
Added right behavior, related to the tables, comming from the express…
Kuznietsov Mar 30, 2022
363578b
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Mar 30, 2022
5e99314
Fixed reference lines.
Kuznietsov Mar 31, 2022
69eb3fd
Fixed jsdoc.
Kuznietsov Mar 31, 2022
a80a660
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Mar 31, 2022
ed03e2c
Added annotations to layeredXyVIs.
Kuznietsov Apr 1, 2022
c441652
Fixed limits.
Kuznietsov Apr 1, 2022
b200e37
Refactored the implementation to be reusable.
Kuznietsov Apr 1, 2022
27f44e2
Merge branch 'main' into chart_expressions-xy-extended_layers
kibanamachine Apr 4, 2022
8c2ea64
Fixed undefined layers.
Kuznietsov Apr 4, 2022
fb370d9
Fixed empty arrays problems.
Kuznietsov Apr 5, 2022
10c85fe
Fixed input translations and removed not used arguments.
Kuznietsov Apr 5, 2022
bb91cf8
Fixed missing required args error, and added required to arguments.
Kuznietsov Apr 5, 2022
a5d15e4
Simplified expression configuration.
Kuznietsov Apr 5, 2022
7bb36b0
Added strict to all the expressions.
Kuznietsov Apr 5, 2022
7979799
refactored code, according to the nit.
Kuznietsov Apr 5, 2022
595ace3
Moved dataLayer to the separate component.
Kuznietsov Apr 6, 2022
1baee1b
Fixed jest tests.
Kuznietsov Apr 7, 2022
a78a466
Fixed tests.
Kuznietsov Apr 7, 2022
5c89811
Refactored dataLayers helpers and xy_chart.
Kuznietsov Apr 7, 2022
b43a793
More fixes of the expression
Kuznietsov Apr 7, 2022
5f661b0
Fixed tests and snapshots.
Kuznietsov Apr 8, 2022
0b15a32
Icons at annotations and reference lines are strict.
Kuznietsov Apr 8, 2022
7bc0f95
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 12, 2022
c17026f
axis extent validation added.
Kuznietsov Apr 12, 2022
17ea44f
Added checks to the legend config.
Kuznietsov Apr 12, 2022
3111467
fillOpacity usage validation is added.
Kuznietsov Apr 12, 2022
bd282eb
Fixed valueLabels argument options. Removed not used. Added validatio…
Kuznietsov Apr 12, 2022
d35c9eb
Removed not used tests and imports.
Kuznietsov Apr 12, 2022
2fb11f4
Fixed valueLabels and added migrations.
Kuznietsov Apr 13, 2022
54e1b66
Fixed type checks.
Kuznietsov Apr 13, 2022
dbd4a8f
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 13, 2022
e4a40dc
Added test for the migrations.
Kuznietsov Apr 13, 2022
05f854f
Fixed imports.
Kuznietsov Apr 13, 2022
e50bc1f
Fixed types
Kuznietsov Apr 13, 2022
2f74299
Fixed i18n checks.
Kuznietsov Apr 14, 2022
786bbf1
Merge branch 'main' into chart_expressions-xy-extended_layers
kibanamachine Apr 14, 2022
6494d52
Added markSizeAccessor and markSizeRatio.
Kuznietsov Apr 14, 2022
cabce74
Merge branch 'main' into chart_expressions-xy-mark_size_accessor
Kuznietsov Apr 15, 2022
bd4293a
Added markSizeRatio and markSizeAccessor validation.
Kuznietsov Apr 15, 2022
6def533
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 15, 2022
55664d9
Merge branch 'chart_expressions-xy-extended_layers' into chart_expres…
Kuznietsov Apr 15, 2022
41afad4
Fixed types.
Kuznietsov Apr 15, 2022
7147b6e
Updated validation error text.
Kuznietsov Apr 15, 2022
f5b4aee
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 18, 2022
02ba394
Fixed imports and types.
Kuznietsov Apr 18, 2022
7fac94d
Merge branch 'chart_expressions-xy-extended_layers' into chart_expres…
Kuznietsov Apr 18, 2022
dfccec6
[CI] Auto-commit changed files from 'node scripts/eslint --no-cache -…
kibanamachine Apr 18, 2022
aa26d4f
Merge branch 'chart_expressions-xy-extended_layers' into chart_expres…
Kuznietsov Apr 18, 2022
245d8a7
Fixed import/
Kuznietsov Apr 18, 2022
acabb8f
Update src/plugins/chart_expressions/expression_xy/common/expression_…
Kuznietsov Apr 19, 2022
435f89a
Removed extra extends.
Kuznietsov Apr 19, 2022
eec1c42
Update src/plugins/chart_expressions/expression_xy/common/expression_…
Kuznietsov Apr 19, 2022
471546e
Added guard.
Kuznietsov Apr 19, 2022
d19a331
Merge branch 'chart_expressions-xy-extended_layers' of github.com:Kun…
Kuznietsov Apr 19, 2022
b52c1b5
Fixed the code duplication.
Kuznietsov Apr 19, 2022
844c7b1
Removed table from the annotation layer.
Kuznietsov Apr 19, 2022
612ce22
Changed the `convertActiveDataFromIndexesToLayers` location.
Kuznietsov Apr 19, 2022
9d63b48
Added tests for convertActiveDataFromIndexesToLayers
Kuznietsov Apr 19, 2022
a947ff7
Reduced the bundle size a little bit.
Kuznietsov Apr 19, 2022
9eaecc1
Reused strings and args.
Kuznietsov Apr 19, 2022
7a8c452
Refactored expression functions. Added asynchronous behavior.
Kuznietsov Apr 19, 2022
3c4a3dd
Fixed tests.
Kuznietsov Apr 19, 2022
04c5e6d
Updated limits.
Kuznietsov Apr 19, 2022
1310c15
Updated the limit.
Kuznietsov Apr 19, 2022
6d62065
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 19, 2022
e97b67c
Fixed types.
Kuznietsov Apr 19, 2022
822bf73
fixed types.
Kuznietsov Apr 19, 2022
acc63a9
Turned back layerIds.
Kuznietsov Apr 20, 2022
40ba7c0
Removed convertActiveData from Lens.
Kuznietsov Apr 20, 2022
cb25e61
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 20, 2022
7cd49d0
Added test to the layerIds generator.
Kuznietsov Apr 20, 2022
0b533d1
Merge branch 'chart_expressions-xy-extended_layers' into chart_expres…
Kuznietsov Apr 21, 2022
6cd5376
Merge branch 'main' into chart_expressions-xy-extended_layers
Kuznietsov Apr 21, 2022
128643d
Fixed types.
Kuznietsov Apr 21, 2022
b638ad7
Merge branch 'chart_expressions-xy-extended_layers' into chart_expres…
Kuznietsov Apr 21, 2022
23bbd24
Moved translation to the i18n folder.
Kuznietsov Apr 21, 2022
f54ca2d
Moved strings to i18n folder.
Kuznietsov Apr 21, 2022
0226d6c
Merge branch 'main' into chart_expressions-xy-mark_size_accessor
Kuznietsov May 4, 2022
b610f14
Fixed types.
Kuznietsov May 4, 2022
4c8624f
Turned back removed extentValidation.
Kuznietsov May 4, 2022
07b7fe8
Added async loading of the expression fn bodies.
Kuznietsov May 4, 2022
dfd5718
Fixed tests.
Kuznietsov May 4, 2022
c5592e6
Added tests for the case when markSizeRatio and markSizeAccessor are …
Kuznietsov May 4, 2022
3f0ab51
Added tests for the expression functions.
Kuznietsov May 4, 2022
eec417b
Added tests of the layeredXyVis expression fn.
Kuznietsov May 4, 2022
04a518a
Added tests for the extendedDataLayer.
Kuznietsov May 4, 2022
a971d9a
Merge branch 'main' into chart_expressions-xy-mark_size_accessor
Kuznietsov May 17, 2022
7bd31f3
Added markSizeAccessor to extendedDataLayer and xyVis.
Kuznietsov May 17, 2022
9134293
Merge branch 'main' into chart_expressions-xy-mark_size_accessor
Kuznietsov May 18, 2022
8df17dd
Fixed markSizeRatio default value.
Kuznietsov May 18, 2022
34ff430
Added `size` support from `pointseries`.
Kuznietsov May 18, 2022
4a4c23e
Fixed tests.
Kuznietsov May 18, 2022
3af18f5
Types fixed.
Kuznietsov May 18, 2022
ec0d8ac
Merge branch 'main' into chart_expressions-xy-mark_size_accessor
Kuznietsov May 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { Position } from '@elastic/charts';
import type { PaletteOutput } from '@kbn/coloring';
import { Datatable, DatatableRow } from '@kbn/expressions-plugin';
import { LayerTypes } from '../constants';
import { DataLayerConfig, XYProps } from '../types';
import { DataLayerConfig, ExtendedDataLayerConfig, XYProps } from '../types';

export const mockPaletteOutput: PaletteOutput = {
type: 'palette',
Expand All @@ -35,7 +35,7 @@ export const createSampleDatatableWithRows = (rows: DatatableRow[]): Datatable =
id: 'c',
name: 'c',
meta: {
type: 'date',
type: 'string',
field: 'order_date',
sourceParams: { type: 'date-histogram', params: { interval: 'auto' } },
params: { id: 'string' },
Expand All @@ -61,6 +61,21 @@ export const sampleLayer: DataLayerConfig = {
table: createSampleDatatableWithRows([]),
};

export const sampleExtendedLayer: ExtendedDataLayerConfig = {
layerId: 'first',
type: 'extendedDataLayer',
layerType: LayerTypes.DATA,
seriesType: 'line',
xAccessor: 'c',
accessors: ['a', 'b'],
splitAccessor: 'd',
columnToLabel: '{"a": "Label A", "b": "Label B", "d": "Label D"}',
xScaleType: 'ordinal',
isHistogram: false,
palette: mockPaletteOutput,
table: createSampleDatatableWithRows([]),
};

export const createArgsWithLayers = (
layers: DataLayerConfig | DataLayerConfig[] = sampleLayer
): XYProps => ({
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ export const commonXYArgs: CommonXYFn['args'] = {
types: ['string'],
help: strings.getAriaLabelHelp(),
},
markSizeRatio: {
types: ['number'],
help: strings.getMarkSizeRatioHelp(),
},
minTimeBarInterval: {
types: ['string'],
help: strings.getMinTimeBarIntervalHelp(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

import { ExtendedDataLayerArgs } from '../types';
import { createMockExecutionContext } from '@kbn/expressions-plugin/common/mocks';
import { mockPaletteOutput, sampleArgs } from '../__mocks__';
import { LayerTypes } from '../constants';
import { extendedDataLayerFunction } from './extended_data_layer';

describe('extendedDataLayerConfig', () => {
test('produces the correct arguments', async () => {
const { data } = sampleArgs();
const args: ExtendedDataLayerArgs = {
seriesType: 'line',
xAccessor: 'c',
accessors: ['a', 'b'],
splitAccessor: 'd',
xScaleType: 'linear',
isHistogram: false,
palette: mockPaletteOutput,
markSizeAccessor: 'b',
};

const result = await extendedDataLayerFunction.fn(data, args, createMockExecutionContext());

expect(result).toEqual({
type: 'extendedDataLayer',
layerType: LayerTypes.DATA,
...args,
table: data,
});
});

test('throws the error if markSizeAccessor is provided to the not line/area chart', async () => {
const { data } = sampleArgs();
const args: ExtendedDataLayerArgs = {
seriesType: 'bar',
xAccessor: 'c',
accessors: ['a', 'b'],
splitAccessor: 'd',
xScaleType: 'linear',
isHistogram: false,
palette: mockPaletteOutput,
markSizeAccessor: 'b',
};

expect(
extendedDataLayerFunction.fn(data, args, createMockExecutionContext())
).rejects.toThrowErrorMatchingSnapshot();
});

test("throws the error if markSizeAccessor doesn't have the corresponding column in the table", async () => {
const { data } = sampleArgs();
const args: ExtendedDataLayerArgs = {
seriesType: 'line',
xAccessor: 'c',
accessors: ['a', 'b'],
splitAccessor: 'd',
xScaleType: 'linear',
isHistogram: false,
palette: mockPaletteOutput,
markSizeAccessor: 'nonsense',
};

expect(
extendedDataLayerFunction.fn(data, args, createMockExecutionContext())
).rejects.toThrowErrorMatchingSnapshot();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ export const extendedDataLayerFunction: ExtendedDataLayerFn = {
help: strings.getAccessorsHelp(),
multi: true,
},
markSizeAccessor: {
types: ['string'],
help: strings.getMarkSizeAccessorHelp(),
},
table: {
types: ['datatable'],
help: strings.getTableHelp(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { validateAccessor } from '@kbn/visualizations-plugin/common/utils';
import { ExtendedDataLayerArgs, ExtendedDataLayerFn } from '../types';
import { EXTENDED_DATA_LAYER, LayerTypes } from '../constants';
import { getAccessors, normalizeTable } from '../helpers';
import { validateMarkSizeForChartType } from './validate';

export const extendedDataLayerFn: ExtendedDataLayerFn['fn'] = async (data, args, context) => {
const table = args.table ?? data;
Expand All @@ -18,6 +19,8 @@ export const extendedDataLayerFn: ExtendedDataLayerFn['fn'] = async (data, args,
validateAccessor(accessors.xAccessor, table.columns);
validateAccessor(accessors.splitAccessor, table.columns);
accessors.accessors.forEach((accessor) => validateAccessor(accessor, table.columns));
validateMarkSizeForChartType(args.markSizeAccessor, args.seriesType);
validateAccessor(args.markSizeAccessor, table.columns);

const normalizedTable = normalizeTable(table, accessors.xAccessor);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

import { layeredXyVisFunction } from '.';
import { createMockExecutionContext } from '@kbn/expressions-plugin/common/mocks';
import { sampleArgs, sampleExtendedLayer } from '../__mocks__';
import { XY_VIS } from '../constants';

describe('layeredXyVis', () => {
test('it renders with the specified data and args', async () => {
const { data, args } = sampleArgs();
const { layers, ...rest } = args;
const result = await layeredXyVisFunction.fn(
data,
{ ...rest, layers: [sampleExtendedLayer] },
createMockExecutionContext()
);

expect(result).toEqual({
type: 'render',
as: XY_VIS,
value: { args: { ...rest, layers: [sampleExtendedLayer] } },
});
});

test('it should throw error if markSizeRatio is lower then 1 or greater then 100', async () => {
const { data, args } = sampleArgs();
const { layers, ...rest } = args;

expect(
layeredXyVisFunction.fn(
data,
{
...rest,
markSizeRatio: 0,
layers: [sampleExtendedLayer],
},
createMockExecutionContext()
)
).rejects.toThrowErrorMatchingSnapshot();

expect(
layeredXyVisFunction.fn(
data,
{
...rest,
markSizeRatio: 101,
layers: [sampleExtendedLayer],
},
createMockExecutionContext()
)
).rejects.toThrowErrorMatchingSnapshot();
});

test('it should throw error if markSizeRatio is specified if no markSizeAccessor is present', async () => {
const { data, args } = sampleArgs();
const { layers, ...rest } = args;

expect(
layeredXyVisFunction.fn(
data,
{
...rest,
markSizeRatio: 10,
layers: [sampleExtendedLayer],
},
createMockExecutionContext()
)
).rejects.toThrowErrorMatchingSnapshot();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ import { XY_VIS_RENDERER } from '../constants';
import { appendLayerIds, getDataLayers } from '../helpers';
import { LayeredXyVisFn } from '../types';
import { logDatatables } from '../utils';
import { validateMinTimeBarInterval, hasBarLayer } from './validate';
import {
validateMarkSizeRatioLimits,
validateMinTimeBarInterval,
hasBarLayer,
errors,
} from './validate';

export const layeredXyVisFn: LayeredXyVisFn['fn'] = async (data, args, handlers) => {
const layers = appendLayerIds(args.layers ?? [], 'layers');
Expand All @@ -19,7 +24,14 @@ export const layeredXyVisFn: LayeredXyVisFn['fn'] = async (data, args, handlers)

const dataLayers = getDataLayers(layers);
const hasBar = hasBarLayer(dataLayers);
validateMarkSizeRatioLimits(args.markSizeRatio);
validateMinTimeBarInterval(dataLayers, hasBar, args.minTimeBarInterval);
const hasMarkSizeAccessors =
dataLayers.filter((dataLayer) => dataLayer.markSizeAccessor !== undefined).length > 0;

if (!hasMarkSizeAccessors && args.markSizeRatio !== undefined) {
throw new Error(errors.markSizeRatioWithoutAccessor());
}

return {
type: 'render',
Expand All @@ -28,6 +40,7 @@ export const layeredXyVisFn: LayeredXyVisFn['fn'] = async (data, args, handlers)
args: {
...args,
layers,
markSizeRatio: hasMarkSizeAccessors && !args.markSizeRatio ? 10 : args.markSizeRatio,
ariaLabel:
args.ariaLabel ??
(handlers.variables?.embeddableTitle as string) ??
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@

import { i18n } from '@kbn/i18n';
import { isValidInterval } from '@kbn/data-plugin/common';
import { ExpressionValueVisDimension } from '@kbn/visualizations-plugin/common';
import { AxisExtentModes, ValueLabelModes } from '../constants';
import {
SeriesType,
AxisExtentConfigResult,
DataLayerConfigResult,
CommonXYDataLayerConfigResult,
Expand All @@ -18,7 +20,23 @@ import {
} from '../types';
import { isTimeChart } from '../helpers';

const errors = {
export const errors = {
markSizeAccessorForNonLineOrAreaChartsError: () =>
i18n.translate(
'expressionXY.reusable.function.dataLayer.errors.markSizeAccessorForNonLineOrAreaChartsError',
{
defaultMessage:
"`markSizeAccessor` can't be used. Dots are applied only for line or area charts",
}
),
markSizeRatioLimitsError: () =>
i18n.translate('expressionXY.reusable.function.xyVis.errors.markSizeLimitsError', {
defaultMessage: 'Mark size ratio must be greater or equal to 1 and less or equal to 100',
}),
markSizeRatioWithoutAccessor: () =>
i18n.translate('expressionXY.reusable.function.xyVis.errors.markSizeRatioWithoutAccessor', {
defaultMessage: 'Mark size ratio can be applied only with `markSizeAccessor`',
}),
extendBoundsAreInvalidError: () =>
i18n.translate('expressionXY.reusable.function.xyVis.errors.extendBoundsAreInvalidError', {
defaultMessage:
Expand Down Expand Up @@ -117,6 +135,30 @@ export const validateValueLabels = (
}
};

export const validateMarkSizeForChartType = (
markSizeAccessor: ExpressionValueVisDimension | string | undefined,
seriesType: SeriesType
) => {
if (markSizeAccessor && !seriesType.includes('line') && !seriesType.includes('area')) {
throw new Error(errors.markSizeAccessorForNonLineOrAreaChartsError());
}
};

export const validateMarkSizeRatioLimits = (markSizeRatio?: number) => {
if (markSizeRatio !== undefined && (markSizeRatio < 1 || markSizeRatio > 100)) {
throw new Error(errors.markSizeRatioLimitsError());
}
};

export const validateMarkSizeRatioWithAccessor = (
markSizeRatio: number | undefined,
markSizeAccessor: ExpressionValueVisDimension | string | undefined
) => {
if (markSizeRatio !== undefined && !markSizeAccessor) {
throw new Error(errors.markSizeRatioWithoutAccessor());
}
};

export const validateMinTimeBarInterval = (
dataLayers: CommonXYDataLayerConfigResult[],
hasBar: boolean,
Expand Down
Loading