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 ))} +
+
+
+

+ Período +

+
+ setPartial({ dateFrom: event.target.value || null })} + /> + setPartial({ dateTo: event.target.value || null })} + /> +
+