From cb02e1d207bd4c4c40b20c259017f85f26f1e30a Mon Sep 17 00:00:00 2001 From: markw65 Date: Wed, 27 May 2026 14:17:31 -0700 Subject: [PATCH] Fix early exit from clearStacks (#12155) Fixes #12154 Co-authored-by: markw65 --- 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 9b7126a93..145a2b6a1 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 000000000..7bf42d3c5 --- /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 Hc-jL100001 -- 2.47.3