import { useState } from "react"; import { ORG_SELF_SERVE_ENABLED, ORG_MINIMUM_PUBLISHED_TEAMS_SELF_SERVE } from "@calcom/lib/constants"; import { trackFormbricksAction } from "@calcom/lib/formbricks-client"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import { Card, Icon, showToast } from "@calcom/ui"; import TeamListItem from "./TeamListItem"; interface Props { teams: RouterOutputs["viewer"]["teams"]["list"]; /** * True for teams that are pending invite acceptance */ pending?: boolean; } export default function TeamList(props: Props) { const utils = trpc.useUtils(); const { t } = useLocale(); const { data: user } = trpc.viewer.me.useQuery(); const [hideDropdown, setHideDropdown] = useState(false); function selectAction(action: string, teamId: number) { switch (action) { case "disband": deleteTeam(teamId); break; } } const deleteTeamMutation = trpc.viewer.teams.delete.useMutation({ async onSuccess() { await utils.viewer.teams.list.invalidate(); await utils.viewer.teams.hasTeamPlan.invalidate(); trackFormbricksAction("team_disbanded"); }, async onError(err) { showToast(err.message, "error"); }, }); function deleteTeam(teamId: number) { deleteTeamMutation.mutate({ teamId }); } if (!user) return null; const isUserAlreadyInAnOrganization = user.profile.organization; return (