import React, { useState } from 'react'; import { useDroppable } from '@dnd-kit/core'; import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; import { Button, Typography } from '@/shared/antd-imports'; import { PlusOutlined, MenuOutlined } from '@/shared/antd-imports'; import { ITaskListGroup } from '@/types/tasks/taskList.types'; import { IGroupBy } from '@/features/tasks/tasks.slice'; import KanbanTaskCard from './kanbanTaskCard'; const { Text } = Typography; interface TaskGroupProps { group: ITaskListGroup; projectId: string; currentGrouping: IGroupBy; selectedTaskIds: string[]; onAddTask?: (groupId: string) => void; onToggleCollapse?: (groupId: string) => void; onSelectTask?: (taskId: string, selected: boolean) => void; onToggleSubtasks?: (taskId: string) => void; dragHandleProps?: any; activeTaskId?: string | null; } const KanbanGroup: React.FC = ({ group, projectId, currentGrouping, selectedTaskIds, onAddTask, onToggleCollapse, onSelectTask, onToggleSubtasks, dragHandleProps, activeTaskId, }) => { const [isCollapsed, setIsCollapsed] = useState(false); const { setNodeRef, isOver } = useDroppable({ id: group.id, data: { type: 'group', groupId: group.id, }, }); // Get task IDs for sortable context const taskIds = group.tasks.map(task => task.id!); // Get group color based on grouping type const getGroupColor = () => { if (group.color_code) return group.color_code; switch (currentGrouping) { case 'status': return group.id === 'todo' ? '#faad14' : group.id === 'doing' ? '#1890ff' : '#52c41a'; case 'priority': return group.id === 'critical' ? '#ff4d4f' : group.id === 'high' ? '#fa8c16' : group.id === 'medium' ? '#faad14' : '#52c41a'; case 'phase': return '#722ed1'; default: return '#d9d9d9'; } }; const handleAddTask = () => { onAddTask?.(group.id); }; return (
{/* Group Header */}
{/* Drag handle for column */}
{/* Tasks as Cards */}
{group.tasks.length === 0 ? (
No tasks in this group
) : ( group.tasks.map((task, index) => task.id === activeTaskId ? (
) : ( ) ) )}
{/* Add Task Button */}
); }; export default KanbanGroup;