From: Jukka Kurkela Date: Fri, 14 May 2021 21:16:22 +0000 (+0300) Subject: Make sure context indices are up to date (#9101) X-Git-Tag: v3.3.0~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fbff165942182e4b04c7c499f2caa1c0da23bf60;p=thirdparty%2FChart.js.git Make sure context indices are up to date (#9101) --- diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index cff882ab8..f55b2fa2c 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -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; diff --git a/test/specs/core.datasetController.tests.js b/test/specs/core.datasetController.tests.js index e89aa0bf9..b0cc39398 100644 --- a/test/specs/core.datasetController.tests.js +++ b/test/specs/core.datasetController.tests.js @@ -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' + })); }); }); });