From: Nikolai Iakovlev Date: Thu, 24 Oct 2024 15:55:58 +0000 (+0300) Subject: Fix: applyStack() returned the sum of all values for hidden dataset indices, which... X-Git-Tag: v4.4.6~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6dd448b9337842b5c2f597306c28fccdfef6d3c6;p=thirdparty%2FChart.js.git Fix: applyStack() returned the sum of all values for hidden dataset indices, which resulted in wrong show animations (#11938) --- diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 8753cab65..9b7126a93 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -76,9 +76,11 @@ function applyStack(stack, value, dsIndex, options = {}) { return; } + let found = false; for (i = 0, ilen = keys.length; i < ilen; ++i) { datasetIndex = +keys[i]; if (datasetIndex === dsIndex) { + found = true; if (options.all) { continue; } @@ -89,6 +91,11 @@ function applyStack(stack, value, dsIndex, options = {}) { value += otherValue; } } + + if (!found && !options.all) { + return 0; + } + return value; } diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index a64af1a87..128ef241d 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -1613,6 +1613,49 @@ describe('Chart.controllers.bar', function() { expect(data[0].y).toBeCloseToPixel(512); }); + it('should hide bar dataset beneath the chart for correct animations', function() { + var chart = window.acquireChart({ + type: 'bar', + data: { + datasets: [{ + data: [1, 2, 3, 4] + }, { + data: [1, 2, 3, 4] + }], + labels: ['A', 'B', 'C', 'D'] + }, + options: { + plugins: { + legend: false, + title: false + }, + scales: { + x: { + type: 'category', + display: false, + stacked: true, + }, + y: { + type: 'linear', + display: false, + stacked: true, + } + } + } + }); + + var data = chart.getDatasetMeta(0).data; + expect(data[0].base).toBeCloseToPixel(512); + expect(data[0].y).toBeCloseToPixel(448); + + chart.setDatasetVisibility(0, false); + chart.update(); + + data = chart.getDatasetMeta(0).data; + expect(data[0].base).toBeCloseToPixel(640); + expect(data[0].y).toBeCloseToPixel(512); + }); + describe('Float bar', function() { it('Should return correct values from getMinMax', function() { var chart = window.acquireChart({