2022-01-29 00:00:11 +03:00
import $ from 'jquery' ;
2021-10-16 20:28:04 +03:00
import { htmlEscape } from 'escape-goat' ;
2021-10-21 10:37:43 +03:00
const { appSubUrl } = window . config ;
2022-10-19 15:40:28 +03:00
const looksLikeEmailAddressCheck = /^\S+@\S+$/ ;
2021-11-09 12:27:25 +03:00
export function initCompSearchUserBox ( ) {
2021-10-16 20:28:04 +03:00
const $searchUserBox = $ ( '#search-user-box' ) ;
2022-10-19 15:40:28 +03:00
const allowEmailInput = $searchUserBox . attr ( 'data-allow-email' ) === 'true' ;
const allowEmailDescription = $searchUserBox . attr ( 'data-allow-email-description' ) ;
2021-10-16 20:28:04 +03:00
$searchUserBox . search ( {
minCharacters : 2 ,
apiSettings : {
2023-04-14 21:48:36 +03:00
url : ` ${ appSubUrl } /user/search?active=1&q={query} ` ,
2021-10-16 20:28:04 +03:00
onResponse ( response ) {
const items = [ ] ;
2022-10-19 15:40:28 +03:00
const searchQuery = $searchUserBox . find ( 'input' ) . val ( ) ;
const searchQueryUppercase = searchQuery . toUpperCase ( ) ;
2021-10-16 20:28:04 +03:00
$ . each ( response . data , ( _i , item ) => {
let title = item . login ;
if ( item . full _name && item . full _name . length > 0 ) {
title += ` ( ${ htmlEscape ( item . full _name ) } ) ` ;
}
const resultItem = {
title ,
image : item . avatar _url
} ;
if ( searchQueryUppercase === item . login . toUpperCase ( ) ) {
items . unshift ( resultItem ) ;
} else {
items . push ( resultItem ) ;
}
} ) ;
2022-10-19 15:40:28 +03:00
if ( allowEmailInput && items . length === 0 && looksLikeEmailAddressCheck . test ( searchQuery ) ) {
const resultItem = {
title : searchQuery ,
description : allowEmailDescription
} ;
items . push ( resultItem ) ;
}
2021-10-16 20:28:04 +03:00
return { results : items } ;
}
} ,
searchFields : [ 'login' , 'full_name' ] ,
showNoResults : false
} ) ;
}