mirror of
https://github.com/chartjs/Chart.js.git
synced 2024-10-06 04:09:08 +02:00
Make sure data is parsed before updateElements (#9187)
* Make sure data is parsed before updateElements * Add test
This commit is contained in:
parent
9bfa7cc5be
commit
33a4927510
@ -933,11 +933,6 @@ export default class DatasetController {
|
||||
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:
|
||||
@ -945,6 +940,12 @@ export default class DatasetController {
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -379,6 +379,8 @@ describe('Chart.DatasetController', function() {
|
||||
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: {
|
||||
@ -410,6 +412,59 @@ describe('Chart.DatasetController', function() {
|
||||
|
||||
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() {
|
||||
|
Loading…
Reference in New Issue
Block a user