feat(tickets): filtro Todos/Activos/Archivados + botón archivar

This commit is contained in:
Nurfog committed 2026-10-22 11:19:25 -03:00
1 parent f536f11dfd
commit 24dcb6d770
4 files changed
+103 -4

No files matched your search

@@ -9,6 +9,7 @@ import {
getTicketEmails,
addComment,
updateTicketStatus,
setTicketArchived,
assignTicket,
getGroups,
getTeam,
@@ -286,6 +287,24 @@ export default function TicketDetailPage() {
}
};
const handleArchiveToggle = async () => {
if (!ticket) return;
const toArchived = !ticket.archived;
if (toArchived && !window.confirm("¿Archivar este ticket? Saldrá de la vista de activos, conservando su estado.")) {
return;
}
setError("");
setActing(true);
try {
await setTicketArchived(id, toArchived);
await refreshTicket();
} catch (err: unknown) {
setError(err instanceof Error ? err.message : "No se pudo cambiar el archivado");
} finally {
setActing(false);
}
};
const handleAssignAgent = async (idUsuario: string | null) => {
if (!ticket) return;
setAssignOpen(false);
@@ -338,6 +357,11 @@ export default function TicketDetailPage() {
<div className="d-flex gap-2 mt-2">
<BadgeStatus status={ticket.status} />
<BadgePriority priority={ticket.priority} />
{ticket.archived && (
<span className="badge bg-secondary" title="Ticket archivado">
<i className="bi bi-archive me-1"></i>Archivado
</span>
)}
</div>
</div>
{isTeam && (
@@ -437,6 +461,17 @@ export default function TicketDetailPage() {
</>
)}
</div>
{/* Archivar / Desarchivar (conserva el estado del ticket) */}
<button
className={`btn btn-sm ${ticket.archived ? "btn-outline-secondary" : "btn-outline-dark"}`}
disabled={acting}
title={ticket.archived ? "Volver a la vista de activos" : "Sacar de la vista de activos"}
onClick={handleArchiveToggle}
>
<i className={`bi ${ticket.archived ? "bi-box-arrow-up" : "bi-archive"} me-1`}></i>
{ticket.archived ? "Desarchivar" : "Archivar"}
</button>
</div>
)}
</div>