fix: It should be possible to scroll in the unit picker before selecting a value #14871

This commit is contained in:
Johannes Schill 2019-01-15 14:14:38 +01:00
parent d907b1ec6b
commit d59f1fe629

View File

@ -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(); timeoutId.blur = setTimeout(() => {
$input.val(''); closeDropdownMenu();
$button.show(); }, 1);
$button.focus();
// clicking the function dropdown menu won't
// work if you remove class at once
setTimeout(() => {
elem.removeClass('open');
}, 200);
}); });
$compile(elem.contents())($scope); $compile(elem.contents())($scope);