Просмотр исходного кода

Merge pull request #14890 from grafana/14871-unit-picker-scroll-issue

fix: It should be possible to scroll in the unit picker before select…
Torkel Ödegaard 7 лет назад
Родитель
Сommit
824a9a85db
1 измененных файлов с 20 добавлено и 9 удалено
  1. 20 9
      public/app/core/directives/dropdown_typeahead.ts

+ 20 - 9
public/app/core/directives/dropdown_typeahead.ts

@@ -141,6 +141,9 @@ export function dropdownTypeahead2($compile) {
     link: ($scope, elem, attrs) => {
     link: ($scope, elem, attrs) => {
       const $input = $(inputTemplate);
       const $input = $(inputTemplate);
       const $button = $(buttonTemplate);
       const $button = $(buttonTemplate);
+      const timeoutId = {
+        blur: null
+      };
       $input.appendTo(elem);
       $input.appendTo(elem);
       $button.appendTo(elem);
       $button.appendTo(elem);
 
 
@@ -177,6 +180,14 @@ export function dropdownTypeahead2($compile) {
         []
         []
       );
       );
 
 
+      const closeDropdownMenu = () => {
+        $input.hide();
+        $input.val('');
+        $button.show();
+        $button.focus();
+        elem.removeClass('open');
+      };
+
       $scope.menuItemSelected = (index, subIndex) => {
       $scope.menuItemSelected = (index, subIndex) => {
         const menuItem = $scope.menuItems[index];
         const menuItem = $scope.menuItems[index];
         const payload: any = { $item: menuItem };
         const payload: any = { $item: menuItem };
@@ -184,6 +195,7 @@ export function dropdownTypeahead2($compile) {
           payload.$subItem = menuItem.submenu[subIndex];
           payload.$subItem = menuItem.submenu[subIndex];
         }
         }
         $scope.dropdownTypeaheadOnSelect(payload);
         $scope.dropdownTypeaheadOnSelect(payload);
+        closeDropdownMenu();
       };
       };
 
 
       $input.attr('data-provide', 'typeahead');
       $input.attr('data-provide', 'typeahead');
@@ -223,16 +235,15 @@ export function dropdownTypeahead2($compile) {
         elem.toggleClass('open', $input.val() === '');
         elem.toggleClass('open', $input.val() === '');
       });
       });
 
 
+      elem.mousedown((evt: Event) => {
+        evt.preventDefault();
+        timeoutId.blur = null;
+      });
+
       $input.blur(() => {
       $input.blur(() => {
-        $input.hide();
-        $input.val('');
-        $button.show();
-        $button.focus();
-        // clicking the function dropdown menu won't
-        // work if you remove class at once
-        setTimeout(() => {
-          elem.removeClass('open');
-        }, 200);
+        timeoutId.blur = setTimeout(() => {
+          closeDropdownMenu();
+        }, 1);
       });
       });
 
 
       $compile(elem.contents())($scope);
       $compile(elem.contents())($scope);