From: Jukka Kurkela Date: Tue, 18 May 2021 23:24:35 +0000 (+0300) Subject: Fix animations when data is replaced (#9120) X-Git-Tag: v3.3.0~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=749d1fc9422d7e35276da3097480707c59263e72;p=thirdparty%2FChart.js.git Fix animations when data is replaced (#9120) --- diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 6f1dc0efa..dbf08e77f 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -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; diff --git a/test/specs/core.datasetController.tests.js b/test/specs/core.datasetController.tests.js index 773bbf54e..dfc2dd8d5 100644 --- a/test/specs/core.datasetController.tests.js +++ b/test/specs/core.datasetController.tests.js @@ -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();