feat(tickets): sin botón archivar, Archivo visible a todos, dashboard coherente
This commit is contained in:
1 parent
eace5fbcd7
commit
dd1e1a231a
3 files changed
+10
-37
No files matched your search
@@ -83,7 +83,7 @@ export default function DashboardPage() {
|
|||||||
{/* Stats Cards: cada tarjeta filtra la lista de tickets según lo presionado */}
|
{/* Stats Cards: cada tarjeta filtra la lista de tickets según lo presionado */}
|
||||||
<div className="row g-3 mb-4">
|
<div className="row g-3 mb-4">
|
||||||
<div className="col-6 col-lg">
|
<div className="col-6 col-lg">
|
||||||
<StatsCard icon="bi-ticket-detailed" value={stats?.totalTickets || 0} label="Total Tickets" color="#00285d" href="/tickets" />
|
<StatsCard icon="bi-ticket-detailed" value={stats?.totalTickets || 0} label="Total Tickets" color="#00285d" href="/tickets?archived=all" />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-6 col-lg">
|
<div className="col-6 col-lg">
|
||||||
<StatsCard icon="bi-folder2-open" value={stats?.openTickets || 0} label="Abiertos" color="#198754" href="/tickets?status=Open" />
|
<StatsCard icon="bi-folder2-open" value={stats?.openTickets || 0} label="Abiertos" color="#198754" href="/tickets?status=Open" />
|
||||||
@@ -92,7 +92,7 @@ export default function DashboardPage() {
|
|||||||
<StatsCard icon="bi-clock-history" value={stats?.inProgressTickets || 0} label="En Progreso" color="#ffc107" href="/tickets?status=InProgress" />
|
<StatsCard icon="bi-clock-history" value={stats?.inProgressTickets || 0} label="En Progreso" color="#ffc107" href="/tickets?status=InProgress" />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-6 col-lg">
|
<div className="col-6 col-lg">
|
||||||
<StatsCard icon="bi-check-circle" value={stats?.resolvedTickets || 0} label="Resueltos" color="#0d6efd" href="/tickets?status=Resolved" />
|
<StatsCard icon="bi-check-circle" value={stats?.resolvedTickets || 0} label="Resueltos" color="#0d6efd" href="/tickets?status=Resolved&archived=all" />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-6 col-lg">
|
<div className="col-6 col-lg">
|
||||||
<StatsCard icon="bi-exclamation-triangle" value={stats?.criticalTickets || 0} label="Críticos" color="#dc3545" href="/tickets?priority=Critical" />
|
<StatsCard icon="bi-exclamation-triangle" value={stats?.criticalTickets || 0} label="Críticos" color="#dc3545" href="/tickets?priority=Critical" />
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import {
|
|||||||
getTicketEmails,
|
getTicketEmails,
|
||||||
addComment,
|
addComment,
|
||||||
updateTicketStatus,
|
updateTicketStatus,
|
||||||
setTicketArchived,
|
|
||||||
assignTicket,
|
assignTicket,
|
||||||
getGroups,
|
getGroups,
|
||||||
getTeam,
|
getTeam,
|
||||||
@@ -287,24 +286,6 @@ 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) => {
|
const handleAssignAgent = async (idUsuario: string | null) => {
|
||||||
if (!ticket) return;
|
if (!ticket) return;
|
||||||
setAssignOpen(false);
|
setAssignOpen(false);
|
||||||
@@ -461,17 +442,6 @@ export default function TicketDetailPage() {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</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>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -285,6 +285,14 @@ function TicketsContent() {
|
|||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="filter-bar mb-3">
|
||||||
|
<span className="badge bg-primary">Mis tickets</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{/* Archivo: visible para todos (solicitantes también ven sus cerrados) */}
|
||||||
|
<div className="filter-bar mb-3">
|
||||||
<span className="text-muted" style={{ fontSize: "0.8rem" }}>Archivo:</span>
|
<span className="text-muted" style={{ fontSize: "0.8rem" }}>Archivo:</span>
|
||||||
<div className="btn-group" role="group" aria-label="Archivo">
|
<div className="btn-group" role="group" aria-label="Archivo">
|
||||||
{(
|
{(
|
||||||
@@ -308,11 +316,6 @@ function TicketsContent() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
|
||||||
<div className="filter-bar mb-3">
|
|
||||||
<span className="badge bg-primary">Mis tickets</span>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<div className="filter-bar mb-4">
|
<div className="filter-bar mb-4">
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2">
|
||||||
<i className="bi bi-funnel text-muted"></i>
|
<i className="bi bi-funnel text-muted"></i>
|
||||||
|
|||||||
Reference in new issue
Block a user