From 749d1fc9422d7e35276da3097480707c59263e72 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Wed, 19 May 2021 02:24:35 +0300 Subject: [PATCH] Fix animations when data is replaced (#9120) --- src/core/core.datasetController.js | 8 ++++---- test/specs/core.datasetController.tests.js | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) 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(); -- 2.47.3