You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.1 KiB
JavaScript

'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('<li><div><span>[[users:no-users-found]]</span></div></li>');
}
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 ?
'<img src="' + userObj.picture + '" title="' + userObj.username + '" />' :
'<div class="user-icon" style="background-color: ' + userObj['icon:bgColor'] + '">' + userObj['icon:text'] + '</div>') +
'<i class="fa fa-circle status ' + userObj.status + '"></i> ' + userObj.username;
}
const chatEl = $('<li component="chat/search/user"></li>')
.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;
});