import useAddAppMutation from "@calcom/app-store/_utils/useAddAppMutation"; import { doesAppSupportTeamInstall } from "@calcom/app-store/utils"; import { Spinner } from "@calcom/features/calendars/weeklyview/components/spinner/Spinner"; import type { UserAdminTeams } from "@calcom/features/ee/teams/lib/getUserAdminTeams"; import { CAL_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { RouterOutputs } from "@calcom/trpc/react"; import type { AppFrontendPayload } from "@calcom/types/App"; import type { ButtonProps } from "@calcom/ui"; import { Avatar, Button, Dropdown, DropdownItem, DropdownMenuContent, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuTrigger, showToast, } from "@calcom/ui"; export const InstallAppButtonChild = ({ userAdminTeams, addAppMutationInput, appCategories, multiInstall, credentials, concurrentMeetings, paid, ...props }: { userAdminTeams?: UserAdminTeams; addAppMutationInput: { type: AppFrontendPayload["type"]; variant: string; slug: string }; appCategories: string[]; multiInstall?: boolean; credentials?: RouterOutputs["viewer"]["appCredentialsByType"]["credentials"]; concurrentMeetings?: boolean; paid?: AppFrontendPayload["paid"]; } & ButtonProps) => { const { t } = useLocale(); const mutation = useAddAppMutation(null, { onSuccess: (data) => { if (data?.setupPending) return; showToast(t("app_successfully_installed"), "success"); }, onError: (error) => { if (error instanceof Error) showToast(error.message || t("app_could_not_be_installed"), "error"); }, }); const shouldDisableInstallation = !multiInstall ? !!(credentials && credentials.length) : false; // Paid apps don't support team installs at the moment // Also, cal.ai(the only paid app at the moment) doesn't support team install either if (paid) { return ( {paid.trial ? t("start_paid_trial") : t("subscribe")} ); } if ( !userAdminTeams?.length || !doesAppSupportTeamInstall({ appCategories, concurrentMeetings, isPaid: !!paid }) ) { return ( {multiInstall ? t("install_another") : t("install_app")} ); } return ( {multiInstall ? t("install_another") : t("install_app")} { if (mutation.isLoading) event.preventDefault(); }}> {mutation.isLoading && ( )} {t("install_app_on")} {userAdminTeams.map((team) => { const isInstalled = credentials && credentials.some((credential) => credential?.teamId ? credential?.teamId === team.id : credential.userId === team.id ); return ( ( )} onClick={() => { mutation.mutate( team.isUser ? addAppMutationInput : { ...addAppMutationInput, teamId: team.id } ); }}> {t(team.name)} {isInstalled && `(${t("installed")})`} ); })} ); };
{t(team.name)} {isInstalled && `(${t("installed")})`}