nodebb/public/src/client/chats/search.js

94 lines
2.2 KiB
JavaScript

'use strict';
/* globals define, socket, app */
define('forum/chats/search', ['components'], function (components) {
var search = {};
search.init = function () {
var timeoutId = 0;
components.get('chat/search').on('keyup', function () {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = 0;
}
timeoutId = setTimeout(doSearch, 250);
});
};
function doSearch() {
var username = components.get('chat/search').val();
var chatsListEl = $('[component="chat/search/list"]');
if (!username) {
return chatsListEl.empty();
}
socket.emit('user.search', {
query: username,
searchBy: 'username'
}, function (err, data) {
if (err) {
return app.alertError(err.message);
}
displayResults(chatsListEl, data);
});
}
function displayResults(chatsListEl, data) {
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) {
var chatEl = displayUser(chatsListEl, userObj);
onUserClick(chatEl, userObj);
});
}
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;
}
var chatEl = $('<li component="chat/search/user" />')
.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 app.alertError(err.message);
}
if (roomId) {
require(['forum/chats'], function (chats) {
chats.switchChat(roomId);
});
} else {
app.newChat(userObj.uid);
}
});
});
}
return search;
});