Change approach, do not use timeouts
This commit is contained in:
parent
7baebd3220
commit
ee87d15cf4
2 changed files with 14 additions and 20 deletions
|
@ -137,13 +137,17 @@ class @SearchAutocomplete
|
||||||
}
|
}
|
||||||
|
|
||||||
bindEvents: ->
|
bindEvents: ->
|
||||||
|
$(document).on 'click', @onDocumentClick
|
||||||
@searchInput.on 'keydown', @onSearchInputKeyDown
|
@searchInput.on 'keydown', @onSearchInputKeyDown
|
||||||
@searchInput.on 'keyup', @onSearchInputKeyUp
|
@searchInput.on 'keyup', @onSearchInputKeyUp
|
||||||
@searchInput.on 'click', @onSearchInputClick
|
@searchInput.on 'click', @onSearchInputClick
|
||||||
@searchInput.on 'focus', @onSearchInputFocus
|
@searchInput.on 'focus', @onSearchInputFocus
|
||||||
@searchInput.on 'blur', @onSearchInputBlur
|
|
||||||
@clearInput.on 'click', @onRemoveLocationClick
|
@clearInput.on 'click', @onRemoveLocationClick
|
||||||
|
|
||||||
|
onDocumentClick: (e) =>
|
||||||
|
if not $.contains(@dropdown[0], e.target) and @isFocused
|
||||||
|
@onSearchInputBlur()
|
||||||
|
|
||||||
enableAutocomplete: ->
|
enableAutocomplete: ->
|
||||||
# No need to enable anything if user is not logged in
|
# No need to enable anything if user is not logged in
|
||||||
return if !gon.current_user_id
|
return if !gon.current_user_id
|
||||||
|
@ -193,27 +197,21 @@ class @SearchAutocomplete
|
||||||
e.stopImmediatePropagation()
|
e.stopImmediatePropagation()
|
||||||
|
|
||||||
onSearchInputFocus: =>
|
onSearchInputFocus: =>
|
||||||
|
@isFocused = true
|
||||||
@wrap.addClass('search-active')
|
@wrap.addClass('search-active')
|
||||||
|
|
||||||
onRemoveLocationClick: (e) =>
|
onRemoveLocationClick: (e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@removeLocationBadge()
|
@removeLocationBadge()
|
||||||
@searchInput.val('').focus()
|
@searchInput.val('').focus()
|
||||||
@skipBlurEvent = true
|
|
||||||
|
|
||||||
onSearchInputBlur: (e) =>
|
onSearchInputBlur: (e) =>
|
||||||
@skipBlurEvent = false
|
@isFocused = false
|
||||||
|
@wrap.removeClass('search-active')
|
||||||
|
|
||||||
# We should wait to make sure we are not clearing the input instead
|
# If input is blank then restore state
|
||||||
setTimeout( =>
|
if @searchInput.val() is ''
|
||||||
return if @skipBlurEvent
|
@restoreOriginalState()
|
||||||
|
|
||||||
@wrap.removeClass('search-active')
|
|
||||||
|
|
||||||
# If input is blank then restore state
|
|
||||||
if @searchInput.val() is ''
|
|
||||||
@restoreOriginalState()
|
|
||||||
, 150)
|
|
||||||
|
|
||||||
addLocationBadge: (item) ->
|
addLocationBadge: (item) ->
|
||||||
category = if item.category? then "#{item.category}: " else ''
|
category = if item.category? then "#{item.category}: " else ''
|
||||||
|
@ -291,9 +289,5 @@ class @SearchAutocomplete
|
||||||
|
|
||||||
$el.removeClass('is-active')
|
$el.removeClass('is-active')
|
||||||
@disableAutocomplete()
|
@disableAutocomplete()
|
||||||
|
@onSearchInputFocus()
|
||||||
@searchInput.val('').focus()
|
@searchInput.val('').focus()
|
||||||
|
|
||||||
# We need to wait because of @skipBlurEvent
|
|
||||||
setTimeout( =>
|
|
||||||
@onSearchInputFocus()
|
|
||||||
, 200)
|
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
%a.is-focused.dropdown-menu-empty-link
|
%a.is-focused.dropdown-menu-empty-link
|
||||||
Loading...
|
Loading...
|
||||||
= dropdown_loading
|
= dropdown_loading
|
||||||
%i.search-icon
|
%i.search-icon
|
||||||
%i.clear-icon.js-clear-input
|
%i.clear-icon.js-clear-input
|
||||||
|
|
||||||
= hidden_field_tag :group_id, @group.try(:id)
|
= hidden_field_tag :group_id, @group.try(:id)
|
||||||
= hidden_field_tag :project_id, @project && @project.persisted? ? @project.id : '', id: 'search_project_id'
|
= hidden_field_tag :project_id, @project && @project.persisted? ? @project.id : '', id: 'search_project_id'
|
||||||
|
|
Loading…
Reference in a new issue