diff --git a/src/legacy/core_plugins/metrics/public/components/vis_types/timeseries/config.js b/src/legacy/core_plugins/metrics/public/components/vis_types/timeseries/config.js index a63f55734ea1..92787b189a94 100644 --- a/src/legacy/core_plugins/metrics/public/components/vis_types/timeseries/config.js +++ b/src/legacy/core_plugins/metrics/public/components/vis_types/timeseries/config.js @@ -62,6 +62,13 @@ const TimeseriesConfig = injectI18n(function (props) { const stackedOptions = [ { label: intl.formatMessage({ id: 'tsvb.timeSeries.noneLabel', defaultMessage: 'None' }), value: 'none' }, { label: intl.formatMessage({ id: 'tsvb.timeSeries.stackedLabel', defaultMessage: 'Stacked' }), value: 'stacked' }, + { + label: intl.formatMessage({ + id: 'tsvb.timeSeries.stackedWithinSeriesLabel', + defaultMessage: 'Stacked within series' + }), + value: 'stacked_within_series' + }, { label: intl.formatMessage({ id: 'tsvb.timeSeries.percentLabel', defaultMessage: 'Percent' }), value: 'percent' } ]; const selectedStackedOption = stackedOptions.find(option => { diff --git a/src/legacy/core_plugins/metrics/server/lib/vis_data/__tests__/helpers/get_default_decoration.js b/src/legacy/core_plugins/metrics/server/lib/vis_data/__tests__/helpers/get_default_decoration.js index df38d83d84ec..210db17f85fb 100644 --- a/src/legacy/core_plugins/metrics/server/lib/vis_data/__tests__/helpers/get_default_decoration.js +++ b/src/legacy/core_plugins/metrics/server/lib/vis_data/__tests__/helpers/get_default_decoration.js @@ -22,6 +22,45 @@ import getDefaultDecoration from '../../helpers/get_default_decoration'; describe('getDefaultDecoration', () => { + describe('stack option', () => { + + it('should set a stack option to false', () => { + const series = { + id: 'test_id' + }; + expect(getDefaultDecoration(series)) + .to.have.property('stack', false); + + series.stacked = 'none'; + expect(getDefaultDecoration(series)) + .to.have.property('stack', false); + }); + + it('should set a stack option to true', () => { + const series = { + stacked: 'stacked', + id: 'test_id' + }; + + expect(getDefaultDecoration(series)) + .to.have.property('stack', true); + + series.stacked = 'percent'; + expect(getDefaultDecoration(series)) + .to.have.property('stack', true); + }); + + it('should set a stack option to be series id', () => { + const series = { + stacked: 'stacked_within_series', + id: 'test_id' + }; + + expect(getDefaultDecoration(series)) + .to.have.property('stack', series.id); + }); + }); + describe('lines', () => { it('return decoration for lines', () => { const series = { diff --git a/src/legacy/core_plugins/metrics/server/lib/vis_data/helpers/get_default_decoration.js b/src/legacy/core_plugins/metrics/server/lib/vis_data/helpers/get_default_decoration.js index e8d6cf075a0b..9e2c495df0cb 100644 --- a/src/legacy/core_plugins/metrics/server/lib/vis_data/helpers/get_default_decoration.js +++ b/src/legacy/core_plugins/metrics/server/lib/vis_data/helpers/get_default_decoration.js @@ -20,8 +20,21 @@ export default series => { const pointSize = series.point_size != null ? Number(series.point_size) : Number(series.line_width); const showPoints = series.chart_type === 'line' && pointSize !== 0; + let stack; + switch (series.stacked) { + case 'stacked': + case 'percent': + stack = true; + break; + case 'stacked_within_series': + stack = series.id; + break; + default: + stack = false; + } + return { - stack: series.stacked && series.stacked !== 'none' || false, + stack, lines: { show: series.chart_type === 'line' && series.line_width !== 0, fill: Number(series.fill),