feat: vistas y botones de tickets solo para equipo

This commit is contained in:
Nurfog committed 2026-09-14 15:35:30 -03:00
1 parent 85fcabd5a5
commit 2594c6a315
2 files changed
+14 -2

No files matched your search

@@ -2,6 +2,7 @@
import { useEffect, useState } from "react";
import { useParams } from "next/navigation";
import { useAuth } from "@/lib/auth";
import {
getTicket,
getComments,
@@ -30,6 +31,8 @@ const STATUS_OPTIONS = [
export default function TicketDetailPage() {
const params = useParams();
const id = Number(params.id);
const { user } = useAuth();
const isTeam = user?.role === "admin" || user?.role === "agent";
const [ticket, setTicket] = useState<Ticket | null>(null);
const [comments, setComments] = useState<Comment[]>([]);
@@ -165,6 +168,7 @@ export default function TicketDetailPage() {
<BadgePriority priority={ticket.priority} />
</div>
</div>
{isTeam && (
<div className="d-flex gap-2">
{/* Status Change (dropdown controlado por React: sin bootstrap.js) */}
<div className="position-relative">
@@ -262,6 +266,7 @@ export default function TicketDetailPage() {
)}
</div>
</div>
)}
</div>
{error && (
+9 -2
View File
@@ -24,6 +24,7 @@ export default function TicketsPage() {
const numericId = parseInt(user?.idUsuario ?? "", 10);
const hasNumericId = !isNaN(numericId);
const isTeam = user?.role === "admin" || user?.role === "agent";
const fetchTickets = useCallback(async () => {
setLoading(true);
@@ -31,7 +32,7 @@ export default function TicketsPage() {
const data = await getTickets({
status: statusFilter || undefined,
priority: priorityFilter || undefined,
requesterId: view === "mine" && hasNumericId ? numericId : undefined,
requesterId: view === "mine" || !isTeam ? (hasNumericId ? numericId : undefined) : undefined,
assigneeId:
view === "assigned" && hasNumericId
? numericId
@@ -50,7 +51,7 @@ export default function TicketsPage() {
} finally {
setLoading(false);
}
}, [statusFilter, priorityFilter, search, page, view, numericId, hasNumericId]);
}, [statusFilter, priorityFilter, search, page, view, numericId, hasNumericId, isTeam]);
useEffect(() => {
fetchTickets();
@@ -69,6 +70,7 @@ export default function TicketsPage() {
</div>
{/* Filters */}
{isTeam ? (
<div className="filter-bar mb-3">
<div className="btn-group" role="group" aria-label="Vista">
{(
@@ -93,6 +95,11 @@ export default function TicketsPage() {
))}
</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="d-flex align-items-center gap-2">
<i className="bi bi-funnel text-muted"></i>