From fefa1d947952895f8a8bffee47cbcad5c5c73839 Mon Sep 17 00:00:00 2001 From: markw65 Date: Tue, 18 Nov 2025 10:13:49 -0800 Subject: [PATCH] Fix early exit from clearStacks Fixes #12154 --- src/core/core.datasetController.js | 2 +- .../controller.line/stacking/stack-cache.js | 56 ++++++++++++++++++ .../controller.line/stacking/stack-cache.png | Bin 0 -> 8753 bytes 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/controller.line/stacking/stack-cache.js create mode 100644 test/fixtures/controller.line/stacking/stack-cache.png diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 9b7126a93fd..145a2b6a11e 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -217,7 +217,7 @@ function clearStacks(meta, items) { for (const parsed of items) { const stacks = parsed._stacks; if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) { - return; + continue; } delete stacks[axis][datasetIndex]; if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) { diff --git a/test/fixtures/controller.line/stacking/stack-cache.js b/test/fixtures/controller.line/stacking/stack-cache.js new file mode 100644 index 00000000000..7bf42d3c5c0 --- /dev/null +++ b/test/fixtures/controller.line/stacking/stack-cache.js @@ -0,0 +1,56 @@ +function makeDs(label, offset) { + return { + label, + data: [ + [0, 12], + [1, 19], + [2, 3], + [2, 5], + [3, 2], + [4, 3], + ].map(([x, y]) => ({x, y: y === null ? null : y + offset})), + showLine: true, + spanGaps: false, + stack: `stack${label}`, + borderColor: label === 'A' ? '#c00' : '#00c' + }; +} + +const dsA = makeDs('A', 0); +const dsB = makeDs('B', 1); + +module.exports = { + config: { + type: 'scatter', + data: { + datasets: [dsA, dsB], + }, + options: { + scales: { + x: {display: false}, + y: {display: false}, + }, + elements: { + point: { + backgroundColor: '#444', + }, + }, + layout: { + padding: { + left: 24, + right: 24, + }, + }, + }, + }, + options: { + canvas: { + height: 128, + width: 256, + }, + async run(chart) { + chart.data = {datasets: [dsB, dsA]}; + chart.update(); + } + }, +}; diff --git a/test/fixtures/controller.line/stacking/stack-cache.png b/test/fixtures/controller.line/stacking/stack-cache.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef82b1be9a4a184f5fd9dbc36130590e8e20c90 GIT binary patch literal 8753 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 literal 0 HcmV?d00001