From 6a8787418c2f2e8d79e3cd72156e245994888755 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 28 Feb 2023 16:28:54 +0100 Subject: [PATCH 1/2] Fix value stored in element options for indexable option --- src/elements.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/elements.js b/src/elements.js index fcb4926f5..7010da52b 100644 --- a/src/elements.js +++ b/src/elements.js @@ -1,5 +1,5 @@ import {Animations} from 'chart.js'; -import {isObject, defined} from 'chart.js/helpers'; +import {isObject, isArray, defined} from 'chart.js/helpers'; import {eventHooks} from './events'; import {elementHooks} from './hooks'; import {annotationTypes} from './types'; @@ -131,7 +131,11 @@ function resolveObj(resolver, defs) { for (const prop of Object.keys(defs)) { const optDefs = defs[prop]; const value = resolver[prop]; - result[prop] = isObject(optDefs) && !isIndexable(prop) ? resolveObj(value, optDefs) : value; + if (isIndexable(prop) && isArray(value)) { + result[prop] = value.map((item) => isObject(optDefs) ? resolveObj(item, optDefs) : item); + } else { + result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + } } return result; } From 089b554783d60738b2882e112bb86eedf243b271 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 28 Feb 2023 17:11:30 +0100 Subject: [PATCH 2/2] CC --- src/elements.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/elements.js b/src/elements.js index 7010da52b..08db4604a 100644 --- a/src/elements.js +++ b/src/elements.js @@ -9,6 +9,8 @@ const directUpdater = { }; const hooks = eventHooks.concat(elementHooks); +const resolve = (value, optDefs) => isObject(optDefs) ? resolveObj(value, optDefs) : value; + /** * @typedef { import("chart.js").Chart } Chart @@ -132,9 +134,9 @@ function resolveObj(resolver, defs) { const optDefs = defs[prop]; const value = resolver[prop]; if (isIndexable(prop) && isArray(value)) { - result[prop] = value.map((item) => isObject(optDefs) ? resolveObj(item, optDefs) : item); + result[prop] = value.map((item) => resolve(item, optDefs)); } else { - result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + result[prop] = resolve(value, optDefs); } } return result;