You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2018/01/02 16:56:14 UTC

[23/37] ambari git commit: AMBARI-22692 JS error when switching focus of filters in combo search. (atkach)

AMBARI-22692 JS error when switching focus of filters in combo search. (atkach)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e04b57b7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e04b57b7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e04b57b7

Branch: refs/heads/branch-feature-AMBARI-21674
Commit: e04b57b7e04e542764c38d54da1ef80a7eb1679d
Parents: 9c7f1b7
Author: Andrii Tkach <at...@apache.org>
Authored: Fri Dec 22 16:40:33 2017 +0200
Committer: Andrii Tkach <at...@apache.org>
Committed: Tue Dec 26 12:45:24 2017 +0200

----------------------------------------------------------------------
 .../app/scripts/directives/comboSearch.js       |  27 ++-
 .../test/unit/directives/comboSearch_test.js    | 187 ++++++++++++++++---
 2 files changed, 184 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e04b57b7/ambari-admin/src/main/resources/ui/admin-web/app/scripts/directives/comboSearch.js
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/directives/comboSearch.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/directives/comboSearch.js
index fc58eae..f1cd515 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/directives/comboSearch.js
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/directives/comboSearch.js
@@ -17,6 +17,27 @@
  */
 'use strict';
 
+
+/**
+ *  Example:
+ *  <combo-search suggestions="filters"
+ *                filter-change="filterItems"
+ *                placeholder="Search"
+ *                supportCategories="true">
+ *  </combo-search>
+ *
+ *  filters = [
+ *    {
+ *      key: 'property1',
+ *      label: $t('propertyLabel'),
+ *      category: 'category1'
+ *      options: []
+ *    }
+ *  ]
+ *  Note: "category" field is optional, should be used only when supportCategories="true"
+ *
+ */
+
 angular.module('ambariAdminConsole')
 .directive('comboSearch', function() {
   return {
@@ -41,7 +62,7 @@ angular.module('ambariAdminConsole')
       var suggestions = $ctrl.suggestions;
       var supportCategories = $ctrl.supportCategories;
       var mainInputElement = $elem.find('.main-input.combo-search-input');
-      $scope.paceholder = $ctrl.placeholder;
+      $scope.placeholder = $ctrl.placeholder;
       $scope.searchFilterInput = '';
       $scope.filterSuggestions = [];
       $scope.showAutoComplete = false;
@@ -261,7 +282,7 @@ angular.module('ambariAdminConsole')
       }
 
       function initKeyHandlers() {
-        $(document).keydown(function(event) {
+        $($elem).keydown(function(event) {
           if (event.which === 13) { // "Enter" key
             enterKeyHandler();
             $scope.$apply();
@@ -295,7 +316,7 @@ angular.module('ambariAdminConsole')
 
       function leftArrowKeyHandler() {
         var activeElement = $(document.activeElement);
-        if (activeElement.is('input') && activeElement[0].selectionStart === 0) {
+        if (activeElement.is('input') && activeElement[0].selectionStart === 0 && $scope.appliedFilters.length > 0) {
           if (activeElement.hasClass('main-input')) {
             focusInput($scope.appliedFilters[$scope.appliedFilters.length - 1]);
           } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/e04b57b7/ambari-admin/src/main/resources/ui/admin-web/test/unit/directives/comboSearch_test.js
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/test/unit/directives/comboSearch_test.js b/ambari-admin/src/main/resources/ui/admin-web/test/unit/directives/comboSearch_test.js
index 0f4e3b3..59b74be 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/test/unit/directives/comboSearch_test.js
+++ b/ambari-admin/src/main/resources/ui/admin-web/test/unit/directives/comboSearch_test.js
@@ -133,33 +133,6 @@ describe('#comboSearch', function () {
     });
   });
 
-  describe('#hideAutocomplete', function() {
-
-    it('showAutoComplete should be false when isEditing = false', function () {
-      var isoScope = element.isolateScope();
-      jasmine.Clock.useMock();
-
-      isoScope.isEditing = false;
-      isoScope.showAutoComplete = true;
-      isoScope.hideAutocomplete();
-
-      jasmine.Clock.tick(101);
-      expect(isoScope.showAutoComplete).toBeFalsy();
-    });
-
-    it('showAutoComplete should be false when isEditing = true', function () {
-      var isoScope = element.isolateScope();
-      jasmine.Clock.useMock();
-
-      isoScope.isEditing = true;
-      isoScope.showAutoComplete = true;
-      isoScope.hideAutocomplete();
-
-      jasmine.Clock.tick(101);
-      expect(isoScope.showAutoComplete).toBeTruthy();
-    });
-  });
-
   describe('#makeActive', function() {
     it('category option can not be active', function () {
       var isoScope = element.isolateScope();
@@ -226,4 +199,164 @@ describe('#comboSearch', function () {
     });
   });
 
+  describe('#observeSearchFilterInput', function() {
+    it('should show all filters when search filter empty', function () {
+      var isoScope = element.isolateScope();
+      isoScope.searchFilterInput = '';
+
+      isoScope.observeSearchFilterInput();
+
+      expect(isoScope.showAutoComplete).toBeTruthy();
+      expect(isoScope.filterSuggestions).toEqual([
+        {
+          key: 'f1',
+          label: 'filter1',
+          options: [  ],
+          active: true
+        },
+        {
+          key: 'f2',
+          label: 'filter2',
+          options: [  ],
+          active: false
+        }
+      ]);
+    });
+
+    it('should show only searched filter when search filter not empty', function () {
+      var isoScope = element.isolateScope();
+      isoScope.searchFilterInput = 'filter1';
+
+      isoScope.observeSearchFilterInput();
+
+      expect(isoScope.showAutoComplete).toBeTruthy();
+      expect(isoScope.filterSuggestions).toEqual([
+        {
+          key: 'f1',
+          label: 'filter1',
+          options: [  ],
+          active: true
+        }
+      ]);
+    });
+
+    it('should show no filter when search filter not found', function () {
+      var isoScope = element.isolateScope();
+      isoScope.searchFilterInput = 'unknown-filter';
+
+      isoScope.observeSearchFilterInput();
+
+      expect(isoScope.showAutoComplete).toBeFalsy();
+      expect(isoScope.filterSuggestions).toEqual([]);
+    });
+  });
+
+  describe('#observeSearchOptionInput', function() {
+    it('should show all options when options search empty', function () {
+      var isoScope = element.isolateScope();
+      var filter = {
+        key: 'p1',
+        searchOptionInput: '',
+        currentOption: null,
+        options: [
+          {
+            key: 'op1',
+            label: 'op1'
+          },
+          {
+            key: 'op2',
+            label: 'op2'
+          }
+        ]
+      };
+      isoScope.appliedFilters = [
+        {
+          key: 'p5',
+          currentOption: {
+            key: 'op5'
+          }
+        }
+      ];
+
+      isoScope.observeSearchOptionInput(filter);
+
+      expect(filter.showAutoComplete).toBeTruthy();
+      expect(filter.filteredOptions).toEqual([
+        {
+          key: 'op1',
+          label: 'op1',
+          active: false
+        },
+        {
+          key: 'op2',
+          label: 'op2',
+          active: false
+        }
+      ]);
+    });
+
+    it('should show only filtered options when options search not empty', function () {
+      var isoScope = element.isolateScope();
+      var filter = {
+        key: 'p1',
+        currentOption: null,
+        searchOptionInput: 'op1',
+        options: [
+          {
+            key: 'op1',
+            label: 'op1'
+          },
+          {
+            key: 'op2',
+            label: 'op2'
+          }
+        ]
+      };
+      isoScope.appliedFilters = [
+        {
+          key: 'p5',
+          currentOption: {
+            key: 'op5'
+          }
+        }
+      ];
+
+      isoScope.observeSearchOptionInput(filter);
+
+      expect(filter.showAutoComplete).toBeTruthy();
+      expect(filter.filteredOptions).toEqual([
+        {
+          key: 'op1',
+          label: 'op1',
+          active: false
+        }
+      ]);
+    });
+
+    it('should show no options when options search not found', function () {
+      var isoScope = element.isolateScope();
+      var filter = {
+        key: 'p1',
+        currentOption: null,
+        searchOptionInput: 'op3',
+        options: [
+          {
+            key: 'op1',
+            label: 'op1'
+          },
+          {
+            key: 'op2',
+            label: 'op2'
+          }
+        ]
+      };
+      isoScope.appliedFilters = [];
+
+      isoScope.observeSearchOptionInput(filter);
+
+      expect(filter.showAutoComplete).toBeFalsy();
+      expect(filter.filteredOptions).toEqual([]);
+    });
+  });
+
 });