import Link from "next/link"; import { useState } from "react"; import { InstallAppButtonWithoutPlanCheck } from "@calcom/app-store/InstallAppButtonWithoutPlanCheck"; import type { TDependencyData } from "@calcom/app-store/_appRegistry"; import { WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import type { App } from "@calcom/types/App"; import { Badge } from "@calcom/ui/components/badge"; import { Button } from "@calcom/ui/components/button"; import { Icon } from "@calcom/ui/components/icon"; import { showToast } from "@calcom/ui/components/toast"; interface IAppConnectionItem { title: string; description?: string; logo: string; type: App["type"]; installed?: boolean; isDefault?: boolean; defaultInstall?: boolean; slug?: string; dependencyData?: TDependencyData; } const AppConnectionItem = (props: IAppConnectionItem) => { const { title, logo, type, installed, isDefault, defaultInstall, slug } = props; const { t } = useLocale(); const utils = trpc.useUtils(); const setDefaultConferencingApp = trpc.viewer.apps.setDefaultConferencingApp.useMutation({ onSuccess: async () => { await utils.viewer.me.invalidate(); }, onError: (error) => { showToast(t("something_went_wrong"), "error"); console.error(error); }, }); const dependency = props.dependencyData?.find((data) => !data.installed); const [isInstalling, setInstalling] = useState(false); return (
{title}

{title}

{isDefault && {t("default")}}
{ if (defaultInstall && slug) { setDefaultConferencingApp.mutate({ slug }); } setInstalling(false); utils.viewer.apps.integrations.invalidate(); showToast(t("app_successfully_installed"), "success"); }, onError: (error) => { if (error instanceof Error) showToast(error.message || t("app_could_not_be_installed"), "error"); }, }} render={(buttonProps) => (
) : undefined } onClick={(event) => { // Save cookie key to return url step document.cookie = `return-to=${window.location.href};path=/;max-age=3600;SameSite=Lax`; buttonProps && buttonProps.onClick && buttonProps?.onClick(event); setInstalling(true); }}> {installed ? t("installed") : t("connect")} )} /> {/* It is possible that app is already installed here during onboarding due to Delegation Credential enabled at organization level. We allow the user to set it as default */} {installed && !isDefault && ( )}
); }; export { AppConnectionItem };