diff --git a/src/components/admin/admin-users-manager.tsx b/src/components/admin/admin-users-manager.tsx index 53792f4..7e4aa17 100644 --- a/src/components/admin/admin-users-manager.tsx +++ b/src/components/admin/admin-users-manager.tsx @@ -28,6 +28,14 @@ import { PaginationNext, PaginationPrevious, } from "@/components/ui/pagination" +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table" import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from "@/components/ui/sheet" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { useQuery } from "convex/react" @@ -35,6 +43,7 @@ import { api } from "@/convex/_generated/api" import { useAuth } from "@/lib/auth-client" import { ROLE_OPTIONS, type RoleOption } from "@/lib/authz" import { canReactivateInvite as canReactivateInvitePolicy } from "@/lib/invite-policies" +import { SearchableCombobox, type SearchableComboboxOption } from "@/components/ui/searchable-combobox" type AdminRole = RoleOption | "machine" const NO_COMPANY_ID = "__none__" @@ -284,6 +293,31 @@ export function AdminUsersManager({ ) const machineUsers = useMemo(() => users.filter((user) => user.role === "machine"), [users]) + const teamRoleFilterOptions = useMemo(() => { + const teamRoles = selectableRoles.filter((option) => ["admin", "agent"].includes(option)) + return [ + { value: "all", label: "Todos os papéis" }, + ...teamRoles.map((option) => ({ value: option, label: formatRole(option) })), + ] + }, [selectableRoles]) + + const usersTypeFilterOptions = useMemo( + () => [ + { value: "all", label: "Todos" }, + { value: "people", label: "Pessoas" }, + { value: "machines", label: "Máquinas" }, + ], + [], + ) + + const companyFilterOptions = useMemo( + () => [ + { value: "all", label: "Todas as empresas" }, + ...companies.map((company) => ({ value: company.id, label: company.name })), + ], + [companies], + ) + const defaultCreateRole: RoleOption = selectableRoles[0] ?? "agent" // Equipe const [teamSearch, setTeamSearch] = useState("") @@ -1158,28 +1192,28 @@ async function handleDeleteUser() { />
- - + { + if (value === "admin" || value === "agent") { + setTeamRoleFilter(value) + return + } + setTeamRoleFilter("all") + }} + options={teamRoleFilterOptions} + placeholder="Todos os papéis" + searchPlaceholder="Buscar papel..." + className="md:w-48" + /> + setTeamCompanyFilter(value ?? "all")} + options={companyFilterOptions} + placeholder="Todas as empresas" + searchPlaceholder="Buscar empresa..." + className="md:w-56" + /> {/* Filtro por espaço removido */} {(teamSearch.trim().length > 0 || teamRoleFilter !== "all") ? (