import { memo } from 'react'; import { KANBAN_COLUMN_DISPLAY, REVIEW_STATE_DISPLAY, TASK_STATUS_LABELS, } from '@renderer/utils/memberHelpers'; import { deriveTaskDisplayId, formatTaskDisplayLabel } from '@shared/utils/taskIdentity'; import { getTeamTaskWorkflowColumn, isTeamTaskNeedsFixActionable, } from '@shared/utils/teamTaskState'; import type { TeamTaskWithKanban } from '@shared/types'; interface TaskRowProps { task: TeamTaskWithKanban; } export const TaskRow = memo(function TaskRow({ task }: TaskRowProps): React.JSX.Element { const blockedByIds = task.blockedBy?.filter((id) => id.length > 0) ?? []; const blocksIds = task.blocks?.filter((id) => id.length > 0) ?? []; const kanbanColumn = getTeamTaskWorkflowColumn(task); return ( {formatTaskDisplayLabel(task)} {task.subject} {task.owner ?? 'Unassigned'}
{kanbanColumn && kanbanColumn in KANBAN_COLUMN_DISPLAY ? KANBAN_COLUMN_DISPLAY[kanbanColumn].label : (TASK_STATUS_LABELS[task.status] ?? task.status)} {isTeamTaskNeedsFixActionable(task) ? ( {REVIEW_STATE_DISPLAY.needsFix.label} ) : null}
{blockedByIds.length > 0 ? ( {blockedByIds.map((id) => `#${deriveTaskDisplayId(id)}`).join(', ')} ) : ( {'\u2014'} )} {blocksIds.length > 0 ? ( {blocksIds.map((id) => `#${deriveTaskDisplayId(id)}`).join(', ')} ) : ( {'\u2014'} )} ); });