forked from cybrespace/pinafore
42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
import {
|
|
searchAccountsByUsername as searchAccountsByUsernameInDatabase
|
|
} from '../../_database/accounts'
|
|
|
|
const SEARCH_RESULTS_LIMIT = 4
|
|
const DATABASE_SEARCH_RESULTS_LIMIT = 30
|
|
|
|
async function searchAccounts (store, searchText) {
|
|
searchText = searchText.substring(1)
|
|
let { currentInstance } = store.get()
|
|
let results = await searchAccountsByUsernameInDatabase(
|
|
currentInstance, searchText, DATABASE_SEARCH_RESULTS_LIMIT)
|
|
return results.slice(0, SEARCH_RESULTS_LIMIT)
|
|
}
|
|
|
|
function searchEmoji (store, searchText) {
|
|
searchText = searchText.toLowerCase().substring(1)
|
|
let { currentCustomEmoji } = store.get()
|
|
let results = currentCustomEmoji.filter(emoji => emoji.shortcode.toLowerCase().startsWith(searchText))
|
|
.sort((a, b) => a.shortcode.toLowerCase() < b.shortcode.toLowerCase() ? -1 : 1)
|
|
.slice(0, SEARCH_RESULTS_LIMIT)
|
|
return results
|
|
}
|
|
|
|
export function autosuggestObservers (store) {
|
|
store.observe('autosuggestSearchText', async autosuggestSearchText => {
|
|
let { composeFocused } = store.get()
|
|
if (!composeFocused || !autosuggestSearchText) {
|
|
return
|
|
}
|
|
let autosuggestType = autosuggestSearchText.startsWith('@') ? 'account' : 'emoji'
|
|
let results = (autosuggestType === 'account')
|
|
? await searchAccounts(store, autosuggestSearchText)
|
|
: await searchEmoji(store, autosuggestSearchText)
|
|
store.setForCurrentAutosuggest({
|
|
autosuggestType,
|
|
autosuggestSelected: 0,
|
|
autosuggestSearchResults: results
|
|
})
|
|
})
|
|
}
|