diff --git a/static/assets/js/chat.js b/static/assets/js/chat.js index efc5823..7dd9ef5 100644 --- a/static/assets/js/chat.js +++ b/static/assets/js/chat.js @@ -543,19 +543,31 @@ function chatSearchMessages(terms) { var messagesEl = document.getElementById('chat-messages'); if (!resultsEl) return; if (!terms) { chatCloseSearch(); return; } - if (!chatCurrentTeamId) return; + + // Пошук по УСІХ командах (Mattermost search — per-team), результати зливаємо. + // ЛС/групові не прив'язані до команди й потрапляють у видачу будь-якої з них. + var teamIds = Object.keys(chatTeamsById); + if (!teamIds.length && chatCurrentTeamId) teamIds = [chatCurrentTeamId]; + if (!teamIds.length) return; resultsEl.style.display = 'flex'; if (messagesEl) messagesEl.style.display = 'none'; resultsEl.innerHTML = '
Пошук…
'; - chatApiFetch('/teams/' + chatCurrentTeamId + '/posts/search', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({terms: terms, is_or_search: false, per_page: 30}), - }).then(function (data) { - var ids = data.order || []; - var posts = ids.map(function (id) { return data.posts[id]; }).filter(Boolean); + var body = JSON.stringify({terms: terms, is_or_search: false, per_page: 30}); + var merged = {}; // id -> post (дедуплікація між командами) + Promise.all(teamIds.map(function (tid) { + return chatApiFetch('/teams/' + tid + '/posts/search', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: body, + }).then(function (data) { + (data.order || []).forEach(function (id) { + if (data.posts && data.posts[id]) merged[id] = data.posts[id]; + }); + }).catch(function () { /* збій однієї команди не валить весь пошук */ }); + })).then(function () { + var posts = Object.keys(merged).map(function (id) { return merged[id]; }); return chatResolveUsernames(posts).then(function () { chatRenderSearchResults(posts); });