diff --git a/public/app/features/templating/templateValuesSrv.js b/public/app/features/templating/templateValuesSrv.js index 489e6291011..7c411377d87 100644 --- a/public/app/features/templating/templateValuesSrv.js +++ b/public/app/features/templating/templateValuesSrv.js @@ -244,15 +244,26 @@ function (angular, _, kbn) { this.validateVariableSelectionState = function(variable) { if (!variable.current) { if (!variable.options.length) { return; } - return self.setVariableValue(variable, variable.options[0], true); + return self.setVariableValue(variable, variable.options[0], false); } if (_.isArray(variable.current.value)) { self.selectOptionsForCurrentValue(variable); + // updated selected value + var selected = { + value: _.map(_.filter(variable.options, {selected: true}), function(op) { + return op.value; + }) + }; + // if none pick first + if (selected.value.length === 0) { + selected = variable.options[0]; + } + return self.setVariableValue(variable, selected, false); } else { var currentOption = _.findWhere(variable.options, {text: variable.current.text}); if (currentOption) { - return self.setVariableValue(variable, currentOption, true); + return self.setVariableValue(variable, currentOption, false); } else { if (!variable.options.length) { return; } return self.setVariableValue(variable, variable.options[0]); diff --git a/public/test/specs/templateValuesSrv-specs.js b/public/test/specs/templateValuesSrv-specs.js index 8652ec421b2..79aa2eafd8d 100644 --- a/public/test/specs/templateValuesSrv-specs.js +++ b/public/test/specs/templateValuesSrv-specs.js @@ -126,6 +126,46 @@ define([ }); }); + describeUpdateVariable('query variable with multi select and new options does not contain some selected values', function(scenario) { + scenario.setup(function() { + scenario.variable = { + type: 'query', + query: '', + name: 'test', + current: { + value: ['val1', 'val2', 'val3'], + text: 'val1 + val2 + val3' + } + }; + scenario.queryResult = [{text: 'val2'}, {text: 'val3'}]; + }); + + it('should update current value', function() { + expect(scenario.variable.current.value).to.eql(['val2', 'val3']); + expect(scenario.variable.current.text).to.eql('val2 + val3'); + }); + }); + + describeUpdateVariable('query variable with multi select and new options does not contain any selected values', function(scenario) { + scenario.setup(function() { + scenario.variable = { + type: 'query', + query: '', + name: 'test', + current: { + value: ['val1', 'val2', 'val3'], + text: 'val1 + val2 + val3' + } + }; + scenario.queryResult = [{text: 'val5'}, {text: 'val6'}]; + }); + + it('should update current value with first one', function() { + expect(scenario.variable.current.value).to.eql('val5'); + expect(scenario.variable.current.text).to.eql('val5'); + }); + }); + describeUpdateVariable('query variable with numeric results', function(scenario) { scenario.setup(function() { scenario.variable = { type: 'query', query: '', name: 'test', current: {} };