import { useState } from 'react'; import { IconCalendarEvent, IconDotsVertical, IconMail, IconRefresh, IconTrash, LightIconButton, MenuItem, } from 'twenty-ui'; import { ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useDestroyOneRecord } from '@/object-record/hooks/useDestroyOneRecord'; import { useTriggerApisOAuth } from '@/settings/accounts/hooks/useTriggerApiOAuth'; import { SettingsPath } from '@/types/SettingsPath'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; type SettingsAccountsRowDropdownMenuProps = { account: ConnectedAccount; }; export const SettingsAccountsRowDropdownMenu = ({ account, }: SettingsAccountsRowDropdownMenuProps) => { const dropdownId = `settings-account-row-${account.id}`; const [isDeleteAccountModalOpen, setIsDeleteAccountModalOpen] = useState(false); const navigate = useNavigateSettings(); const { closeDropdown } = useDropdown(dropdownId); const { destroyOneRecord } = useDestroyOneRecord({ objectNameSingular: CoreObjectNameSingular.ConnectedAccount, }); const { triggerApisOAuth } = useTriggerApisOAuth(); const deleteAccount = async () => { await destroyOneRecord(account.id); setIsDeleteAccountModalOpen(false); }; return ( <> } dropdownMenuWidth={160} dropdownComponents={ { navigate(SettingsPath.AccountsEmails); closeDropdown(); }} /> { navigate(SettingsPath.AccountsCalendars); closeDropdown(); }} /> {account.authFailedAt && ( { triggerApisOAuth(account.provider); closeDropdown(); }} /> )} { setIsDeleteAccountModalOpen(true); closeDropdown(); }} /> } /> All emails and events linked to this account will be deleted } onConfirmClick={deleteAccount} deleteButtonText="Delete account" /> ); };