From 9e06f90d14365e7a313acfa57042daf000989853 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 17 Apr 2021 14:29:41 +0300 Subject: [PATCH] Fix: Initialize data object when replaced (#8918) --- src/core/core.config.js | 14 +++++++++----- test/specs/core.controller.tests.js | 11 +++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/core/core.config.js b/src/core/core.config.js index d54b42aa0f1..e57fa28864f 100644 --- a/src/core/core.config.js +++ b/src/core/core.config.js @@ -85,12 +85,16 @@ function initOptions(config) { options.scales = mergeScaleConfig(config, options); } -function initConfig(config) { - config = config || {}; - - const data = config.data = config.data || {datasets: [], labels: []}; +function initData(data) { + data = data || {}; data.datasets = data.datasets || []; data.labels = data.labels || []; + return data; +} + +function initConfig(config) { + config = config || {}; + config.data = initData(config.data); initOptions(config); @@ -137,7 +141,7 @@ export default class Config { } set data(data) { - this._config.data = data; + this._config.data = initData(data); } get options() { diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index 9d4e7aa96e3..aa492ba837d 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -230,6 +230,17 @@ describe('Chart', function() { expect(createChart).toThrow(new Error('"area" is not a registered controller.')); }); + it('should initialize the data object', function() { + const chart = acquireChart({type: 'bar'}); + expect(chart.data).toEqual(jasmine.objectContaining({labels: [], datasets: []})); + chart.data = {}; + expect(chart.data).toEqual(jasmine.objectContaining({labels: [], datasets: []})); + chart.data = null; + expect(chart.data).toEqual(jasmine.objectContaining({labels: [], datasets: []})); + chart.data = undefined; + expect(chart.data).toEqual(jasmine.objectContaining({labels: [], datasets: []})); + }); + describe('should disable hover', function() { it('when options.hover=false', function() { var chart = acquireChart({