]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Update dataset metadata when axisID changes (#6321)
authorAkihiko Kusanagi <nagi@nagi-p.com>
Fri, 14 Jun 2019 09:34:56 +0000 (11:34 +0200)
committerGitHub <noreply@github.com>
Fri, 14 Jun 2019 09:34:56 +0000 (11:34 +0200)
src/core/core.datasetController.js
test/specs/core.datasetController.tests.js

index 2f7826a7674d66641b60d6be1bd3b25377a2bad3..03a249a3fde4abff41e6609c130a60015cbb388f 100644 (file)
@@ -139,13 +139,16 @@ helpers.extend(DatasetController.prototype, {
        linkScales: function() {
                var me = this;
                var meta = me.getMeta();
+               var chart = me.chart;
+               var scales = chart.scales;
                var dataset = me.getDataset();
+               var scalesOpts = chart.options.scales;
 
-               if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {
-                       meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;
+               if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {
+                       meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;
                }
-               if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {
-                       meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;
+               if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {
+                       meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;
                }
        },
 
index 8b5d6dec2e03f310630ddbd425b066e67e3da8b4..e2758182d45a65ccf6c84af8ab85103d645ee1dd 100644 (file)
@@ -221,6 +221,45 @@ describe('Chart.DatasetController', function() {
                expect(meta.data.length).toBe(42);
        });
 
+       it('should re-synchronize metadata when scaleID changes', function() {
+               var chart = acquireChart({
+                       type: 'line',
+                       data: {
+                               datasets: [{
+                                       data: [],
+                                       xAxisID: 'firstXScaleID',
+                                       yAxisID: 'firstYScaleID',
+                               }]
+                       },
+                       options: {
+                               scales: {
+                                       xAxes: [{
+                                               id: 'firstXScaleID'
+                                       }, {
+                                               id: 'secondXScaleID'
+                                       }],
+                                       yAxes: [{
+                                               id: 'firstYScaleID'
+                                       }, {
+                                               id: 'secondYScaleID'
+                                       }]
+                               }
+                       }
+               });
+
+               var meta = chart.getDatasetMeta(0);
+
+               expect(meta.xAxisID).toBe('firstXScaleID');
+               expect(meta.yAxisID).toBe('firstYScaleID');
+
+               chart.data.datasets[0].xAxisID = 'secondXScaleID';
+               chart.data.datasets[0].yAxisID = 'secondYScaleID';
+               chart.update();
+
+               expect(meta.xAxisID).toBe('secondXScaleID');
+               expect(meta.yAxisID).toBe('secondYScaleID');
+       });
+
        it('should cleanup attached properties when the reference changes or when the chart is destroyed', function() {
                var data0 = [0, 1, 2, 3, 4, 5];
                var data1 = [6, 7, 8];