"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 { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" import { Ticket, ticketsApi } from "@/lib/api" import { toast } from "sonner" import Link from "next/link" import { Plus, MessageSquare } from "lucide-react" import { format } from "date-fns" export default function TicketsPage() { const [tickets, setTickets] = useState([]) const [loading, setLoading] = useState(true) const [isCreateOpen, setIsCreateOpen] = useState(false) const [newTicket, setNewTicket] = useState({ subject: "", category: "support", priority: "medium", message: "" }) const fetchTickets = async () => { try { const data = await ticketsApi.list() setTickets(data) setLoading(false) } catch (error) { console.error("Failed to fetch tickets", error) toast.error("Failed to fetch tickets") setLoading(false) } } useEffect(() => { fetchTickets() }, []) const handleCreateTicket = async () => { if (!newTicket.subject || !newTicket.message) return try { await ticketsApi.create(newTicket) toast.success("Ticket created successfully") setIsCreateOpen(false) setNewTicket({ subject: "", category: "support", priority: "medium", message: "" }) fetchTickets() // Refresh } catch (error) { console.error("Failed to create ticket", error) toast.error("Failed to create 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

Manage your support requests and inquiries.

Create New Ticket Describe your issue and priority.
setNewTicket({ ...newTicket, subject: e.target.value })} />