import Link from 'next/link' import { useRouter } from 'next/router' import { forwardRef, useCallback, useState } from 'react' import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, IconChevronDown, IconLoader, IconRefreshCw, IconTrash, Modal, } from 'ui' import { IntegrationConnection, IntegrationConnectionProps, } from 'components/interfaces/Integrations/IntegrationPanels' import ConfirmationModal from 'components/ui/ConfirmationModal' import { useIntegrationsVercelConnectionSyncEnvsMutation } from 'data/integrations/integrations-vercel-connection-sync-envs-mutation' import { IntegrationProjectConnection } from 'data/integrations/integrations.types' import { useStore } from 'hooks' interface IntegrationConnectionItemProps extends IntegrationConnectionProps { onDeleteConnection: (connection: IntegrationProjectConnection) => void | Promise } const IntegrationConnectionItem = forwardRef( ({ onDeleteConnection, ...props }, ref) => { const { ui } = useStore() const [isOpen, setIsOpen] = useState(false) const [dropdownVisible, setDropdownVisible] = useState(false) const router = useRouter() const onConfirm = useCallback(async () => { try { await onDeleteConnection(props.connection) } finally { setIsOpen(false) } }, [props.connection, onDeleteConnection]) const onCancel = useCallback(() => { setIsOpen(false) }, []) const { mutate: syncEnvs, isLoading: isSyncEnvLoading } = useIntegrationsVercelConnectionSyncEnvsMutation({ onSuccess: () => { ui.setNotification({ category: 'success', message: 'Successfully synced environment variables', }) setDropdownVisible(false) }, }) const onReSyncEnvVars = useCallback(async () => { syncEnvs({ connectionId: props.connection.id }) }, [props.connection, syncEnvs]) const projectIntegrationUrl = `/project/[ref]/settings/integrations` return ( <> setDropdownVisible(!dropdownVisible)} modal={false} > {props.type === 'Vercel' && ( <> {router.pathname !== projectIntegrationUrl && ( View project configuration )} { event.preventDefault() onReSyncEnvVars() }} disabled={isSyncEnvLoading} > {isSyncEnvLoading ? ( ) : ( )}

Resync environment variables

)} setIsOpen(true)}>

Delete connection

} {...props} />

{`This action cannot be undone. Are you sure you want to delete this connection?`}

) } ) IntegrationConnectionItem.displayName = 'IntegrationConnectionItem' export { IntegrationConnectionItem }