"use client" import { useState } from "react" import { toast } from "sonner" import { useSortable } from "@dnd-kit/sortable" import { CSS } from "@dnd-kit/utilities" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { TodoForm } from "@/components/todo-form" import { Icons } from "@/components/icons" import { cn } from "@/lib/utils" import type { Todo, Tag } from "@/services/api-types" interface TodoRowProps { todo: Todo tags: Tag[] onUpdate: (todo: Partial) => void onDelete: () => void isDraggable?: boolean } export function TodoRow({ todo, tags, onUpdate, onDelete, isDraggable = false }: TodoRowProps) { const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) const [isViewDialogOpen, setIsViewDialogOpen] = useState(false) const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: todo.id, disabled: !isDraggable, }) const style = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.5 : 1, } const todoTags = tags.filter((tag) => todo.tagIds.includes(tag.id)) const handleStatusToggle = () => { const newStatus = todo.status === "completed" ? "pending" : "completed" onUpdate({ status: newStatus }) } const formatDate = (dateString?: string | null) => { if (!dateString) return null const date = new Date(dateString) return date.toLocaleDateString() } // Check if todo has image or attachments const hasAttachments = todo.attachments && todo.attachments.length > 0 return ( <>
handleStatusToggle()} className="h-5 w-5 rounded-full" />
{todo.title} {todo.image && } {hasAttachments && }
{todo.description &&

{todo.description}

}
{todoTags.length > 0 && (
{todoTags.slice(0, 2).map((tag) => (
))} {todoTags.length > 2 && +{todoTags.length - 2}}
)} {todo.deadline && ( {formatDate(todo.deadline)} )}
Edit Todo Update your todo details { onUpdate(updatedTodo) setIsEditDialogOpen(false) toast.success("Todo updated successfully") }} /> {todo.title} Created on {new Date(todo.createdAt).toLocaleDateString()} {todo.image && (
{todo.title}
)}

Status

{todo.status.replace("-", " ")}
{todo.deadline && (

Deadline

{formatDate(todo.deadline)}

)} {todo.description && (

Description

{todo.description}

)} {todoTags.length > 0 && (

Tags

{todoTags.map((tag) => ( {tag.name} ))}
)} {hasAttachments && (

Attachments

    {todo.attachments.map((attachment, index) => (
  • {attachment}
  • ))}
)} {todo.subtasks && todo.subtasks.length > 0 && (

Subtasks

    {todo.subtasks.map((subtask) => (
  • {subtask.description}
  • ))}
)}
) }