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