From ed68557a99cb2e28b032f4a1c376dc24a9a0837c Mon Sep 17 00:00:00 2001 From: Jacco van den Berg <39033624+LeeLenaleee@users.noreply.github.com> Date: Sat, 12 Feb 2022 16:23:31 +0100 Subject: [PATCH] Make object notation usable for polarArea and radar (#10088) * start to make object notation usable for polarArea * enable object notation also for radar chart, test default key --- docs/general/data-structures.md | 7 ++++- src/controllers/controller.polarArea.js | 13 +++++---- src/controllers/controller.radar.js | 8 ++++-- src/helpers/helpers.config.js | 16 +++++++++++ .../parse-object-data.json | 27 ++++++++++++++++++ .../parse-object-data.png | Bin 0 -> 21734 bytes test/specs/controller.radar.tests.js | 26 +++++++++++++++++ 7 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 test/fixtures/controller.polarArea/parse-object-data.json create mode 100644 test/fixtures/controller.polarArea/parse-object-data.png diff --git a/docs/general/data-structures.md b/docs/general/data-structures.md index 65b8775510e..6f3c808f2c4 100644 --- a/docs/general/data-structures.md +++ b/docs/general/data-structures.md @@ -69,7 +69,7 @@ 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. +When using the pie/doughnut, radar or polarArea 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', @@ -85,6 +85,11 @@ options: { } ``` +:::warning +When using object notation in a radar chart you still need a labels array with labels for the chart to show correctly. +::: + + ## Object ```javascript diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 84a9568a4c1..92642a32fef 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -1,6 +1,5 @@ import DatasetController from '../core/core.datasetController'; -import {toRadians, PI} from '../helpers/index'; -import {formatNumber} from '../helpers/helpers.intl'; +import {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index'; export default class PolarAreaController extends DatasetController { @@ -23,6 +22,10 @@ export default class PolarAreaController extends DatasetController { }; } + parseObjectData(meta, data, start, count) { + return _parseObjectDataRadialScale.bind(this)(meta, data, start, count); + } + update(mode) { const arcs = this._cachedMeta.data; @@ -50,7 +53,6 @@ export default class PolarAreaController extends DatasetController { updateElements(arcs, start, count, mode) { const reset = mode === 'reset'; const chart = this.chart; - const dataset = this.getDataset(); const opts = chart.options; const animationOpts = opts.animation; const scale = this._cachedMeta.rScale; @@ -69,7 +71,7 @@ export default class PolarAreaController extends DatasetController { const arc = arcs[i]; let startAngle = angle; let endAngle = angle + this._computeAngle(i, mode, defaultAngle); - let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0; + let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0; angle = endAngle; if (reset) { @@ -96,12 +98,11 @@ export default class PolarAreaController extends DatasetController { } countVisibleElements() { - const dataset = this.getDataset(); const meta = this._cachedMeta; let count = 0; meta.data.forEach((element, index) => { - if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) { + if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) { count++; } }); diff --git a/src/controllers/controller.radar.js b/src/controllers/controller.radar.js index 36d53b03016..e1a525f316e 100644 --- a/src/controllers/controller.radar.js +++ b/src/controllers/controller.radar.js @@ -1,4 +1,5 @@ import DatasetController from '../core/core.datasetController'; +import {_parseObjectDataRadialScale} from '../helpers/index'; export default class RadarController extends DatasetController { @@ -15,6 +16,10 @@ export default class RadarController extends DatasetController { }; } + parseObjectData(meta, data, start, count) { + return _parseObjectDataRadialScale.bind(this)(meta, data, start, count); + } + update(mode) { const meta = this._cachedMeta; const line = meta.dataset; @@ -44,14 +49,13 @@ export default class RadarController extends DatasetController { } updateElements(points, start, count, mode) { - const dataset = this.getDataset(); const scale = this._cachedMeta.rScale; const reset = mode === 'reset'; for (let i = start; i < start + count; i++) { const point = points[i]; const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode); - const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]); + const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r); const x = reset ? scale.xCenter : pointPosition.x; const y = reset ? scale.yCenter : pointPosition.y; diff --git a/src/helpers/helpers.config.js b/src/helpers/helpers.config.js index e6b30b73226..058739d94c6 100644 --- a/src/helpers/helpers.config.js +++ b/src/helpers/helpers.config.js @@ -351,3 +351,19 @@ function resolveKeysFromAllScopes(scopes) { } return Array.from(set); } + +export function _parseObjectDataRadialScale(meta, data, start, count) { + const {iScale} = meta; + const {key = 'r'} = this._parsing; + const parsed = new Array(count); + let i, ilen, index, item; + + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + item = data[index]; + parsed[i] = { + r: iScale.parse(resolveObjectKey(item, key), index) + }; + } + return parsed; +} diff --git a/test/fixtures/controller.polarArea/parse-object-data.json b/test/fixtures/controller.polarArea/parse-object-data.json new file mode 100644 index 00000000000..17b8ebe595b --- /dev/null +++ b/test/fixtures/controller.polarArea/parse-object-data.json @@ -0,0 +1,27 @@ +{ + "config": { + "type": "polarArea", + "data": { + "datasets": [ + { + "data": [{"id": "Sales", "nested": {"value": 10}}, {"id": "Purchases", "nested": {"value": 20}}], + "backgroundColor": ["red", "blue"] + } + ] + }, + "options": { + "responsive": false, + "plugins": { + "legend": false + }, + "parsing": { + "key": "nested.value" + }, + "scales": { + "r": { + "display": false + } + } + } + } +} diff --git a/test/fixtures/controller.polarArea/parse-object-data.png b/test/fixtures/controller.polarArea/parse-object-data.png new file mode 100644 index 0000000000000000000000000000000000000000..dc24813095933a5a9b06dc97ef74f9b5cbe343fc GIT binary patch literal 21734 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�piG-g(v9u0k30WuF;!BI`|qB; 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 literal 0 HcmV?d00001 diff --git a/test/specs/controller.radar.tests.js b/test/specs/controller.radar.tests.js index b25aa2b7d6a..7e691d01cb2 100644 --- a/test/specs/controller.radar.tests.js +++ b/test/specs/controller.radar.tests.js @@ -74,6 +74,32 @@ describe('Chart.controllers.radar', function() { expect(meta.data[3].draw.calls.count()).toBe(1); }); + it('should draw all elements with object notation and default key', function() { + var chart = window.acquireChart({ + type: 'radar', + data: { + datasets: [{ + data: [{r: 10}, {r: 20}, {r: 15}] + }], + labels: ['label1', 'label2', 'label3'] + } + }); + + var meta = chart.getDatasetMeta(0); + + spyOn(meta.dataset, 'draw'); + spyOn(meta.data[0], 'draw'); + spyOn(meta.data[1], 'draw'); + spyOn(meta.data[2], 'draw'); + + chart.update(); + + expect(meta.dataset.draw.calls.count()).toBe(1); + expect(meta.data[0].draw.calls.count()).toBe(1); + expect(meta.data[1].draw.calls.count()).toBe(1); + expect(meta.data[2].draw.calls.count()).toBe(1); + }); + it('should update elements', function() { var chart = window.acquireChart({ type: 'radar',