"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 ( <> {hasCache && ( <> {t("cache_status")} {t("cache_last_updated", { timestamp: new Intl.DateTimeFormat("en-US", { dateStyle: "short", timeStyle: "short", }).format(new Date(cacheUpdatedAt)), interpolation: { escapeValue: false }, })} { setDeleteModalOpen(true); setDropdownOpen(false); }}> {t("delete_cached_data")} > )} {canDisconnect && hasCache && } {canDisconnect && ( { setDisconnectModalOpen(true); setDropdownOpen(false); }}> {t("remove_app")} )} { deleteCacheMutation.mutate({ credentialId }); setDeleteModalOpen(false); }}> {t("confirm_delete_cache")} { disconnectMutation.mutate({ id: credentialId }); setDisconnectModalOpen(false); }}> {t("are_you_sure_you_want_to_remove_this_app")} > ); }