]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix animations when data is replaced (#9120)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Tue, 18 May 2021 23:24:35 +0000 (02:24 +0300)
committerGitHub <noreply@github.com>
Tue, 18 May 2021 23:24:35 +0000 (19:24 -0400)
src/core/core.datasetController.js
test/specs/core.datasetController.tests.js

index 6f1dc0efa1a04d1e59a76681977af16256565363..dbf08e77f2bb2ed90139016da7ff19a175420651 100644 (file)
@@ -332,16 +332,15 @@ export default class DatasetController {
       if (_data) {
         // This case happens when the user replaced the data array instance.
         unlistenArrayEvents(_data, me);
-        // Discard old elements, parsed data and stacks
+        // Discard old parsed data and stacks
         const meta = me._cachedMeta;
         clearStacks(meta);
         meta._parsed = [];
-        meta.data = [];
       }
       if (data && Object.isExtensible(data)) {
         listenArrayEvents(data, me);
-        me._syncList = [];
       }
+      me._syncList = [];
       me._data = data;
     }
   }
@@ -933,7 +932,8 @@ export default class DatasetController {
       me._insertElements(numMeta, numData - numMeta, resetNewElements);
     } else if (numData < numMeta) {
       me._removeElements(numData, numMeta - numData);
-    } else if (count) {
+    }
+    if (count) {
       // TODO: It is not optimal to always parse the old data
       // This is done because we are not detecting direct assignments:
       // chart.data.datasets[0].data[5] = 10;
index 773bbf54e970500b63961368916432a7a7481af7..dfc2dd8d5ab8d09d45b65d8505aa36976bc73173 100644 (file)
@@ -392,12 +392,14 @@ describe('Chart.DatasetController', function() {
 
     expect(meta.data.length).toBe(6);
     expect(meta._parsed.map(p => p.y)).toEqual(data0);
+    const point0 = meta.data[0];
 
     chart.data.datasets[0].data = data1;
     chart.update();
 
     expect(meta.data.length).toBe(3);
     expect(meta._parsed.map(p => p.y)).toEqual(data1);
+    expect(meta.data[0]).toEqual(point0);
 
     data1.push(9);
     chart.update();