import React, { useState } from 'react'; import { motion } from 'framer-motion'; import { Calendar, User, MessageSquare, Paperclip, MoreVertical, CheckCircle, Clock, AlertCircle } from 'lucide-react'; import { tasksAPI } from '../services/api'; import toast from 'react-hot-toast'; const TaskCard = ({ task, onUpdate, onEdit, onDelete }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isUpdating, setIsUpdating] = useState(false); const getStatusIcon = (status) => { switch (status) { case 'completed': return ; case 'in-progress': return ; case 'pending': return ; default: return null; } }; const getPriorityColor = (priority) => { switch (priority) { case 'high': return 'bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400'; case 'medium': return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400'; case 'low': return 'bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400'; default: return 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400'; } }; const handleStatusChange = async (newStatus) => { setIsUpdating(true); try { await tasksAPI.updateStatus(task._id, newStatus); onUpdate && onUpdate(task._id, { status: newStatus }); toast.success('Task status updated'); } catch (error) { toast.error('Failed to update status'); } finally { setIsUpdating(false); } }; const formatDate = (date) => { return new Date(date).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); }; return ( {getStatusIcon(task.status)} {task.title} {task.priority} setIsMenuOpen(!isMenuOpen)} className="p-1 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors" > {isMenuOpen && ( { onEdit && onEdit(task); setIsMenuOpen(false); }} className="flex items-center gap-2 w-full px-3 py-2 text-sm text-left hover:bg-gray-50 dark:hover:bg-gray-700" > Edit { handleStatusChange(e.target.value); setIsMenuOpen(false); }} className="w-full px-3 py-2 text-sm bg-transparent border-0 focus:ring-0 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700" disabled={isUpdating} > Pending In Progress Completed { onDelete && onDelete(task._id); setIsMenuOpen(false); }} className="flex items-center gap-2 w-full px-3 py-2 text-sm text-left text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20" > Delete )} {task.description} {task.assignee && ( {task.assignee.name} )} {task.deadline && ( {formatDate(task.deadline)} )} {task.comments && task.comments.length > 0 && ( {task.comments.length} )} {task.attachments && task.attachments.length > 0 && ( {task.attachments.length} )} ); }; export default TaskCard;
{task.description}