diff --git a/src/components/tickets/tickets-filters.tsx b/src/components/tickets/tickets-filters.tsx index 37da284..616749f 100644 --- a/src/components/tickets/tickets-filters.tsx +++ b/src/components/tickets/tickets-filters.tsx @@ -1,7 +1,7 @@ "use client" import { useEffect, useMemo, useState } from "react" -import { IconCalendar, IconFilter, IconRefresh } from "@tabler/icons-react" +import { IconCalendar, IconFilter, IconRefresh, IconSearch } from "@tabler/icons-react" import type { DateRange } from "react-day-picker" import { @@ -31,6 +31,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select" +import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group" type QueueOption = string @@ -146,10 +147,10 @@ function DateRangeButton({ from, to, onChange, className }: DateRangeButtonProps - - {label} + + {label} @@ -222,32 +223,47 @@ export function TicketsFilters({ return chips }, [filters, assignees, categories, canUseAdvancedFilters]) + const advancedFiltersCount = Number(Boolean(filters.status)) + Number(Boolean(filters.priority)) + Number(Boolean(filters.channel)) + return ( - - - - - setPartial({ search: event.target.value })} - className="w-full rounded-xl border-slate-300 bg-white/90" - /> + + + + + + + setPartial({ search: event.target.value })} + className="w-full rounded-2xl border-slate-300 bg-white/95 pl-9" + /> + - + + setPartial({ dateFrom: from, dateTo: to })} + className="w-full min-w-[200px] rounded-2xl border-slate-300 bg-white/95 text-left text-sm font-semibold text-neutral-700 lg:w-auto" + /> + Filtros rápidos + {advancedFiltersCount > 0 ? ( + + {advancedFiltersCount} + + ) : null} - + Status setPartial(defaultTicketFilters)} - aria-label="Resetar filtros" > + Limpar - + {canUseAdvancedFilters && ( - setPartial({ queue: value === ALL_VALUE ? null : value })} - > - - - - - Todas as filas - {queues.map((queue) => ( - - {queue} - - ))} - - + + setPartial({ queue: value === ALL_VALUE ? null : value })} + > + + + + + Todas as filas + {queues.map((queue) => ( + + {queue} + + ))} + + + )} {canUseAdvancedFilters && ( - setPartial({ company: value === ALL_VALUE ? null : value })} - > - - - - - Todas as empresas - {companies.map((company) => ( - - {company} - - ))} - - + + setPartial({ company: value === ALL_VALUE ? null : value })} + > + + + + + Todas as empresas + {companies.map((company) => ( + + {company} + + ))} + + + )} - setPartial({ categoryId: value === ALL_VALUE ? null : value })} - > - - - - - Todas as categorias - {categories.map((category) => ( - - {category.name} - - ))} - - - {canUseAdvancedFilters && ( + setPartial({ assigneeId: value === ALL_VALUE ? null : value })} + value={filters.categoryId ?? ALL_VALUE} + onValueChange={(value) => setPartial({ categoryId: value === ALL_VALUE ? null : value })} > - - + + - Todos os responsáveis - {assignees.map((user) => ( - - {user.name} + Todas as categorias + {categories.map((category) => ( + + {category.name} ))} + + {canUseAdvancedFilters && ( + + setPartial({ assigneeId: value === ALL_VALUE ? null : value })} + > + + + + + Todos os responsáveis + {assignees.map((user) => ( + + {user.name} + + ))} + + + )} - - + setPartial({ view: value as TicketFiltersState["view"] })} + onValueChange={(value) => value && setPartial({ view: value as TicketFiltersState["view"] })} + className="flex h-10 min-w-[220px] flex-1 items-center rounded-full border border-slate-200 bg-slate-50/70 p-1" > - - - - - Em andamento - Concluídos - - - + Em andamento + + + Concluídos + + + setPartial({ sort: value as TicketFiltersState["sort"] })} + onValueChange={(value) => value && setPartial({ sort: value as TicketFiltersState["sort"] })} + className="flex h-10 min-w-[220px] flex-1 items-center rounded-full border border-slate-200 bg-slate-50/70 p-1" > - - - - - Mais recentes - Mais antigos - - - setPartial({ dateFrom: from, dateTo: to })} - className="w-full" - /> + + Mais recentes + + + Mais antigos + +
Status