feat: #11850, chat msg search
parent
50fd7930ed
commit
11bfeaf130
@ -0,0 +1,82 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
define('forum/chats/message-search', [
|
||||||
|
'components', 'alerts', 'forum/chats/messages',
|
||||||
|
], function (components, alerts, messages) {
|
||||||
|
const messageSearch = {};
|
||||||
|
let roomId = 0;
|
||||||
|
let resultListEl;
|
||||||
|
let chatContent;
|
||||||
|
let clearEl;
|
||||||
|
|
||||||
|
messageSearch.init = function (_roomId) {
|
||||||
|
roomId = _roomId;
|
||||||
|
const searchInput = $('[component="chat/room/search"]');
|
||||||
|
searchInput.on('keyup', utils.debounce(doSearch, 250))
|
||||||
|
.on('focus', () => {
|
||||||
|
if (searchInput.val()) {
|
||||||
|
doSearch();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
resultListEl = $('[component="chat/message/search/results"]');
|
||||||
|
chatContent = $('[component="chat/message/content"]');
|
||||||
|
clearEl = $('[component="chat/room/search/clear"]');
|
||||||
|
$('[component="chat/input"]').on('focus', () => {
|
||||||
|
resultListEl.addClass('hidden');
|
||||||
|
chatContent.removeClass('hidden');
|
||||||
|
});
|
||||||
|
clearEl.on('click', clearInputAndResults);
|
||||||
|
};
|
||||||
|
|
||||||
|
function clearInputAndResults() {
|
||||||
|
components.get('chat/room/search').val('');
|
||||||
|
removeResults();
|
||||||
|
resultListEl.addClass('hidden');
|
||||||
|
chatContent.removeClass('hidden');
|
||||||
|
clearEl.addClass('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doSearch() {
|
||||||
|
const query = components.get('chat/room/search').val();
|
||||||
|
if (!query) {
|
||||||
|
return clearInputAndResults();
|
||||||
|
}
|
||||||
|
if (query.length <= 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clearEl.removeClass('hidden');
|
||||||
|
socket.emit('modules.chats.searchMessages', {
|
||||||
|
content: query,
|
||||||
|
roomId: roomId,
|
||||||
|
}).then(displayResults)
|
||||||
|
.catch(alerts.error);
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeResults() {
|
||||||
|
resultListEl.children('[data-mid]').remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function displayResults(data) {
|
||||||
|
removeResults();
|
||||||
|
|
||||||
|
if (!data.length) {
|
||||||
|
resultListEl.removeClass('hidden');
|
||||||
|
chatContent.addClass('hidden');
|
||||||
|
return resultListEl.find('[component="chat/message/search/no-results"]').removeClass('hidden');
|
||||||
|
}
|
||||||
|
resultListEl.find('[component="chat/message/search/no-results"]').addClass('hidden');
|
||||||
|
|
||||||
|
const html = await app.parseAndTranslate('partials/chats/messages', {
|
||||||
|
messages: data,
|
||||||
|
isAdminOrGlobalMod: app.user.isAdmin || app.user.isGlobalMod,
|
||||||
|
});
|
||||||
|
|
||||||
|
resultListEl.append(html);
|
||||||
|
messages.onMessagesAddedToDom(resultListEl.find('[component="chat/message"]'));
|
||||||
|
chatContent.addClass('hidden');
|
||||||
|
resultListEl.removeClass('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
return messageSearch;
|
||||||
|
});
|
Loading…
Reference in New Issue