From 871293fb6caf7b7a63dd6249e9fc39b99a121c2d Mon Sep 17 00:00:00 2001 From: kurkle Date: Wed, 13 Oct 2021 20:28:23 +0300 Subject: [PATCH] Fix controller.getMinMax for stacked charts --- src/core/core.datasetController.js | 19 ++++++------- .../controller.line/stacking/bounds-data.png | Bin 17328 -> 19599 bytes test/specs/controller.line.tests.js | 26 ++++++++++++++++++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 584aeda027e..63aea1f33ad 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -67,7 +67,7 @@ function getSortedDatasetIndices(chart, filterVisible) { return keys; } -function applyStack(stack, value, dsIndex, options) { +function applyStack(stack, value, dsIndex, options = {}) { const keys = stack.keys; const singleMode = options.mode === 'single'; let i, ilen, datasetIndex, otherValue; @@ -212,6 +212,8 @@ function clearStacks(meta, items) { const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none'; const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); +const createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked + && {keys: getSortedDatasetIndices(chart, true), values: null}; export default class DatasetController { @@ -567,11 +569,7 @@ export default class DatasetController { const values = stack && parsed._stacks[scale.axis]; if (stack && values) { stack.values = values; - // Need to consider individual stack values for data range, - // in addition to the stacked value - range.min = Math.min(range.min, value); - range.max = Math.max(range.max, value); - value = applyStack(stack, parsedValue, this._cachedMeta.index, {all: true}); + value = applyStack(stack, parsedValue, this._cachedMeta.index); } range.min = Math.min(range.min, value); range.max = Math.max(range.max, value); @@ -586,16 +584,15 @@ export default class DatasetController { const sorted = meta._sorted && scale === meta.iScale; const ilen = _parsed.length; const otherScale = this._getOtherScale(scale); - const stack = canStack && meta._stacked && {keys: getSortedDatasetIndices(this.chart, true), values: null}; + const stack = createStack(canStack, meta, this.chart); const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY}; const {min: otherMin, max: otherMax} = getUserBounds(otherScale); - let i, value, parsed, otherValue; + let i, parsed; function _skip() { parsed = _parsed[i]; - value = parsed[scale.axis]; - otherValue = parsed[otherScale.axis]; - return !isFinite(value) || otherMin > otherValue || otherMax < otherValue; + const otherValue = parsed[otherScale.axis]; + return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; } for (i = 0; i < ilen; ++i) { diff --git a/test/fixtures/controller.line/stacking/bounds-data.png b/test/fixtures/controller.line/stacking/bounds-data.png index 90ce6a30c282c7f2dbec6a7934fdc828ab3b3219..71ea7e96392b8cdb1785cd76785e0549ff1ab74d 100644 GIT binary patch literal 19599 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 literal 17328 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 rQ-T%{#Kmjj+gQ=nG}#ryl7kp4 diff --git a/test/specs/controller.line.tests.js b/test/specs/controller.line.tests.js index 7210367ca95..684b1919bb2 100644 --- a/test/specs/controller.line.tests.js +++ b/test/specs/controller.line.tests.js @@ -59,6 +59,32 @@ describe('Chart.controllers.line', function() { expect(createChart).not.toThrow(); }); + it('should find min and max for stacked chart', function() { + var chart = window.acquireChart({ + type: 'line', + data: { + datasets: [{ + data: [10, 11, 12, 13] + }, { + data: [1, 2, 3, 4] + }], + labels: ['a', 'b', 'c', 'd'] + }, + options: { + scales: { + y: { + stacked: true + } + } + } + }); + expect(chart.getDatasetMeta(0).controller.getMinMax(chart.scales.y, true)).toEqual({min: 10, max: 13}); + expect(chart.getDatasetMeta(1).controller.getMinMax(chart.scales.y, true)).toEqual({min: 11, max: 17}); + chart.hide(0); + expect(chart.getDatasetMeta(0).controller.getMinMax(chart.scales.y, true)).toEqual({min: 10, max: 13}); + expect(chart.getDatasetMeta(1).controller.getMinMax(chart.scales.y, true)).toEqual({min: 1, max: 4}); + }); + it('Should create line elements and point elements for each data item during initialization', function() { var chart = window.acquireChart({ type: 'line',