From 0a36ed049f45491fd5fddd2362e1c32a895ddb10 Mon Sep 17 00:00:00 2001 From: rever-tecnologia Date: Wed, 17 Dec 2025 16:20:09 -0300 Subject: [PATCH] feat(tickets): adiciona menu dedicado para Visitas na sidebar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adiciona item "Visitas" no submenu de Tickets com icone MapPin - Cria pagina /tickets/visits que filtra apenas tickets da fila Visitas - Corrige teste de automacao para usar emailProps ao inves de html šŸ¤– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/app/tickets/visits/page.tsx | 7 +++++ .../visits/tickets-visits-page-client.tsx | 31 +++++++++++++++++++ src/components/app-sidebar.tsx | 2 ++ tests/automations-engine.test.ts | 13 +++++++- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/app/tickets/visits/page.tsx create mode 100644 src/app/tickets/visits/tickets-visits-page-client.tsx diff --git a/src/app/tickets/visits/page.tsx b/src/app/tickets/visits/page.tsx new file mode 100644 index 0000000..bcf61c9 --- /dev/null +++ b/src/app/tickets/visits/page.tsx @@ -0,0 +1,7 @@ +import { TicketsVisitsPageClient } from "./tickets-visits-page-client" +import { requireAuthenticatedSession } from "@/lib/auth-server" + +export default async function TicketsVisitsPage() { + await requireAuthenticatedSession() + return +} diff --git a/src/app/tickets/visits/tickets-visits-page-client.tsx b/src/app/tickets/visits/tickets-visits-page-client.tsx new file mode 100644 index 0000000..631a112 --- /dev/null +++ b/src/app/tickets/visits/tickets-visits-page-client.tsx @@ -0,0 +1,31 @@ +"use client" + +import dynamic from "next/dynamic" + +import { AppShell } from "@/components/app-shell" +import { SiteHeader } from "@/components/site-header" + +const TicketsView = dynamic( + () => + import("@/components/tickets/tickets-view").then((module) => ({ + default: module.TicketsView, + })), + { ssr: false } +) + +export function TicketsVisitsPageClient() { + return ( + + } + > +
+ +
+
+ ) +} diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index d009332..10acc19 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -14,6 +14,7 @@ import { Layers3, LayoutTemplate, LifeBuoy, + MapPin, MonitorCog, Package, PlayCircle, @@ -81,6 +82,7 @@ const navigation: NavigationGroup[] = [ requiredRole: "staff", children: [ { title: "Todos os tickets", url: "/tickets", icon: ClipboardList, requiredRole: "staff" }, + { title: "Visitas", url: "/tickets/visits", icon: MapPin, requiredRole: "staff" }, { title: "Resolvidos", url: "/tickets/resolved", icon: ShieldCheck, requiredRole: "staff" }, { title: "Modo Play", url: "/play", icon: PlayCircle, requiredRole: "staff" }, ], diff --git a/tests/automations-engine.test.ts b/tests/automations-engine.test.ts index c24ea9e..483b060 100644 --- a/tests/automations-engine.test.ts +++ b/tests/automations-engine.test.ts @@ -287,7 +287,18 @@ describe("automations.runTicketAutomationsForEvent", () => { expect.objectContaining({ to: ["cliente@empresa.com"], subject: "Atualização do chamado #123", - html: expect.any(String), + emailProps: expect.objectContaining({ + title: "Atualização do chamado #123", + message: "OlÔ Renan, recebemos seu chamado: Teste de automação", + ticket: expect.objectContaining({ + reference: 123, + subject: "Teste de automação", + status: "PENDING", + priority: "MEDIUM", + requesterName: "Renan", + }), + ctaLabel: "Abrir chamado", + }), }) ) })