import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { getProject, listProcessedTickets } from "../../lib/api"; import type { ProcessedTicket, Project } from "../../lib/types"; function statusBadgeClass(status: string): string { switch (status) { case "Pending": return "bg-yellow-100 text-yellow-700"; case "Analyzing": return "bg-blue-100 text-blue-700"; case "Developing": return "bg-purple-100 text-purple-700"; case "Done": return "bg-green-100 text-green-700"; case "Error": return "bg-red-100 text-red-700"; case "Cancelled": return "bg-gray-100 text-gray-500"; default: return "bg-gray-100 text-gray-700"; } } export default function TicketList() { const { projectId } = useParams(); const [project, setProject] = useState(null); const [tickets, setTickets] = useState([]); const [filter, setFilter] = useState("all"); useEffect(() => { if (!projectId) return; Promise.all([getProject(projectId), listProcessedTickets(projectId)]).then( ([proj, tkts]) => { setProject(proj); setTickets(tkts); } ); }, [projectId]); const filtered = filter === "all" ? tickets : tickets.filter((t) => t.status === filter); return (
{project?.name}

Processed Tickets

{["all", "Pending", "Analyzing", "Developing", "Done", "Error"].map((s) => ( ))}
{filtered.length === 0 ? (
No tickets found.
) : (
{filtered.map((ticket) => (
#{ticket.artifact_id} {ticket.artifact_title}
{new Date(ticket.detected_at).toLocaleString()} {ticket.processed_at && ( Processed: {new Date(ticket.processed_at).toLocaleString()} )}
{ticket.status}
))}
)}
); }