* Icon and IconName * Button and ButtonGroup * UserAvatar * AvatarGroup * Avatar * WizardLayout * Dialogs * EmptyScreen * showToast and TextField * Editor * Skeleton * Skeleton * TopBanner and showToast * Button again * more * perf: Remove app-store reference from @calcom/ui * more * Fixing types * Icon * Fixed casing * dropdown * more * Select * more * Badge * List * more * Divider * more * fix * fix type check * refactor * fix * fix * fix * fix * fix * fix * fix * fix type check * fix * fix * fix * fix * more * more * more * more * add index file to components/command * fix * fix * fix * fix imports * fix * fix * fix * fix * fix * fix * fix * fix build errors * fix build errors * fix --------- Co-authored-by: Keith Williams <keithwillcode@gmail.com>
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
|
|
import { isDelegationCredential } from "@calcom/lib/delegationCredential/clientAndServer";
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { trpc } from "@calcom/trpc/react";
|
|
import type { ButtonProps } from "@calcom/ui/components/button";
|
|
import { DisconnectIntegrationComponent } from "@calcom/ui/components/disconnect-calendar-integration";
|
|
import { showToast } from "@calcom/ui/components/toast";
|
|
|
|
export default function DisconnectIntegration(props: {
|
|
credentialId: number;
|
|
teamId?: number | null;
|
|
label?: string;
|
|
trashIcon?: boolean;
|
|
isGlobal?: boolean;
|
|
onSuccess?: () => void;
|
|
buttonProps?: ButtonProps;
|
|
}) {
|
|
const { t } = useLocale();
|
|
const { onSuccess, credentialId, teamId } = props;
|
|
const [modalOpen, setModalOpen] = useState(false);
|
|
const utils = trpc.useUtils();
|
|
|
|
const mutation = trpc.viewer.deleteCredential.useMutation({
|
|
onSuccess: () => {
|
|
showToast(t("app_removed_successfully"), "success");
|
|
setModalOpen(false);
|
|
onSuccess && onSuccess();
|
|
},
|
|
onError: () => {
|
|
showToast(t("error_removing_app"), "error");
|
|
setModalOpen(false);
|
|
},
|
|
async onSettled() {
|
|
await utils.viewer.connectedCalendars.invalidate();
|
|
await utils.viewer.apps.integrations.invalidate();
|
|
},
|
|
});
|
|
|
|
// Such a credential is added in-memory and removed when Delegation credential is disabled.
|
|
const disableDisconnect = isDelegationCredential({ credentialId });
|
|
return (
|
|
<DisconnectIntegrationComponent
|
|
onDeletionConfirmation={() => mutation.mutate({ id: credentialId, ...(teamId ? { teamId } : {}) })}
|
|
isModalOpen={modalOpen}
|
|
onModalOpen={() => setModalOpen((prevValue) => !prevValue)}
|
|
disabled={disableDisconnect}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|