"use client"; import { useEffect, useState, useCallback } from "react"; import { useRouter } from "next/navigation"; import { getTickets, type Ticket } from "@/lib/api"; import BadgeStatus from "@/components/BadgeStatus"; import BadgePriority from "@/components/BadgePriority"; import PaginationComponent from "@/components/Pagination"; import Link from "next/link"; export default function TicketsPage() { const router = useRouter(); const [tickets, setTickets] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const [statusFilter, setStatusFilter] = useState(""); const [priorityFilter, setPriorityFilter] = useState(""); const [search, setSearch] = useState(""); const pageSize = 10; const fetchTickets = useCallback(async () => { setLoading(true); try { const data = await getTickets({ status: statusFilter || undefined, priority: priorityFilter || undefined, search: search || undefined, page, pageSize, }); setTickets(data.items || []); setTotal(data.total || 0); } catch { setTickets([]); setTotal(0); } finally { setLoading(false); } }, [statusFilter, priorityFilter, search, page]); useEffect(() => { fetchTickets(); }, [fetchTickets]); const totalPages = Math.ceil(total / pageSize); return (

Tickets

Nuevo Ticket
{/* Filters */}
Filtros:
{ setSearch(e.target.value); setPage(1); }} />
{/* Tickets Table */}
{loading ? ( ) : tickets.length === 0 ? ( ) : ( tickets.map((ticket) => ( router.push(`/tickets/${ticket.id}`)} style={{ cursor: "pointer" }} > )) )}
# Asunto Solicitante Estado Prioridad Asignado Actualizado
No se encontraron tickets

Prueba ajustando los filtros de búsqueda

{ticket.ticketNumber || `#${ticket.id}`}
{ticket.title}
{ticket.requesterName || "N/A"} {ticket.assigneeName || Sin asignar} {new Date(ticket.updatedAt).toLocaleDateString("es-CL")}
{/* Pagination */}
Mostrando {tickets.length} de {total} tickets
); }