"use client"; import { useState } from "react"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { GOOGLE_CALENDAR_TYPE } from "@calcom/platform-constants"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import { ConfirmationDialogContent } from "@calcom/ui/components/dialog"; import { Dialog } from "@calcom/ui/components/dialog"; import { Dropdown, DropdownItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@calcom/ui/components/dropdown"; import { showToast } from "@calcom/ui/components/toast"; interface CredentialActionsDropdownProps { credentialId: number; integrationType: string; cacheUpdatedAt?: Date | null; onSuccess?: () => void; delegationCredentialId?: string | null; disableConnectionModification?: boolean; } export default function CredentialActionsDropdown({ credentialId, integrationType, cacheUpdatedAt, onSuccess, delegationCredentialId, disableConnectionModification, }: CredentialActionsDropdownProps) { const { t } = useLocale(); const [dropdownOpen, setDropdownOpen] = useState(false); const [deleteModalOpen, setDeleteModalOpen] = useState(false); const [disconnectModalOpen, setDisconnectModalOpen] = useState(false); const deleteCacheMutation = trpc.viewer.calendars.deleteCache.useMutation({ onSuccess: () => { showToast(t("cache_deleted_successfully"), "success"); onSuccess?.(); }, onError: () => { showToast(t("error_deleting_cache"), "error"); }, }); const utils = trpc.useUtils(); const disconnectMutation = trpc.viewer.credentials.delete.useMutation({ onSuccess: () => { showToast(t("app_removed_successfully"), "success"); onSuccess?.(); }, onError: () => { showToast(t("error_removing_app"), "error"); }, async onSettled() { await utils.viewer.calendars.connectedCalendars.invalidate(); await utils.viewer.apps.integrations.invalidate(); }, }); const isGoogleCalendar = integrationType === GOOGLE_CALENDAR_TYPE; const canDisconnect = !delegationCredentialId && !disableConnectionModification; const hasCache = isGoogleCalendar && cacheUpdatedAt; if (!canDisconnect && !hasCache) { return null; } return ( <>