import { KanbanProvider, KanbanBoard, KanbanHeader, KanbanCards, type DragEndEvent } from '@/components/ui/shadcn-io/kanban' import { TaskCard } from './TaskCard' import type { TaskStatus, TaskWithAttemptStatus } from 'shared/types' type Task = TaskWithAttemptStatus interface TaskKanbanBoardProps { tasks: Task[] onDragEnd: (event: DragEndEvent) => void onEditTask: (task: Task) => void onDeleteTask: (taskId: string) => void onViewTaskDetails: (task: Task) => void } const allTaskStatuses: TaskStatus[] = ['todo', 'inprogress', 'inreview', 'done', 'cancelled'] const statusLabels: Record = { todo: 'To Do', inprogress: 'In Progress', inreview: 'In Review', done: 'Done', cancelled: 'Cancelled' } const statusBoardColors: Record = { todo: '#64748b', inprogress: '#3b82f6', inreview: '#f59e0b', done: '#22c55e', cancelled: '#ef4444' } export function TaskKanbanBoard({ tasks, onDragEnd, onEditTask, onDeleteTask, onViewTaskDetails }: TaskKanbanBoardProps) { const groupTasksByStatus = () => { const groups: Record = {} as Record // Initialize groups for all possible statuses allTaskStatuses.forEach(status => { groups[status] = [] }) tasks.forEach(task => { // Convert old capitalized status to lowercase if needed const normalizedStatus = task.status.toLowerCase() as TaskStatus if (groups[normalizedStatus]) { groups[normalizedStatus].push(task) } else { // Default to todo if status doesn't match any expected value groups['todo'].push(task) } }) return groups } return ( {Object.entries(groupTasksByStatus()).map(([status, statusTasks]) => ( {statusTasks.map((task, index) => ( ))} ))} ) }