From 923314b50d34ca2fcdd73294d6d76ae9f383db83 Mon Sep 17 00:00:00 2001 From: Rikard Johansson Date: Wed, 28 Feb 2024 16:08:24 +0100 Subject: [PATCH] Fix: Bar chart with indexAxis: 'y' requires data.labels (whereas 'x' does not) (#11684) --- src/core/core.config.js | 5 +++++ .../controller.bar/bar-indexAxis-y.js | 20 ++++++++++++++++++ .../controller.bar/bar-indexAxis-y.png | Bin 0 -> 9224 bytes test/specs/controller.bar.tests.js | 19 +++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 test/fixtures/controller.bar/bar-indexAxis-y.js create mode 100644 test/fixtures/controller.bar/bar-indexAxis-y.png diff --git a/src/core/core.config.js b/src/core/core.config.js index 6e83d5de327..aa76df7902b 100644 --- a/src/core/core.config.js +++ b/src/core/core.config.js @@ -132,6 +132,11 @@ function initConfig(config) { initOptions(config); + if (config.options.indexAxis === 'y' && config.data.labels.length === 0) { + config.data.labels = Object.keys(config.data.datasets[0].data); + config.data.datasets[0].data = Object.values(config.data.datasets[0].data); + } + return config; } diff --git a/test/fixtures/controller.bar/bar-indexAxis-y.js b/test/fixtures/controller.bar/bar-indexAxis-y.js new file mode 100644 index 00000000000..5bc55376cac --- /dev/null +++ b/test/fixtures/controller.bar/bar-indexAxis-y.js @@ -0,0 +1,20 @@ +module.exports = { + config: { + type: 'bar', + data: { + datasets: [{ + label: '# of Votes', + data: {a: 1, b: 3, c: 2} + }] + }, + options: { + indexAxis: 'y' + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.bar/bar-indexAxis-y.png b/test/fixtures/controller.bar/bar-indexAxis-y.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f71b487868591bceac0ebfb0c0595abbc47cbb GIT binary patch literal 9224 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 LyZyNq?$`bXt520# literal 0 HcmV?d00001 diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index 53a4738477c..d0a3d413476 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -1721,4 +1721,23 @@ describe('Chart.controllers.bar', function() { after: [] }]); }); + + it('should treat and render indexAxis y as indexAxis x can without setting data labels', function() { + const chart = window.acquireChart({ + type: 'bar', + data: { + datasets: [ + { + label: '# of Votes', + data: {a: 1, b: 3, c: 2}, + }, + ], + }, + options: { + indexAxis: 'y', + }, + }); + + expect(chart.data.labels.length).toBe(3); + }); });