42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { buildInlineActivityEntries } from '@features/agent-graph/renderer';
|
|
import { filterTeamMessages } from '@renderer/utils/teamMessageFiltering';
|
|
import { isLeadMember } from '@shared/utils/leadDetection';
|
|
|
|
import type { InlineActivityEntry } from '@features/agent-graph/renderer';
|
|
import type { InboxMessage, ResolvedTeamMember, TeamTaskWithKanban } from '@shared/types';
|
|
|
|
export function buildMemberActivityEntries({
|
|
teamName,
|
|
memberName,
|
|
members,
|
|
tasks,
|
|
messages,
|
|
}: {
|
|
teamName: string;
|
|
memberName: string;
|
|
members: ResolvedTeamMember[];
|
|
tasks: TeamTaskWithKanban[];
|
|
messages: InboxMessage[];
|
|
}): InlineActivityEntry[] {
|
|
const filteredMessages = filterTeamMessages(messages, {
|
|
timeWindow: null,
|
|
filter: { from: new Set(), to: new Set(), showNoise: true },
|
|
searchQuery: '',
|
|
});
|
|
const leadId = `lead:${teamName}`;
|
|
const leadName = members.find((candidate) => isLeadMember(candidate))?.name ?? `${teamName}-lead`;
|
|
const ownerNodeId = memberName === leadName ? leadId : `member:${teamName}:${memberName}`;
|
|
const ownerNodeIds = new Set([leadId, ownerNodeId]);
|
|
const entriesByOwner = buildInlineActivityEntries({
|
|
data: {
|
|
members,
|
|
tasks,
|
|
messages: filteredMessages,
|
|
},
|
|
teamName,
|
|
leadId,
|
|
leadName,
|
|
ownerNodeIds,
|
|
});
|
|
return entriesByOwner.get(ownerNodeId) ?? [];
|
|
}
|