From 147ee593babba3b22d60f79b59180e69edba8e0c Mon Sep 17 00:00:00 2001 From: huqingkun Date: Tue, 6 Aug 2024 23:32:26 +0800 Subject: [PATCH] fix issue #11717 (#11844) * fix issue #11717 Signed-off-by: Hu, Vince * unit test for issue #11717 * fixing test lint style issue * update codes according review comments --------- Signed-off-by: Hu, Vince --- src/controllers/controller.bar.js | 4 +- test/specs/controller.bar.tests.js | 86 ++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 7257bc239..82138f3fb 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -437,9 +437,11 @@ export default class BarController extends DatasetController { .filter(meta => meta.controller.options.grouped); const stacked = iScale.options.stacked; const stacks = []; + const currentParsed = this._cachedMeta.controller.getParsed(dataIndex); + const iScaleValue = currentParsed && currentParsed[iScale.axis]; const skipNull = (meta) => { - const parsed = meta.controller.getParsed(dataIndex); + const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue); const val = parsed && parsed[meta.vScale.axis]; if (isNullOrUndef(val) || isNaN(val)) { diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index 53a473847..a64af1a87 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -1676,6 +1676,92 @@ describe('Chart.controllers.bar', function() { expect(unevenChart).not.toThrow(); }); + it('should correctly count the number of stacks when skipNull and different order datasets', function() { + + const chart = window.acquireChart({ + type: 'bar', + data: { + datasets: [ + { + id: '1', + label: 'USA', + data: [ + { + xScale: 'First', + Country: 'USA', + yScale: 524 + }, + { + xScale: 'Second', + Country: 'USA', + yScale: 325 + } + ], + + yAxisID: 'yScale', + xAxisID: 'xScale', + + parsing: { + yAxisKey: 'yScale', + xAxisKey: 'xScale' + } + }, + { + id: '2', + label: 'BRA', + data: [ + { + xScale: 'Second', + Country: 'BRA', + yScale: 183 + }, + { + xScale: 'First', + Country: 'BRA', + yScale: 177 + } + ], + + yAxisID: 'yScale', + xAxisID: 'xScale', + + parsing: { + yAxisKey: 'yScale', + xAxisKey: 'xScale' + } + }, + { + id: '3', + label: 'DEU', + data: [ + { + xScale: 'First', + Country: 'DEU', + yScale: 162 + } + ], + + yAxisID: 'yScale', + xAxisID: 'xScale', + + parsing: { + yAxisKey: 'yScale', + xAxisKey: 'xScale' + } + } + ] + }, + options: { + skipNull: true + } + }); + + var meta = chart.getDatasetMeta(0); + expect(meta.controller._getStackCount(0)).toBe(3); + expect(meta.controller._getStackCount(1)).toBe(2); + + }); + it('should not override tooltip title and label callbacks', async() => { const chart = window.acquireChart({ type: 'bar',