From 71fa55acac1b7f4b76a860afa7c78fd798afbd48 Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Sun, 5 Sep 2021 13:46:26 -0400 Subject: [PATCH] Add parsing support to pie/doughnut charts (#9622) --- docs/general/data-structures.md | 16 +++++++++++++ src/controllers/controller.doughnut.js | 20 +++++++++++++---- .../controller.doughnut/doughnut-parsing.js | 21 ++++++++++++++++++ .../controller.doughnut/doughnut-parsing.png | Bin 0 -> 34082 bytes 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/controller.doughnut/doughnut-parsing.js create mode 100644 test/fixtures/controller.doughnut/doughnut-parsing.png diff --git a/docs/general/data-structures.md b/docs/general/data-structures.md index 778aa295ab6..1a62fc02724 100644 --- a/docs/general/data-structures.md +++ b/docs/general/data-structures.md @@ -49,6 +49,22 @@ options: { } ``` +When using the pie/doughnut chart type, the `parsing` object should have a `key` item that points to the value to look at. In this example, the doughnut chart will show two items with values 1500 and 500. + +```javascript +type: 'doughnut', +data: { + datasets: [{ + data: [{id: 'Sales', nested: {value: 1500}}, {id: 'Purchases', nested: {value: 500}}] + }] +}, +options: { + parsing: { + key: 'nested.value' + } +} +``` + ## Object ```javascript diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index 91c4756cf91..0581fdad99e 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -1,5 +1,5 @@ import DatasetController from '../core/core.datasetController'; -import {isArray, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core'; +import {isArray, isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core'; import {formatNumber} from '../helpers/helpers.intl'; import {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math'; @@ -54,9 +54,21 @@ export default class DoughnutController extends DatasetController { parse(start, count) { const data = this.getDataset().data; const meta = this._cachedMeta; - let i, ilen; - for (i = start, ilen = start + count; i < ilen; ++i) { - meta._parsed[i] = +data[i]; + + if (this._parsing === false) { + meta._parsed = data; + } else { + let getter = (i) => +data[i]; + + if (isObject(data[start])) { + const {key = 'value'} = this._parsing; + getter = (i) => +resolveObjectKey(data[i], key); + } + + let i, ilen; + for (i = start, ilen = start + count; i < ilen; ++i) { + meta._parsed[i] = getter(i); + } } } diff --git a/test/fixtures/controller.doughnut/doughnut-parsing.js b/test/fixtures/controller.doughnut/doughnut-parsing.js new file mode 100644 index 00000000000..f9043b03313 --- /dev/null +++ b/test/fixtures/controller.doughnut/doughnut-parsing.js @@ -0,0 +1,21 @@ +module.exports = { + config: { + type: 'doughnut', + data: { + labels: ['Red', 'Blue', 'Yellow'], + datasets: [{ + data: [ + {foo: 12}, + {foo: 4}, + {foo: 6}, + ], + backgroundColor: ['red', 'blue', 'yellow'] + }] + }, + options: { + parsing: { + key: 'foo' + } + } + } +}; diff --git a/test/fixtures/controller.doughnut/doughnut-parsing.png b/test/fixtures/controller.doughnut/doughnut-parsing.png new file mode 100644 index 0000000000000000000000000000000000000000..a01d23fd2c4fc7cffe00a1c634ca4d62ee31c0aa GIT binary patch literal 34082 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