"use client" import { useEffect, useState } from "react" import type { Id } from "@/convex/_generated/dataModel" import type { TicketStatus } from "@/lib/schemas/ticket" import { useAuth } from "@/lib/auth-client" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" import { CheckCircle2 } from "lucide-react" import { CloseTicketDialog } from "@/components/tickets/close-ticket-dialog" import { cn } from "@/lib/utils" type StatusKey = TicketStatus | "NEW" | "OPEN" | "ON_HOLD"; const statusStyles: Record = { PENDING: { label: "Pendente", badgeClass: "bg-slate-100 text-slate-700" }, AWAITING_ATTENDANCE: { label: "Em andamento", badgeClass: "bg-[#dff1fb] text-[#0a4760]" }, PAUSED: { label: "Pausado", badgeClass: "bg-[#fff3c4] text-[#7a5901]" }, RESOLVED: { label: "Resolvido", badgeClass: "bg-[#dcf4eb] text-[#1f6a45]" }, NEW: { label: "Pendente", badgeClass: "bg-slate-100 text-slate-700" }, OPEN: { label: "Em andamento", badgeClass: "bg-[#dff1fb] text-[#0a4760]" }, ON_HOLD: { label: "Pausado", badgeClass: "bg-[#fff3c4] text-[#7a5901]" }, }; const baseBadgeClass = "inline-flex h-9 items-center gap-2 rounded-full border border-slate-200 px-3 text-sm font-semibold transition hover:border-slate-300" export function StatusSelect({ ticketId, value, tenantId, requesterName, ticketReference, showCloseButton = true, onStatusChange, }: { ticketId: string value: TicketStatus tenantId: string requesterName?: string | null ticketReference?: number | null showCloseButton?: boolean onStatusChange?: (next: TicketStatus) => void }) { const { convexUserId, session, machineContext } = useAuth() const actorId = (convexUserId ?? null) as Id<"users"> | null const sessionName = session?.user?.name?.trim() const machineAssignedName = machineContext?.assignedUserName?.trim() const agentName = sessionName && sessionName.length > 0 ? sessionName : machineAssignedName && machineAssignedName.length > 0 ? machineAssignedName : null const [status, setStatus] = useState(value) const [closeDialogOpen, setCloseDialogOpen] = useState(false) useEffect(() => { setStatus(value) }, [value]) return ( <>
{statusStyles[status]?.label ?? statusStyles.PENDING.label} {showCloseButton ? ( Encerrar ticket ) : null}
{/* Dialog control visível apenas quando o botão de encerrar está presente */} {showCloseButton ? ( { if (!open) setCloseDialogOpen(false) }} ticketId={ticketId} tenantId={tenantId} actorId={actorId} ticketReference={ticketReference ?? null} requesterName={requesterName} agentName={agentName} onSuccess={() => { setStatus("RESOLVED") setCloseDialogOpen(false) onStatusChange?.("RESOLVED") }} /> ) : null} ) }