perf(renderer): collapse team message filter passes
This commit is contained in:
parent
da7d71c0b8
commit
0c1d3edb42
1 changed files with 51 additions and 57 deletions
|
|
@ -202,72 +202,66 @@ export function filterTeamMessages(
|
||||||
searchQuery,
|
searchQuery,
|
||||||
} = options;
|
} = options;
|
||||||
const leadNames = normalizeLeadNames(rawLeadNames);
|
const leadNames = normalizeLeadNames(rawLeadNames);
|
||||||
|
|
||||||
let list = messages.filter((m) => {
|
|
||||||
const data = getMessageFilterData(m);
|
|
||||||
return (
|
|
||||||
!data.isTaskCommentNotification &&
|
|
||||||
(includeAutomationEvents || !data.isTaskStallRemediation) &&
|
|
||||||
(includeMemberWorkSyncNudges || !data.isMemberWorkSyncNudge) &&
|
|
||||||
!data.isReviewPickupEscalation &&
|
|
||||||
!data.isInternalControlEnvelope
|
|
||||||
);
|
|
||||||
});
|
|
||||||
if (timeWindow) {
|
|
||||||
list = list.filter((m) => {
|
|
||||||
const ts = new Date(m.timestamp).getTime();
|
|
||||||
return ts >= timeWindow.start && ts < timeWindow.end;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!filter.showNoise) {
|
|
||||||
list = list.filter((m) => {
|
|
||||||
const data = getMessageFilterData(m);
|
|
||||||
if (!data.isNoiseMessage) return true;
|
|
||||||
return includePassiveIdlePeerSummariesWhenNoiseHidden && data.keepIdleWhenNoiseHidden;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const hasFrom = filter.from.size > 0;
|
const hasFrom = filter.from.size > 0;
|
||||||
const hasTo = filter.to.size > 0;
|
const hasTo = filter.to.size > 0;
|
||||||
if (hasFrom && hasTo) {
|
const q = searchQuery.trim().toLowerCase();
|
||||||
list = list.filter((m) => {
|
const visibleMessagesById = new Map<string, InboxMessage>();
|
||||||
const data = getMessageFilterData(m);
|
const filteredMessages: InboxMessage[] = [];
|
||||||
|
|
||||||
|
for (const message of messages) {
|
||||||
|
const data = getMessageFilterData(message);
|
||||||
|
if (
|
||||||
|
data.isTaskCommentNotification ||
|
||||||
|
(!includeAutomationEvents && data.isTaskStallRemediation) ||
|
||||||
|
(!includeMemberWorkSyncNudges && data.isMemberWorkSyncNudge) ||
|
||||||
|
data.isReviewPickupEscalation ||
|
||||||
|
data.isInternalControlEnvelope
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeWindow) {
|
||||||
|
const ts = new Date(message.timestamp).getTime();
|
||||||
|
if (ts < timeWindow.start || ts >= timeWindow.end) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!filter.showNoise &&
|
||||||
|
data.isNoiseMessage &&
|
||||||
|
(!includePassiveIdlePeerSummariesWhenNoiseHidden || !data.keepIdleWhenNoiseHidden)
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasFrom || hasTo) {
|
||||||
const fromMatch = Boolean(data.trimmedFrom && filter.from.has(data.trimmedFrom));
|
const fromMatch = Boolean(data.trimmedFrom && filter.from.has(data.trimmedFrom));
|
||||||
const toMatch = Boolean(data.trimmedTo && filter.to.has(data.trimmedTo));
|
const toMatch = Boolean(data.trimmedTo && filter.to.has(data.trimmedTo));
|
||||||
return fromMatch && toMatch;
|
if ((hasFrom && !fromMatch) || (hasTo && !toMatch)) {
|
||||||
});
|
continue;
|
||||||
} else if (hasFrom || hasTo) {
|
}
|
||||||
list = list.filter((m) => {
|
}
|
||||||
const data = getMessageFilterData(m);
|
|
||||||
if (hasFrom) return Boolean(data.trimmedFrom && filter.from.has(data.trimmedFrom));
|
|
||||||
if (hasTo) return Boolean(data.trimmedTo && filter.to.has(data.trimmedTo));
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const q = searchQuery.trim().toLowerCase();
|
if (q) {
|
||||||
if (q) {
|
const text = getSanitizedInboxMessageText(message).toLowerCase();
|
||||||
list = list.filter((m) => {
|
const summary = getSanitizedInboxMessageSummary(message).toLowerCase();
|
||||||
const text = getSanitizedInboxMessageText(m).toLowerCase();
|
const from = (message.from ?? '').toLowerCase();
|
||||||
const summary = getSanitizedInboxMessageSummary(m).toLowerCase();
|
const to = (message.to ?? '').toLowerCase();
|
||||||
const from = (m.from ?? '').toLowerCase();
|
if (!text.includes(q) && !summary.includes(q) && !from.includes(q) && !to.includes(q)) {
|
||||||
const to = (m.to ?? '').toLowerCase();
|
continue;
|
||||||
return text.includes(q) || summary.includes(q) || from.includes(q) || to.includes(q);
|
}
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const visibleMessagesById = new Map(
|
filteredMessages.push(message);
|
||||||
list
|
if (data.trimmedMessageId) {
|
||||||
.map((m) => {
|
visibleMessagesById.set(data.trimmedMessageId, message);
|
||||||
const id = getMessageFilterData(m).trimmedMessageId;
|
}
|
||||||
return id ? ([id, m] as const) : null;
|
}
|
||||||
})
|
|
||||||
.filter((entry): entry is readonly [string, InboxMessage] => entry !== null)
|
|
||||||
);
|
|
||||||
|
|
||||||
const seenRuntimeDeliveryRelayDuplicates = new Set<string>();
|
const seenRuntimeDeliveryRelayDuplicates = new Set<string>();
|
||||||
|
|
||||||
return list.filter((m) => {
|
return filteredMessages.filter((m) => {
|
||||||
const relayOfMessageId =
|
const relayOfMessageId =
|
||||||
typeof m.relayOfMessageId === 'string' ? m.relayOfMessageId.trim() : '';
|
typeof m.relayOfMessageId === 'string' ? m.relayOfMessageId.trim() : '';
|
||||||
if (!relayOfMessageId) {
|
if (!relayOfMessageId) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue