Pārlūkot izejas kodu

feat(templating): making progress on adhoc template variable, #6038

Torkel Ödegaard 9 gadi atpakaļ
vecāks
revīzija
94e5001c0e

+ 2 - 2
public/app/features/dashboard/ad_hoc_filters.ts

@@ -21,7 +21,7 @@ export class AdHocFiltersCtrl {
     if (this.variable.value && !_.isArray(this.variable.value)) {
     }
 
-    for (let tag of this.variable.value) {
+    for (let tag of this.variable.tags) {
       if (this.segments.length > 0) {
         this.segments.push(this.uiSegmentSrv.newCondition('AND'));
       }
@@ -130,7 +130,7 @@ export class AdHocFiltersCtrl {
     });
 
     this.$rootScope.$broadcast('refresh');
-    this.variable.value = tags;
+    this.variable.tags = tags;
   }
 }
 

+ 1 - 0
public/app/features/templating/templateValuesSrv.js

@@ -189,6 +189,7 @@ function (angular, _, $, kbn) {
       }
 
       if (variable.type === 'adhoc') {
+        variable.current = {};
         variable.options = [];
         return;
       }

+ 1 - 1
public/app/plugins/datasource/influxdb/datasource.ts

@@ -56,7 +56,7 @@ export default class InfluxDatasource {
         // apply add hoc filters
         for (let variable of this.templateSrv.variables) {
           if (variable.type === 'adhoc' && variable.datasource === this.name) {
-            for (let tag of variable.value) {
+            for (let tag of variable.tags) {
               if (tag.key !== undefined && tag.value !== undefined) {
                 target.tags.push({key: tag.key, value: tag.value, condition: 'AND'});
               }

+ 34 - 15
public/test/specs/templateValuesSrv-specs.js

@@ -28,24 +28,43 @@ define([
     });
 
     describe('when template variable is present in url', function() {
-      var variable = {
-        name: 'apps',
-        current: {text: "test", value: "test"},
-        options: [{text: "test", value: "test"}]
-      };
+      describe('and setting simple variable', function() {
+        var variable = {
+          name: 'apps',
+          current: {text: "test", value: "test"},
+          options: [{text: "test", value: "test"}]
+        };
 
-      beforeEach(function(done) {
-        var dashboard = { templating: { list: [variable] } };
-        var urlParams = {};
-        urlParams["var-apps"] = "new";
-        ctx.$location.search = sinon.stub().returns(urlParams);
-        ctx.service.init(dashboard).then(function() { done(); });
-        ctx.$rootScope.$digest();
+        beforeEach(function(done) {
+          var dashboard = { templating: { list: [variable] } };
+          var urlParams = {};
+          urlParams["var-apps"] = "new";
+          ctx.$location.search = sinon.stub().returns(urlParams);
+          ctx.service.init(dashboard).then(function() { done(); });
+          ctx.$rootScope.$digest();
+        });
+
+        it('should update current value', function() {
+          expect(variable.current.value).to.be("new");
+          expect(variable.current.text).to.be("new");
+        });
       });
 
-      it('should update current value', function() {
-        expect(variable.current.value).to.be("new");
-        expect(variable.current.text).to.be("new");
+      describe('and setting adhoc variable', function() {
+        var variable = {name: 'filters', type: 'adhoc'};
+
+        beforeEach(function(done) {
+          var dashboard = { templating: { list: [variable] } };
+          var urlParams = {};
+          urlParams["var-filters"] = "hostname|gt|server2";
+          ctx.$location.search = sinon.stub().returns(urlParams);
+          ctx.service.init(dashboard).then(function() { done(); });
+          ctx.$rootScope.$digest();
+        });
+
+        it('should update current value', function() {
+          expect(variable.tags[0]).to.eq({tag: 'hostname', value: 'server2'});
+        });
       });
     });