import { CARD_BG, CARD_BORDER_STYLE, CARD_ICON_MUTED } from '@renderer/constants/cssVariables'; import { getTeamColorSet, getThemedBadge } from '@renderer/constants/teamColors'; import { useTheme } from '@renderer/hooks/useTheme'; import { formatAgentRole } from '@renderer/utils/formatAgentRole'; import { agentAvatarUrl, buildMemberColorMap } from '@renderer/utils/memberHelpers'; import { formatDistanceToNowStrict } from 'date-fns'; import type { ResolvedTeamMember } from '@shared/types'; interface PendingRepliesBlockProps { members: ResolvedTeamMember[]; pendingRepliesByMember: Record; onMemberClick?: (member: ResolvedTeamMember) => void; } export const PendingRepliesBlock = ({ members, pendingRepliesByMember, onMemberClick, }: PendingRepliesBlockProps): React.JSX.Element | null => { const { isLight } = useTheme(); const colorMap = buildMemberColorMap(members); const pending = Object.entries(pendingRepliesByMember) .map(([name, sentAtMs]) => ({ member: members.find((m) => m.name === name) ?? null, name, sentAtMs, })) .filter((p): p is { member: ResolvedTeamMember; name: string; sentAtMs: number } => !!p.member) .sort((a, b) => b.sentAtMs - a.sentAtMs); if (pending.length === 0) return null; return (

Awaiting replies

{pending.map(({ member, sentAtMs }) => { const colors = getTeamColorSet(colorMap.get(member.name) ?? ''); const roleLabel = formatAgentRole( member.role ?? (member.agentType !== 'general-purpose' ? member.agentType : undefined) ); const since = formatDistanceToNowStrict(sentAtMs, { addSuffix: true }); return (
{onMemberClick ? ( ) : ( {member.name} )} {roleLabel ? ( {roleLabel} ) : null} awaiting reply {since}
); })}
); };