import { UnreadCommentsBadge } from '@renderer/components/team/UnreadCommentsBadge'; import { Badge } from '@renderer/components/ui/badge'; import { Button } from '@renderer/components/ui/button'; import { useUnreadCommentCount } from '@renderer/hooks/useUnreadCommentCount'; import { ArrowLeftFromLine, ArrowRightFromLine, CheckCircle2, Play } from 'lucide-react'; import type { KanbanColumnId, KanbanTaskState, TeamTask } from '@shared/types'; interface KanbanTaskCardProps { task: TeamTask; teamName: string; columnId: KanbanColumnId; kanbanTaskState?: KanbanTaskState; hasReviewers: boolean; taskMap: Map; onRequestReview: (taskId: string) => void; onApprove: (taskId: string) => void; onRequestChanges: (taskId: string) => void; onMoveBackToDone: (taskId: string) => void; onStartTask: (taskId: string) => void; onCompleteTask: (taskId: string) => void; onScrollToTask?: (taskId: string) => void; onTaskClick?: (task: TeamTask) => void; } interface DependencyBadgeProps { taskId: string; taskMap: Map; onScrollToTask?: (taskId: string) => void; } const DependencyBadge = ({ taskId, taskMap, onScrollToTask, }: DependencyBadgeProps): React.JSX.Element => { const depTask = taskMap.get(taskId); const isCompleted = depTask?.status === 'completed'; return ( ); }; export const KanbanTaskCard = ({ task, teamName, columnId, kanbanTaskState, hasReviewers, taskMap, onRequestReview, onApprove, onRequestChanges, onMoveBackToDone, onStartTask, onCompleteTask, onScrollToTask, onTaskClick, }: KanbanTaskCardProps): React.JSX.Element => { const unreadCount = useUnreadCommentCount(teamName, task.id, task.comments); const blockedByIds = task.blockedBy?.filter((id) => id.length > 0) ?? []; const blocksIds = task.blocks?.filter((id) => id.length > 0) ?? []; const hasBlockedBy = blockedByIds.length > 0; const hasBlocks = blocksIds.length > 0; return (
onTaskClick?.(task)} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onTaskClick?.(task); } }} >
#{task.id}
{task.subject}

Owner: {task.owner ?? '\u2014'}

{hasBlockedBy ? (
Blocked by {blockedByIds.map((id) => ( ))}
) : null} {hasBlocks ? (
Blocks {blocksIds.map((id) => ( ))}
) : null} {columnId === 'todo' ? (
) : null} {columnId === 'in_progress' ? ( ) : null} {columnId === 'done' ? ( ) : null} {columnId === 'review' ? (
{!hasReviewers ? (

Manual review

) : null}
) : null} {columnId === 'approved' ? ( ) : null}
); };