"use client"; import { useEffect, useState, useCallback } from "react"; import { useRouter } from "next/navigation"; import { getTickets, type Ticket } from "@/lib/api"; import { useAuth } from "@/lib/auth"; 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 { user } = useAuth(); const [tickets, setTickets] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const [view, setView] = useState<"all" | "mine" | "assigned" | "unassigned">("all"); const [statusFilter, setStatusFilter] = useState(""); const [priorityFilter, setPriorityFilter] = useState(""); const [search, setSearch] = useState(""); const pageSize = 10; const numericId = parseInt(user?.idUsuario ?? "", 10); const hasNumericId = !isNaN(numericId); const fetchTickets = useCallback(async () => { setLoading(true); try { const data = await getTickets({ status: statusFilter || undefined, priority: priorityFilter || undefined, requesterId: view === "mine" && hasNumericId ? numericId : undefined, assigneeId: view === "assigned" && hasNumericId ? numericId : view === "unassigned" ? 0 : undefined, search: search || undefined, page, pageSize, }); setTickets(data.items || []); setTotal(data.total || 0); } catch { setTickets([]); setTotal(0); } finally { setLoading(false); } }, [statusFilter, priorityFilter, search, page, view, numericId, hasNumericId]); useEffect(() => { fetchTickets(); }, [fetchTickets]); const totalPages = Math.ceil(total / pageSize); return (

Tickets

Nuevo Ticket
{/* Filters */}
{( [ ["all", "Todos"], ["mine", "Míos"], ["assigned", "Asignados a mí"], ["unassigned", "Sin asignar"], ] as const ).map(([v, label]) => ( ))}
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
); }