]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Make sure context indices are up to date (#9101)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 14 May 2021 21:16:22 +0000 (00:16 +0300)
committerGitHub <noreply@github.com>
Fri, 14 May 2021 21:16:22 +0000 (17:16 -0400)
src/core/core.datasetController.js
test/specs/core.datasetController.tests.js

index cff882ab865c526253ccccffe0222f953d4b9ffd..f55b2fa2c0284988ab2bc84fee2a7ff2879bcc76 100644 (file)
@@ -722,10 +722,12 @@ export default class DatasetController {
         (element.$context = createDataContext(me.getContext(), index, element));
       context.parsed = me.getParsed(index);
       context.raw = dataset.data[index];
+      context.index = context.dataIndex = index;
     } else {
       context = me.$context ||
         (me.$context = createDatasetContext(me.chart.getContext(), me.index));
       context.dataset = dataset;
+      context.index = context.datasetIndex = me.index;
     }
 
     context.active = !!active;
index e89aa0bf98c540b9b7d099b61f18ea69ba440dce..b0cc393981f5e72e55fe581f511811a71e0abd8d 100644 (file)
@@ -976,6 +976,59 @@ describe('Chart.DatasetController', function() {
         raw: {x: 1, y: 1},
         mode: 'datatest2'
       }));
+
+      chart.data.datasets[0].data.unshift({x: -1, y: -1});
+      chart.update();
+      expect(meta.controller.getContext(0, true, 'unshift')).toEqual(jasmine.objectContaining({
+        active: true,
+        datasetIndex: 0,
+        dataset: chart.data.datasets[0],
+        dataIndex: 0,
+        element: meta.data[0],
+        index: 0,
+        parsed: {x: -1, y: -1},
+        raw: {x: -1, y: -1},
+        mode: 'unshift'
+      }));
+      expect(meta.controller.getContext(2, true, 'unshift2')).toEqual(jasmine.objectContaining({
+        active: true,
+        datasetIndex: 0,
+        dataset: chart.data.datasets[0],
+        dataIndex: 2,
+        element: meta.data[2],
+        index: 2,
+        parsed: {x: 1, y: 1},
+        raw: {x: 1, y: 1},
+        mode: 'unshift2'
+      }));
+
+      chart.data.datasets.unshift({data: [{x: 10, y: 20}]});
+      chart.update();
+      meta = chart.getDatasetMeta(0);
+      expect(meta.controller.getContext(0, true, 'unshift3')).toEqual(jasmine.objectContaining({
+        active: true,
+        datasetIndex: 0,
+        dataset: chart.data.datasets[0],
+        dataIndex: 0,
+        element: meta.data[0],
+        index: 0,
+        parsed: {x: 10, y: 20},
+        raw: {x: 10, y: 20},
+        mode: 'unshift3'
+      }));
+
+      meta = chart.getDatasetMeta(1);
+      expect(meta.controller.getContext(2, true, 'unshift4')).toEqual(jasmine.objectContaining({
+        active: true,
+        datasetIndex: 1,
+        dataset: chart.data.datasets[1],
+        dataIndex: 2,
+        element: meta.data[2],
+        index: 2,
+        parsed: {x: 1, y: 1},
+        raw: {x: 1, y: 1},
+        mode: 'unshift4'
+      }));
     });
   });
 });