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);
});