diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 5842f1e228f..048073a8400 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -193,6 +193,8 @@ function createDataContext(parent, index, element) { } function clearStacks(meta, items) { + // Not using meta.index here, because it might be already updated if the dataset changed location + const datasetIndex = meta.controller.index; const axis = meta.vScale && meta.vScale.axis; if (!axis) { return; @@ -201,10 +203,10 @@ function clearStacks(meta, items) { items = items || meta._parsed; for (const parsed of items) { const stacks = parsed._stacks; - if (!stacks || stacks[axis] === undefined || stacks[axis][meta.index] === undefined) { + if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) { return; } - delete stacks[axis][meta.index]; + delete stacks[axis][datasetIndex]; } } diff --git a/test/fixtures/controller.line/stacking/updates.js b/test/fixtures/controller.line/stacking/updates.js new file mode 100644 index 00000000000..0853f0b35b8 --- /dev/null +++ b/test/fixtures/controller.line/stacking/updates.js @@ -0,0 +1,40 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/9424', + config: { + type: 'line', + data: { + labels: [0, 1, 2], + datasets: [ + { + data: [1, 1, 1], + stack: 's1', + borderColor: '#ff0000', + }, + { + data: [2, 2, 2], + stack: 's1', + borderColor: '#00ff00', + }, + { + data: [3, 3, 3], + stack: 's1', + borderColor: '#0000ff', + } + ] + }, + options: { + borderWidth: 5, + scales: { + x: {display: false}, + y: {display: true, stacked: true} + } + } + }, + options: { + spriteText: true, + run(chart) { + chart.data.datasets.splice(1, 0, {data: [1.5, 1.5, 1.5], stack: 's2', borderColor: '#000000'}); + chart.update(); + } + } +}; diff --git a/test/fixtures/controller.line/stacking/updates.png b/test/fixtures/controller.line/stacking/updates.png new file mode 100644 index 00000000000..2ca99579bf1 Binary files /dev/null and b/test/fixtures/controller.line/stacking/updates.png differ