From f6c94b9c40fd11f04b55a8a62ea03c02976e3f3a Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 14 Jan 2020 22:51:25 -0800 Subject: [PATCH] Templating: use default datasource when missing (#21495) --- .../templating/datasource_variable.ts | 4 ++- .../app/features/templating/variable_srv.ts | 30 ++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/public/app/features/templating/datasource_variable.ts b/public/app/features/templating/datasource_variable.ts index 103dd57c934..859b622820c 100644 --- a/public/app/features/templating/datasource_variable.ts +++ b/public/app/features/templating/datasource_variable.ts @@ -3,6 +3,7 @@ import { stringToJsRegex } from '@grafana/data'; import { VariableSrv } from './variable_srv'; import { TemplateSrv } from './template_srv'; import { DatasourceSrv } from '../plugins/datasource_srv'; +import { config } from '@grafana/runtime'; export class DatasourceVariable implements VariableActions { regex: any; @@ -84,7 +85,8 @@ export class DatasourceVariable implements VariableActions { if (this.includeAll) { this.addAllOption(); } - return this.variableSrv.validateVariableSelectionState(this); + const { defaultDatasource } = config.bootData.settings; + return this.variableSrv.validateVariableSelectionState(this, defaultDatasource); } addAllOption() { diff --git a/public/app/features/templating/variable_srv.ts b/public/app/features/templating/variable_srv.ts index a4d28569c5f..6d873b33fe0 100644 --- a/public/app/features/templating/variable_srv.ts +++ b/public/app/features/templating/variable_srv.ts @@ -181,7 +181,7 @@ export class VariableSrv { return selected; } - validateVariableSelectionState(variable: any) { + validateVariableSelectionState(variable: any, defaultValue?: string) { if (!variable.current) { variable.current = {}; } @@ -205,17 +205,33 @@ export class VariableSrv { return variable.setValue(selected); } else { - const currentOption: any = _.find(variable.options, { + let option: any = undefined; + + // 1. find the current value + option = _.find(variable.options, { text: variable.current.text, }); - if (currentOption) { - return variable.setValue(currentOption); - } else { - if (!variable.options.length) { - return Promise.resolve(); + if (option) { + return variable.setValue(option); + } + + // 2. find the default value + if (defaultValue) { + option = _.find(variable.options, { + text: defaultValue, + }); + if (option) { + return variable.setValue(option); } + } + + // 3. use the first value + if (variable.options) { return variable.setValue(variable.options[0]); } + + // 4... give up + return Promise.resolve(); } }