Чат: поиск сообщений по всем командам, а не только по текущей
Mattermost search per-team — опрашиваем все команды пользователя параллельно и сливаем результаты с дедупликацией по id. ЛС/групповые попадают в выдачу любой команды. Сбой одной команды не валит весь поиск. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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 = '<div style="text-align:center; font-size:0.8125rem; color:var(--color-muted-foreground); padding:1rem;">Пошук…</div>';
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user