import { Badge } from '@renderer/components/ui/badge'; import { getTeamColorSet } from '@renderer/constants/teamColors'; import { formatAgentRole } from '@renderer/utils/formatAgentRole'; import { agentAvatarUrl, getMemberDotClass, getPresenceLabel } from '@renderer/utils/memberHelpers'; import { ListPlus, MessageSquare } from 'lucide-react'; import type { TaskStatusCounts } from '@renderer/utils/pathNormalize'; import type { ResolvedTeamMember } from '@shared/types'; interface MemberCardProps { member: ResolvedTeamMember; memberColor: string; taskCounts?: TaskStatusCounts | null; isTeamAlive?: boolean; onClick?: () => void; onSendMessage?: () => void; onAssignTask?: () => void; } export const MemberCard = ({ member, memberColor, taskCounts, isTeamAlive, onClick, onSendMessage, onAssignTask, }: MemberCardProps): React.JSX.Element => { const dotClass = getMemberDotClass(member, isTeamAlive); const presenceLabel = getPresenceLabel(member, isTeamAlive); const colors = getTeamColorSet(memberColor); const pending = taskCounts?.pending ?? 0; const inProgress = taskCounts?.inProgress ?? 0; const completed = taskCounts?.completed ?? 0; const totalTasks = pending + inProgress + completed; const completedRatio = totalTasks > 0 ? completed / totalTasks : 0; const progressPercent = Math.round(completedRatio * 100); return (
{ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onClick?.(); } }} >
{member.name}
{member.name} {(() => { const roleLabel = formatAgentRole(member.role) ?? formatAgentRole(member.agentType); return roleLabel ? ( {roleLabel} ) : null; })()} {presenceLabel} {member.taskCount} {member.taskCount === 1 ? 'task' : 'tasks'}
); };