Browse Source

AMBARI-16003: JS error on hosts filtering when filter for same field is used twice (rzang)

Richard Zang 9 năm trước cách đây
mục cha
commit
04f7d5c3ef
1 tập tin đã thay đổi với 41 bổ sung17 xóa
  1. 41 17
      ambari-web/app/views/main/host/combo_search_box.js

+ 41 - 17
ambari-web/app/views/main/host/combo_search_box.js

@@ -69,9 +69,49 @@ App.MainHostComboSearchBoxView = Em.View.extend({
     return currentComponentFacets;
   },
 
+  getFacetsByName: function(name) {
+    var facets = visualSearch.searchQuery.toJSON().filter(function(facet) {
+      return facet.category === name;
+    });
+    return facets;
+  },
+
+  filterOutOneFacetOnlyOptions: function(options) {
+    var self = this;
+    var oneFacetOnlyLables = ['Cores', 'RAM'];
+    oneFacetOnlyLables.forEach(function(label) {
+      var facets = self.getFacetsByName(label);
+      if (facets.length > 0) {
+        options = options.rejectProperty('label', label);
+      }
+    });
+    return options;
+  },
+
+  setupLabelMap: function() {
+    var map = App.router.get('mainHostController.labelValueMap');
+    map['Host Name'] = 'hostName';
+    map['IP'] = 'ip';
+    map['Host Status'] = 'healthClass';
+    map['Cores'] = 'cpu';
+    map['RAM'] = 'memoryFormatted';
+    map['Stack Version'] = 'version';
+    map['Version State'] = 'versionState';
+    map['Rack'] = 'rack';
+    map['Service'] = 'services';
+
+    map['Inservice'] = 'INSERVICE';
+    map['Decommissioned'] = 'DECOMMISSIONED';
+    map['Decommissioning'] = 'DECOMMISSIONING';
+    map['RS Decommissioned'] = 'RS_DECOMMISSIONED';
+    map['Maintenance Mode On'] = 'ON';
+    map['Maintenance Mode Off'] = 'OFF';
+  },
+
   initVS: function() {
     var self = this;
     var controller = App.router.get('mainHostComboSearchBoxController');
+    this.setupLabelMap();
     window.visualSearch = VS.init({
       container: $('#combo_search_box'),
       query: '',
@@ -101,17 +141,6 @@ App.MainHostComboSearchBoxView = Em.View.extend({
             {label: 'Rack', category: 'Host'},
             {label: 'Service', category: 'Service'}
           ];
-          var map = App.router.get('mainHostController.labelValueMap');
-          map['Host Name'] = 'hostName';
-          map['IP'] = 'ip';
-          map['Host Status'] = 'healthClass';
-          map['Cores'] = 'cpu';
-          map['RAM'] = 'memoryFormatted';
-          map['Stack Version'] = 'version';
-          map['Version State'] = 'versionState';
-          map['Rack'] = 'rack';
-          map['Service'] = 'services';
-
           var hostComponentList = self.getHostComponentList();
           // Add host component facets only when there isn't any component filter
           // with value other than ALL yet
@@ -119,6 +148,7 @@ App.MainHostComboSearchBoxView = Em.View.extend({
           if (currentComponentFacets.length == 0) {
             list = list.concat(hostComponentList);
           }
+          list = self.filterOutOneFacetOnlyOptions(list);
           // Append host components
           callback(list, {preserveOrder: true});
         },
@@ -194,12 +224,6 @@ App.MainHostComboSearchBoxView = Em.View.extend({
                     "Maintenance Mode On",
                     "Maintenance Mode Off"
                 ]);
-                map['Inservice'] = 'INSERVICE';
-                map['Decommissioned'] = 'DECOMMISSIONED';
-                map['Decommissioning'] = 'DECOMMISSIONING';
-                map['RS Decommissioned'] = 'RS_DECOMMISSIONED';
-                map['Maintenance Mode On'] = 'ON';
-                map['Maintenance Mode Off'] = 'OFF';
               }
               callback(list, {preserveOrder: true});
               break;