From 15785fdc54c5e06c1d2275dbd515c92d624b4613 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 14 Dec 2019 20:03:09 +0200 Subject: [PATCH] Cache sorting order of dataset metas (#6757) * Cache sorting order of dataset metas * Cache dataset visibility --- src/core/core.controller.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/core/core.controller.js b/src/core/core.controller.js index d2977d12b..3ea05a925 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -396,6 +396,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { var me = this; var newControllers = []; var datasets = me.data.datasets; + var sorted = me._sortedMetasets = []; var i, ilen; for (i = 0, ilen = datasets.length; i < ilen; i++) { @@ -411,6 +412,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { meta.order = dataset.order || 0; meta.index = i; meta.label = '' + dataset.label; + meta.visible = me.isDatasetVisible(i); if (meta.controller) { meta.controller.updateIndex(i); @@ -424,8 +426,11 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { meta.controller = new ControllerClass(me, i); newControllers.push(meta.controller); } + sorted.push(meta); } + sorted.sort(compare2Level('order', 'index')); + return newControllers; }, @@ -681,13 +686,15 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { * @private */ transition: function(easingValue) { - var me = this; + const me = this; var i, ilen; if (!me._animationsDisabled) { - for (i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) { - if (me.isDatasetVisible(i)) { - me.getDatasetMeta(i).controller.transition(easingValue); + const metas = me._getSortedDatasetMetas(); + for (i = 0, ilen = metas.length; i < ilen; ++i) { + let meta = metas[i]; + if (meta.visible) { + meta.controller.transition(easingValue); } } } @@ -705,18 +712,17 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { */ _getSortedDatasetMetas: function(filterVisible) { var me = this; - var datasets = me.data.datasets || []; + var metasets = me._sortedMetasets; var result = []; var i, ilen; - for (i = 0, ilen = datasets.length; i < ilen; ++i) { - if (!filterVisible || me.isDatasetVisible(i)) { - result.push(me.getDatasetMeta(i)); + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + const meta = metasets[i]; + if (!filterVisible || meta.visible) { + result.push(meta); } } - result.sort(compare2Level('order', 'index')); - return result; }, @@ -859,13 +865,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { }, getVisibleDatasetCount: function() { - var count = 0; - for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { - if (this.isDatasetVisible(i)) { - count++; - } - } - return count; + return this._getSortedVisibleDatasetMetas().length; }, isDatasetVisible: function(datasetIndex) { -- 2.47.2