From 22f0dfe9a71b050f01a439a70b7ca7788254ff7d Mon Sep 17 00:00:00 2001 From: Dan Onoshko Date: Fri, 18 Nov 2022 22:15:08 +0400 Subject: [PATCH] feat: colors for mixed charts (#10870) --- src/plugins/plugin.colors.ts | 50 +++++++++++++------------- test/fixtures/plugin.colors/mixed.js | 41 +++++++++++++++++++++ test/fixtures/plugin.colors/mixed.png | Bin 0 -> 37711 bytes 3 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 test/fixtures/plugin.colors/mixed.js create mode 100644 test/fixtures/plugin.colors/mixed.png diff --git a/src/plugins/plugin.colors.ts b/src/plugins/plugin.colors.ts index fdc8d7e3b..8286c27c5 100644 --- a/src/plugins/plugin.colors.ts +++ b/src/plugins/plugin.colors.ts @@ -4,8 +4,6 @@ export interface ColorsPluginOptions { enabled?: boolean; } -type DatasetColorizer = (dataset: ChartDataset, i: number) => void; - interface ColorsDescriptor { backgroundColor?: unknown; borderColor?: unknown; @@ -32,38 +30,41 @@ function getBackgroundColor(i: number) { return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length]; } -function createDefaultDatasetColorizer() { - return (dataset: ChartDataset, i: number) => { - dataset.borderColor = getBorderColor(i); - dataset.backgroundColor = getBackgroundColor(i); - }; +function colorizeDefaultDataset(dataset: ChartDataset, i: number) { + dataset.borderColor = getBorderColor(i); + dataset.backgroundColor = getBackgroundColor(i); + + return ++i; } -function createDoughnutDatasetColorizer() { - let i = 0; +function colorizeDoughnutDataset(dataset: ChartDataset, i: number) { + dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++)); - return (dataset: ChartDataset) => { - dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++)); - }; + return i; +} + +function colorizePolarAreaDataset(dataset: ChartDataset, i: number) { + dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++)); + + return i; } -function createPolarAreaDatasetColorizer() { +function getColorizer(chartType: string) { let i = 0; return (dataset: ChartDataset) => { - dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++)); + const type = dataset.type || chartType; + + if (type === 'doughnut' || type === 'pie') { + i = colorizeDoughnutDataset(dataset, i); + } else if (type === 'polarArea') { + i = colorizePolarAreaDataset(dataset, i); + } else if (type) { + i = colorizeDefaultDataset(dataset, i); + } }; } -function getColorizer(type: string) { - if (type === 'doughnut' || type === 'pie') { - return createDoughnutDatasetColorizer(); - } else if (type === 'polarArea') { - return createPolarAreaDatasetColorizer(); - } - return createDefaultDatasetColorizer(); -} - function containsColorsDefinitions( descriptors: ColorsDescriptor[] | Record ) { @@ -100,7 +101,8 @@ export default { return; } - const colorizer: DatasetColorizer = getColorizer(type); + const colorizer = getColorizer(type); + datasets.forEach(colorizer); } }; diff --git a/test/fixtures/plugin.colors/mixed.js b/test/fixtures/plugin.colors/mixed.js new file mode 100644 index 000000000..2ea5b83b9 --- /dev/null +++ b/test/fixtures/plugin.colors/mixed.js @@ -0,0 +1,41 @@ +module.exports = { + config: { + data: { + labels: [0, 1, 2, 3], + datasets: [ + { + type: 'line', + data: [5, 20, 1, 10], + }, + { + type: 'bar', + data: [6, 16, 3, 19] + }, + { + type: 'pie', + data: [5, 20, 1, 10], + } + ] + }, + options: { + scales: { + x: { + ticks: { + display: false, + } + }, + y: { + ticks: { + display: false, + } + } + }, + plugins: { + legend: false, + colors: { + enabled: true + } + } + } + } +}; diff --git a/test/fixtures/plugin.colors/mixed.png b/test/fixtures/plugin.colors/mixed.png new file mode 100644 index 0000000000000000000000000000000000000000..d507dd0f8446dcefcbc5a36016a122a5aa24016a GIT binary patch literal 37711 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