Ajusta placeholders, formulários e widgets

This commit is contained in:
Esdras Renan 2025-11-06 23:13:41 -03:00
parent 343f0c8c64
commit b94cea2f9a
33 changed files with 2122 additions and 462 deletions

View file

@ -5,9 +5,9 @@ import { ptBR } from "date-fns/locale"
import type { TicketWithDetails } from "@/lib/schemas/ticket"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { getTicketStatusLabel, getTicketStatusSummaryTone } from "@/lib/ticket-status-style"
import { TicketCustomFieldsSection } from "@/components/tickets/ticket-custom-fields"
import { Badge } from "@/components/ui/badge"
import { cn } from "@/lib/utils"
import { TicketCustomFieldsSection } from "@/components/tickets/ticket-custom-fields"
interface TicketDetailsPanelProps {
ticket: TicketWithDetails
@ -53,19 +53,19 @@ export function TicketDetailsPanel({ ticket }: TicketDetailsPanelProps) {
const isAvulso = Boolean(ticket.company?.isAvulso)
const companyLabel = ticket.company?.name ?? (isAvulso ? "Cliente avulso" : "Sem empresa vinculada")
const summaryChips = useMemo(
() => [
const summaryChips = useMemo(() => {
const chips: Array<{ key: string; label: string; value: string; tone: SummaryTone }> = [
{
key: "queue",
label: "Fila",
value: ticket.queue ?? "Sem fila",
tone: ticket.queue ? ("default" as SummaryTone) : ("muted" as SummaryTone),
tone: ticket.queue ? "default" : "muted",
},
{
key: "company",
label: "Empresa",
value: companyLabel,
tone: isAvulso ? ("warning" as SummaryTone) : ("default" as SummaryTone),
tone: isAvulso ? "warning" : "default",
},
{
key: "status",
@ -83,11 +83,19 @@ export function TicketDetailsPanel({ ticket }: TicketDetailsPanelProps) {
key: "assignee",
label: "Responsável",
value: ticket.assignee?.name ?? "Não atribuído",
tone: ticket.assignee ? ("default" as SummaryTone) : ("muted" as SummaryTone),
tone: ticket.assignee ? "default" : "muted",
},
],
[companyLabel, isAvulso, ticket.assignee, ticket.priority, ticket.queue, ticket.status]
)
]
if (ticket.formTemplateLabel) {
chips.push({
key: "formTemplate",
label: "Tipo de solicitação",
value: ticket.formTemplateLabel,
tone: "info",
})
}
return chips
}, [companyLabel, isAvulso, ticket.assignee, ticket.formTemplateLabel, ticket.priority, ticket.queue, ticket.status])
const agentTotals = useMemo(() => {
const totals = ticket.workSummary?.perAgentTotals ?? []
@ -129,8 +137,6 @@ export function TicketDetailsPanel({ ticket }: TicketDetailsPanelProps) {
</div>
</section>
<TicketCustomFieldsSection ticket={ticket} hidePreview />
<section className="space-y-3">
<div className="flex flex-wrap items-center justify-between gap-2">
<h3 className="text-sm font-semibold text-neutral-900">SLA & métricas</h3>
@ -184,6 +190,8 @@ export function TicketDetailsPanel({ ticket }: TicketDetailsPanelProps) {
</div>
</section>
<TicketCustomFieldsSection ticket={ticket} />
<section className="space-y-3">
<h3 className="text-sm font-semibold text-neutral-900">Tempo por agente</h3>
{agentTotals.length > 0 ? (