import { useMemo } from 'react'; import { Link } from 'react-router-dom'; import { formatDistanceToNow } from 'date-fns'; import Layout from '../components/Layout'; import SeverityBadge from '../components/SeverityBadge'; import StatusBadge from '../components/StatusBadge'; import { useTickets } from '../api/queries'; import { useAuth } from '../contexts/AuthContext'; import { SEVERITY_BG } from '../lib/severityColors'; export default function MyTickets() { const { user } = useAuth(); const openQ = useTickets(user ? { assigneeId: user.id, status: 'OPEN' } : {}); const inProgressQ = useTickets(user ? { assigneeId: user.id, status: 'IN_PROGRESS' } : {}); const loading = openQ.isLoading || inProgressQ.isLoading; const tickets = useMemo(() => { if (!user) return []; const combined = [...(openQ.data ?? []), ...(inProgressQ.data ?? [])]; combined.sort( (a, b) => a.severity - b.severity || new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(), ); return combined; }, [user, openQ.data, inProgressQ.data]); return ( {loading ? (
Loading...
) : tickets.length === 0 ? (
No active tickets assigned to you
) : (
{tickets.map((ticket) => (
{ticket.displayId} {ticket.category.name} › {ticket.type.name} › {ticket.item.name}

{ticket.title}

{ticket._count?.comments ?? 0} comments {formatDistanceToNow(new Date(ticket.createdAt), { addSuffix: true })}
))}
)} ); }