"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Ticket, ticketsApi } from "@/lib/api" import { toast } from "sonner" import Link from "next/link" import { MessageSquare, Trash2, Eye } from "lucide-react" import { format } from "date-fns" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" export default function AdminTicketsPage() { const [tickets, setTickets] = useState([]) const [loading, setLoading] = useState(true) const [deleteId, setDeleteId] = useState(null) const fetchTickets = async () => { try { setLoading(true) const data = await ticketsApi.listAll() setTickets(data) } catch (error) { console.error("Failed to fetch tickets", error) toast.error("Failed to fetch tickets") } finally { setLoading(false) } } useEffect(() => { fetchTickets() }, []) const handleDelete = async () => { if (!deleteId) return try { await ticketsApi.delete(deleteId) toast.success("Ticket deleted") setDeleteId(null) fetchTickets() } catch (error) { console.error("Failed to delete ticket", error) toast.error("Failed to delete ticket") } } const getStatusBadge = (status: string) => { switch (status) { case "open": return Open case "in_progress": return In Progress case "closed": return Closed default: return {status} } } const getPriorityBadge = (priority: string) => { switch (priority) { case "high": return High case "medium": return Medium case "low": return Low default: return {priority} } } return (

Support Tickets (Admin)

Manage all user support tickets.

All Tickets A list of all support tickets from users. ID Subject User ID Status Priority Created Actions {loading ? ( Loading... ) : tickets.length === 0 ? ( No tickets found ) : ( tickets.map((ticket) => ( {ticket.id.substring(0, 8)}... {ticket.subject} {ticket.userId} {getStatusBadge(ticket.status)} {getPriorityBadge(ticket.priority)} {format(new Date(ticket.createdAt), "MMM d, yyyy")}
)) )}
!open && setDeleteId(null)}> Delete Ticket Are you sure you want to delete this ticket? This action cannot be undone.
) }