diff --git a/public/app/features/templating/variable_srv.ts b/public/app/features/templating/variable_srv.ts index b3036c79004..f117179656a 100644 --- a/public/app/features/templating/variable_srv.ts +++ b/public/app/features/templating/variable_srv.ts @@ -330,9 +330,12 @@ export class VariableSrv { for (const v of this.variables) { const key = `var-${v.name}`; if (vars.hasOwnProperty(key)) { - update.push(v.setValueFromUrl(vars[key])); + if (this.isVariableUrlValueDifferentFromCurrent(v, vars[key])) { + update.push(v.setValueFromUrl(vars[key])); + } } } + if (update.length) { Promise.all(update).then(() => { this.dashboard.templateVariableValueUpdated(); @@ -341,6 +344,11 @@ export class VariableSrv { } } + isVariableUrlValueDifferentFromCurrent(variable: any, urlValue: any) { + // lodash _.isEqual handles array of value equality checks as well + return !_.isEqual(variable.current.value, urlValue); + } + updateUrlParamsWithCurrentVariables() { // update url const params = this.$location.search();