"use client" /** * My Tickets Page - View user's submitted tickets */ import { useEffect, useState } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { useAuth } from "@/contexts/auth-context" import { getApiUrl } from "@/lib/api-config" import Link from "next/link" import { ArrowLeft, Clock, CheckCircle, AlertCircle, Loader2 } from "lucide-react" interface Ticket { id: number ticket_number: string type: string status: string priority: string title: string created_at: string updated_at: string } const STATUS_STYLES: Record = { open: { label: "Open", variant: "default" }, in_progress: { label: "In Progress", variant: "secondary" }, resolved: { label: "Resolved", variant: "outline" }, closed: { label: "Closed", variant: "outline" }, } const PRIORITY_COLORS: Record = { low: "bg-gray-500", medium: "bg-yellow-500", high: "bg-orange-500", critical: "bg-red-500", } export default function MyTicketsPage() { const { user } = useAuth() const [tickets, setTickets] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { if (user) { fetchTickets() } }, [user]) const fetchTickets = async () => { try { const token = localStorage.getItem("token") const res = await fetch(`${getApiUrl()}/tickets/my-tickets`, { headers: { Authorization: `Bearer ${token}` }, }) if (res.ok) { const data = await res.json() setTickets(data) } } catch (e) { console.error("Failed to fetch tickets", e) } finally { setLoading(false) } } if (!user) { return (

Please Log In

You need to be logged in to view your tickets.

) } return (

My Tickets

Track your submitted issues

{loading ? (
) : tickets.length === 0 ? (

You haven't submitted any tickets yet.

) : (
{tickets.map((ticket) => (
{ticket.ticket_number} {STATUS_STYLES[ticket.status]?.label || ticket.status}

{ticket.title}

{new Date(ticket.created_at).toLocaleDateString()}

{ticket.status === "open" && } {ticket.status === "resolved" && } {ticket.status === "in_progress" && }
))}
)}
) }