'use strict';
define('forum/chats/search', ['components', 'api', 'alerts'], function (components, api, alerts) {
const search = {};
search.init = function () {
components.get('chat/search').on('keyup', utils.debounce(doSearch, 250));
};
function doSearch() {
const username = components.get('chat/search').val();
if (!username) {
return $('[component="chat/search/list"]').empty();
}
api.get('/api/users', {
query: username,
searchBy: 'username',
paginate: false,
}).then(displayResults)
.catch(alerts.error);
}
function displayResults(data) {
const chatsListEl = $('[component="chat/search/list"]');
chatsListEl.empty();
data.users = data.users.filter(function (user) {
return parseInt(user.uid, 10) !== parseInt(app.user.uid, 10);
});
if (!data.users.length) {
return chatsListEl.translateHtml('
[[users:no-users-found]]
');
}
data.users.forEach(function (userObj) {
const chatEl = displayUser(chatsListEl, userObj);
onUserClick(chatEl, userObj);
});
chatsListEl.parent().toggleClass('open', true);
}
function displayUser(chatsListEl, userObj) {
function createUserImage() {
return (userObj.picture ?
'
' :
'' + userObj['icon:text'] + '
') +
' ' + userObj.username;
}
const chatEl = $('')
.attr('data-uid', userObj.uid)
.appendTo(chatsListEl);
chatEl.append(createUserImage());
return chatEl;
}
function onUserClick(chatEl, userObj) {
chatEl.on('click', function () {
socket.emit('modules.chats.hasPrivateChat', userObj.uid, function (err, roomId) {
if (err) {
return alerts.error(err);
}
if (roomId) {
require(['forum/chats'], function (chats) {
chats.switchChat(roomId);
});
} else {
require(['chat'], function (chat) {
chat.newChat(userObj.uid);
});
}
});
});
}
return search;
});