]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Re-parse existing elements when data is replaced (#6925)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 10 Jan 2020 23:31:17 +0000 (01:31 +0200)
committerEvert Timberg <evert.timberg+github@gmail.com>
Fri, 10 Jan 2020 23:31:17 +0000 (18:31 -0500)
* Re-parse existing elements when data is replaced
* Update test

src/core/core.datasetController.js
test/specs/core.datasetController.tests.js

index abe8e461491d524dfb06234cccf10191a7e78650..c240d7844759c4c8b460b4701a761b5aca5e8af1 100644 (file)
@@ -1051,6 +1051,10 @@ helpers.extend(DatasetController.prototype, {
 
                if (numData > numMeta) {
                        me.insertElements(numMeta, numData - numMeta);
+                       if (changed && numMeta) {
+                               // insertElements parses the new elements. The old ones might need parsing too.
+                               me._parse(0, numMeta);
+                       }
                } else if (numData < numMeta) {
                        meta.data.splice(numData, numMeta - numData);
                        meta._parsed.splice(numData, numMeta - numData);
index 37545d79b2bcc611bef9180b5aaff1f112aa4ac9..8d04dbee330be7bd8eed0f51cea4c963299fff9c 100644 (file)
@@ -299,14 +299,22 @@ describe('Chart.DatasetController', function() {
                var meta = chart.getDatasetMeta(0);
 
                expect(meta.data.length).toBe(6);
+               expect(meta._parsed.map(p => p.y)).toEqual(data0);
 
                chart.data.datasets[0].data = data1;
                chart.update();
 
                expect(meta.data.length).toBe(3);
+               expect(meta._parsed.map(p => p.y)).toEqual(data1);
+
+               data1.push(9);
+               expect(meta.data.length).toBe(4);
+
+               chart.data.datasets[0].data = data0;
+               chart.update();
 
-               data1.push(9, 10, 11);
                expect(meta.data.length).toBe(6);
+               expect(meta._parsed.map(p => p.y)).toEqual(data0);
        });
 
        it('should re-synchronize metadata when data are unusually altered', function() {