feat(templating): fixed issue with template variables set to reload on dashboard load being issued multiple times, fixes #5637

This commit is contained in:
Torkel Ödegaard 2016-07-25 12:02:59 +02:00
parent 9f777a535b
commit 0de0f4d014

View File

@ -10,6 +10,7 @@ function (angular, _, kbn) {
module.service('templateValuesSrv', function($q, $rootScope, datasourceSrv, $location, templateSrv, timeSrv) {
var self = this;
this.variableLock = {};
function getNoneOption() { return { text: 'None', value: '', isNone: true }; }
@ -90,6 +91,8 @@ function (angular, _, kbn) {
} else {
lock.resolve();
}
}).finally(function() {
delete self.variableLock[variable.name];
});
};
@ -124,7 +127,7 @@ function (angular, _, kbn) {
templateSrv.setGrafanaVariable('$__auto_interval', interval);
};
this.setVariableValue = function(variable, option, initPhase) {
this.setVariableValue = function(variable, option) {
variable.current = angular.copy(option);
if (_.isArray(variable.current.text)) {
@ -134,13 +137,7 @@ function (angular, _, kbn) {
self.selectOptionsForCurrentValue(variable);
templateSrv.updateTemplateData();
// on first load, variable loading is ordered to ensure
// that parents are updated before children.
if (initPhase) {
return $q.when();
}
return self.updateOptionsInChildVariables(variable);
return this.updateOptionsInChildVariables(variable);
};
this.variableUpdated = function(variable) {
@ -149,6 +146,11 @@ function (angular, _, kbn) {
};
this.updateOptionsInChildVariables = function(updatedVariable) {
// if there is a variable lock ignore cascading update because we are in a boot up scenario
if (self.variableLock[updatedVariable.name]) {
return $q.when();
}
var promises = _.map(self.variables, function(otherVariable) {
if (otherVariable === updatedVariable) {
return;