]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix: Initialize data object when replaced (#8918)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Sat, 17 Apr 2021 11:29:41 +0000 (14:29 +0300)
committerGitHub <noreply@github.com>
Sat, 17 Apr 2021 11:29:41 +0000 (07:29 -0400)
src/core/core.config.js
test/specs/core.controller.tests.js

index d54b42aa0f144d41bfb62a1f7c0e9a3e3e32965a..e57fa28864f495f480a04cedf5f7d82e68e3f790 100644 (file)
@@ -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() {
index 9d4e7aa96e3772ca9495137db0f0e28edf68d56e..aa492ba837d310f5e6c82a8ad939644705e34d8e 100644 (file)
@@ -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({