diff --git a/src/app/tickets/[id]/page.tsx b/src/app/tickets/[id]/page.tsx
index b0b7b4f..4ed9d6c 100644
--- a/src/app/tickets/[id]/page.tsx
+++ b/src/app/tickets/[id]/page.tsx
@@ -2,6 +2,7 @@ import { AppShell } from "@/components/app-shell"
import { SiteHeader } from "@/components/site-header"
import { TicketDetailView } from "@/components/tickets/ticket-detail-view"
import { NewTicketDialogDeferred } from "@/components/tickets/new-ticket-dialog.client"
+import { TicketBreadcrumbs } from "@/components/tickets/ticket-breadcrumbs"
import { requireAuthenticatedSession } from "@/lib/auth-server"
type TicketDetailPageProps = {
@@ -18,6 +19,7 @@ export default async function TicketDetailPage({ params }: TicketDetailPageProps
}
secondaryAction={}
/>
}
diff --git a/src/app/tickets/page.tsx b/src/app/tickets/page.tsx
index af240bb..e12a2b9 100644
--- a/src/app/tickets/page.tsx
+++ b/src/app/tickets/page.tsx
@@ -39,6 +39,16 @@ function deriveInitialFilters(params: Record
+ {breadcrumbs ?
{breadcrumbs}
: null}
{lead ?
{lead} : null}
{title}
diff --git a/src/components/tickets/ticket-breadcrumbs.tsx b/src/components/tickets/ticket-breadcrumbs.tsx
new file mode 100644
index 0000000..d97fbe5
--- /dev/null
+++ b/src/components/tickets/ticket-breadcrumbs.tsx
@@ -0,0 +1,32 @@
+import Link from "next/link"
+
+import {
+ Breadcrumb,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ BreadcrumbList,
+ BreadcrumbPage,
+ BreadcrumbSeparator,
+} from "@/components/ui/breadcrumb"
+
+type TicketBreadcrumbsProps = {
+ ticketId: string
+}
+
+export function TicketBreadcrumbs({ ticketId }: TicketBreadcrumbsProps) {
+ return (
+
+
+
+
+ Tickets
+
+
+
+
+ Ticket #{ticketId}
+
+
+
+ )
+}
diff --git a/src/components/tickets/tickets-filters.tsx b/src/components/tickets/tickets-filters.tsx
index b19c3a8..e69651a 100644
--- a/src/components/tickets/tickets-filters.tsx
+++ b/src/components/tickets/tickets-filters.tsx
@@ -70,12 +70,20 @@ interface TicketsFiltersProps {
queues?: QueueOption[]
companies?: string[]
assignees?: Array<{ id: string; name: string }>
+ categories?: Array<{ id: string; name: string }>
initialState?: Partial
}
const ALL_VALUE = "ALL"
-export function TicketsFilters({ onChange, queues = [], companies = [], assignees = [], initialState }: TicketsFiltersProps) {
+export function TicketsFilters({
+ onChange,
+ queues = [],
+ companies = [],
+ assignees = [],
+ categories = [],
+ initialState,
+}: TicketsFiltersProps) {
const mergedDefaults = useMemo(
() => ({
...defaultTicketFilters,
@@ -109,10 +117,16 @@ export function TicketsFilters({ onChange, queues = [], companies = [], assignee
const found = assignees.find((a) => a.id === filters.assigneeId)
chips.push(`Responsável: ${found?.name ?? filters.assigneeId}`)
}
+ if (filters.categoryId) {
+ const category = categories.find((category) => category.id === filters.categoryId)
+ chips.push(`Categoria: ${category?.name ?? filters.categoryId}`)
+ }
if (!filters.status && filters.view === "completed") chips.push("Exibindo concluídos")
if (filters.focusVisits) chips.push("Somente visitas/lab")
+ if (filters.dateFrom || filters.dateTo) chips.push(formatDateRangeChip(filters.dateFrom, filters.dateTo))
+ if (filters.sort === "oldest") chips.push("Ordenados por mais antigos")
return chips
- }, [filters, assignees])
+ }, [filters, assignees, categories])
return (
@@ -156,6 +170,22 @@ export function TicketsFilters({ onChange, queues = [], companies = [], assignee
))}
+
+
+