feat: vistas y botones de tickets solo para equipo
This commit is contained in:
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 && (
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user