const numData = data.length;
const count = Math.min(numData, numMeta);
- if (numData > numMeta) {
- me._insertElements(numMeta, numData - numMeta, resetNewElements);
- } else if (numData < numMeta) {
- me._removeElements(numData, numMeta - numData);
- }
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].y = 10;
me.parse(0, count);
}
+
+ if (numData > numMeta) {
+ me._insertElements(numMeta, numData - numMeta, resetNewElements);
+ } else if (numData < numMeta) {
+ me._removeElements(numData, numMeta - numData);
+ }
}
/**
it('should re-synchronize metadata when the data object reference changes', function() {
var data0 = [0, 1, 2, 3, 4, 5];
var data1 = [6, 7, 8];
+ var data2 = [1, 2, 3, 4, 5, 6, 7, 8];
+
var chart = acquireChart({
type: 'line',
data: {
expect(meta.data.length).toBe(6);
expect(meta._parsed.map(p => p.y)).toEqual(data0);
+
+ chart.data.datasets[0].data = data2;
+ chart.update();
+
+ expect(meta.data.length).toBe(8);
+ expect(meta._parsed.map(p => p.y)).toEqual(data2);
+ });
+
+ it('should re-synchronize metadata when the data object reference changes, with animation', function() {
+ var data0 = [0, 1, 2, 3, 4, 5];
+ var data1 = [6, 7, 8];
+ var data2 = [1, 2, 3, 4, 5, 6, 7, 8];
+
+ var chart = acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ data: data0
+ }]
+ },
+ options: {
+ animation: true
+ }
+ });
+
+ var meta = chart.getDatasetMeta(0);
+
+ 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();
+ expect(meta.data.length).toBe(4);
+
+ chart.data.datasets[0].data = data0;
+ chart.update();
+
+ expect(meta.data.length).toBe(6);
+ expect(meta._parsed.map(p => p.y)).toEqual(data0);
+
+ chart.data.datasets[0].data = data2;
+ chart.update();
+
+ expect(meta.data.length).toBe(8);
+ expect(meta._parsed.map(p => p.y)).toEqual(data2);
});
it('should re-synchronize metadata when data are unusually altered', function() {