import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Clock, ChevronRight, Inbox, Loader2, AlertCircle } from 'lucide-react'; import useAuthStore from '../../store/authStore'; import { supabase } from '../../lib/supabaseClient'; import { formatTimelineDate } from '../../utils/dateUtils'; const RecentTickets = () => { const navigate = useNavigate(); const { user } = useAuthStore(); const [tickets, setTickets] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchRecentTickets = async () => { if (!user?.id) { setLoading(false); return; } setLoading(true); setError(null); try { const { data, error: sbError } = await supabase .from('tickets') .select('*') .eq('user_id', user.id) .order('created_at', { ascending: false }) .limit(5); if (sbError) throw sbError; setTickets(data || []); } catch (err) { console.error("Error fetching recent tickets:", err); setError(err.message); } finally { setLoading(false); } }; useEffect(() => { fetchRecentTickets(); }, []); const getStatusBadge = (status) => { const s = String(status || '').toLowerCase(); const baseStyle = { borderRadius: '100px', padding: '3px 10px', fontSize: '11px', fontWeight: 600, display: 'inline-block' }; switch (s) { case 'resolved': case 'resolved by human support': return Resolved; case 'pending': case 'pending human support': case 'pending_human': return Pending; case 'in progress': return In Progress; case 'open': return Open; default: return {status || 'Open'}; } }; return (
{/* Header */}
Recent Tickets
{/* Content */}
{loading ? (
{[...Array(4)].map((_, i) => (
))}
) : error ? (

Sync Failed

{error}

) : tickets.length === 0 ? (

No tickets yet.

Report an issue and our AI will start helping immediately.

) : (
{tickets.map((ticket) => ( navigate(`/ticket/${ticket.id}`)} style={{ borderBottom: '1px solid #f9fafb', cursor: 'pointer', transition: 'background 0.2s' }} onMouseEnter={(e) => e.currentTarget.style.background = '#f0fdf4'} onMouseLeave={(e) => e.currentTarget.style.background = 'transparent'} > ))}
ID Subject Status Submitted
#{ticket.id}

{ticket.summary || ticket.subject || ticket.description || "No description provided"}

{getStatusBadge(ticket.status)} {formatTimelineDate(ticket.created_at)}
)}
); }; export default RecentTickets;