]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
fix issue #11717 (#11844)
authorhuqingkun <huqingkun@gmail.com>
Tue, 6 Aug 2024 15:32:26 +0000 (23:32 +0800)
committerGitHub <noreply@github.com>
Tue, 6 Aug 2024 15:32:26 +0000 (17:32 +0200)
* fix issue #11717

Signed-off-by: Hu, Vince <Qingkun.Hu@fmr.com>
* unit test for issue #11717

* fixing test lint style issue

* update codes according review comments

---------

Signed-off-by: Hu, Vince <Qingkun.Hu@fmr.com>
src/controllers/controller.bar.js
test/specs/controller.bar.tests.js

index 7257bc23992fb0723364b48b6a23dc8fc366ae42..82138f3fb74fac07360128022de78c7ae27e3d96 100644 (file)
@@ -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)) {
index 53a4738477c908cc9f608bf9371fa4d14215f410..a64af1a878bda3753fcacc2525c2901bdaf3d370 100644 (file)
@@ -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',