"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"; import { TaskEditDialog } from "./task-edit-dialog"; 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 = { Backlog: "text-slate-500", 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 [isEditDialogOpen, setIsEditDialogOpen] = 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()}> setIsEditDialogOpen(true)}> Edit Delete
{/* Edit Dialog */}
); }