import type { Table } from "@tanstack/react-table"; import { useState } from "react"; import classNames from "@calcom/lib/classNames"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc"; import { Button, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Icon, Popover, PopoverContent, PopoverTrigger, showToast, } from "@calcom/ui"; import type { User } from "../UserListTable"; interface Props { table: Table; } export function TeamListBulkAction({ table }: Props) { const { data: teams } = trpc.viewer.organizations.getTeams.useQuery(); const [selectedValues, setSelectedValues] = useState>(new Set()); const utils = trpc.useUtils(); const mutation = trpc.viewer.organizations.bulkAddToTeams.useMutation({ onError: (error) => { showToast(error.message, "error"); }, onSuccess: (res) => { showToast( `${res.invitedTotalUsers} Users invited to ${Array.from(selectedValues).length} teams`, "success" ); // Optimistically update the data from query trpc cache listMembers // We may need to set this data instread of invalidating. Will see how performance handles it utils.viewer.organizations.listMembers.invalidate(); // Clear the selected values setSelectedValues(new Set()); table.toggleAllRowsSelected(false); }, }); const { t } = useLocale(); // Add a value to the set const addValue = (value: number) => { const updatedSet = new Set(selectedValues); updatedSet.add(value); setSelectedValues(updatedSet); }; // Remove a value from the set const removeValue = (value: number) => { const updatedSet = new Set(selectedValues); updatedSet.delete(value); setSelectedValues(updatedSet); }; return ( <> {/* We dont really use shadows much - but its needed here */} No results found. {teams && teams.map((option) => { const isSelected = selectedValues.has(option.id); return ( { if (!isSelected) { addValue(option.id); } else { removeValue(option.id); } }}> {option.name}
); })}
); }