31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
import { store } from '../store'
|
|
import { doEmojiSearch } from '../../_actions/autosuggestEmojiSearch'
|
|
import { doAccountSearch } from '../../_actions/autosuggestAccountSearch'
|
|
|
|
export function autosuggestObservers () {
|
|
let lastSearch
|
|
|
|
store.observe('autosuggestSearchText', async autosuggestSearchText => {
|
|
// cancel any inflight XHRs or other operations
|
|
if (lastSearch) {
|
|
lastSearch.cancel()
|
|
lastSearch = null
|
|
}
|
|
// autosuggestSelecting indicates that the user has pressed Enter or clicked on an item
|
|
// and the results are being processed. Returning early avoids a flash of searched content.
|
|
let { composeFocused } = store.get()
|
|
let autosuggestSelecting = store.getForCurrentAutosuggest('autosuggestSelecting')
|
|
if (!composeFocused || !autosuggestSearchText || autosuggestSelecting) {
|
|
return
|
|
}
|
|
|
|
let autosuggestType = autosuggestSearchText.startsWith('@') ? 'account' : 'emoji'
|
|
|
|
if (autosuggestType === 'emoji') {
|
|
lastSearch = doEmojiSearch(autosuggestSearchText)
|
|
} else {
|
|
lastSearch = doAccountSearch(autosuggestSearchText)
|
|
}
|
|
})
|
|
}
|