import React from 'react'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; import { GripVertical, X, AlertCircle, Clock, ChevronRight } from 'lucide-react'; import { Ticket } from '../../types'; import { formatDistanceToNow } from 'date-fns'; interface OpenTicketsWidgetProps { tickets: Ticket[]; isEditing?: boolean; onRemove?: () => void; } const OpenTicketsWidget: React.FC = ({ tickets, isEditing, onRemove, }) => { const { t } = useTranslation(); const openTickets = tickets.filter(ticket => ticket.status === 'open' || ticket.status === 'in_progress'); const urgentCount = openTickets.filter(t => t.priority === 'urgent' || t.isOverdue).length; const getPriorityColor = (priority: string, isOverdue?: boolean) => { if (isOverdue) return 'text-red-600 dark:text-red-400'; switch (priority) { case 'urgent': return 'text-red-600 dark:text-red-400'; case 'high': return 'text-orange-600 dark:text-orange-400'; case 'medium': return 'text-yellow-600 dark:text-yellow-400'; default: return 'text-gray-600 dark:text-gray-400'; } }; const getPriorityBg = (priority: string, isOverdue?: boolean) => { if (isOverdue) return 'bg-red-50 dark:bg-red-900/20'; switch (priority) { case 'urgent': return 'bg-red-50 dark:bg-red-900/20'; case 'high': return 'bg-orange-50 dark:bg-orange-900/20'; case 'medium': return 'bg-yellow-50 dark:bg-yellow-900/20'; default: return 'bg-gray-50 dark:bg-gray-700/50'; } }; return (
{isEditing && ( <>
)}

Open Tickets

{urgentCount > 0 && ( {urgentCount} urgent )} {openTickets.length} open
{openTickets.length === 0 ? (

{t('dashboard.noOpenTickets')}

) : ( openTickets.slice(0, 5).map((ticket) => (

{ticket.subject}

{ticket.isOverdue ? 'Overdue' : ticket.priority} {formatDistanceToNow(new Date(ticket.createdAt), { addSuffix: true })}
)) )}
{openTickets.length > 5 && ( View all {openTickets.length} tickets )}
); }; export default OpenTicketsWidget;