'use client'; import { useState } from 'react'; import { Task, WorkItemStatus } from '@/types/project'; import { useChangeTaskStatus, useUpdateTask, useDeleteTask } from '@/lib/hooks/use-tasks'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Checkbox } from '@/components/ui/checkbox'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { MoreHorizontal, Pencil, Trash2, Clock, User, CheckCircle2, Circle } from 'lucide-react'; import { cn } from '@/lib/utils'; interface TaskCardProps { task: Task; storyId: string; } const priorityColors = { Critical: 'bg-red-500 text-white', High: 'bg-orange-500 text-white', Medium: 'bg-yellow-500 text-white', Low: 'bg-blue-500 text-white', }; const statusColors = { Todo: 'text-gray-500', InProgress: 'text-blue-500', Done: 'text-green-500', Blocked: 'text-red-500', }; export function TaskCard({ task, storyId }: TaskCardProps) { const [isExpanded, setIsExpanded] = useState(false); const changeStatus = useChangeTaskStatus(); const updateTask = useUpdateTask(); const deleteTask = useDeleteTask(); const isDone = task.status === 'Done'; const handleCheckboxChange = (checked: boolean) => { const newStatus: WorkItemStatus = checked ? 'Done' : 'Todo'; changeStatus.mutate({ id: task.id, status: newStatus }); }; const handleDelete = () => { if (confirm('Are you sure you want to delete this task?')) { deleteTask.mutate(task.id); } }; return ( setIsExpanded(!isExpanded)} >
{/* Checkbox */}
e.stopPropagation()}>
{/* Task Content */}

{task.title}

{task.priority}
{/* Metadata */}
{task.estimatedHours && (
{task.estimatedHours}h
)} {task.assigneeId && (
Assigned
)}
{isDone ? ( ) : ( )} {task.status}
{/* Description (expanded) */} {isExpanded && task.description && (
{task.description}
)}
{/* Actions Menu */}
e.stopPropagation()}> {/* TODO: Open edit dialog */}}> Edit Delete
); }