import { Fragment, useCallback } from 'react' import Image from 'next/image' import { Address } from 'viem' import { Popover, Transition } from '@headlessui/react' import { Chain } from '@/utils/types' import { TransactionStatus } from './Transaction' import { getTransactionExplorerLink, getTransactionHashExplorerLink, } from './components/TransactionExplorerLink' import { getExplorerAddressUrl, getExplorerTxUrl } from '@/constants/urls' import { DISCORD_URL } from '@/constants/urls' import Button from '@/components/ui/tailwind/Button' import SynapseLogo from '@assets/icons/syn.svg' import DiscordIcon from '@/components/icons/DiscordIcon' import { DownArrow } from '@/components/icons/DownArrow' export const TransactionOptions = ({ connectedAddress, originChain, destinationChain, kappa, transactionHash, transactionStatus, isDelayed, }: { connectedAddress: Address originChain: Chain destinationChain: Chain kappa?: string transactionHash?: string transactionStatus: TransactionStatus isDelayed: boolean }) => { const handleOriginExplorerLink: () => void = useCallback(() => { if (originChain && connectedAddress) { const explorerLink: string = getExplorerAddressUrl({ chainId: originChain.id, address: connectedAddress, }) window.open(explorerLink, '_blank', 'noopener,noreferrer') } }, [originChain, connectedAddress]) const handleDestinationExplorerLink: () => void = useCallback(() => { if (destinationChain && connectedAddress) { const explorerLink: string = getExplorerAddressUrl({ chainId: destinationChain.id, address: connectedAddress, }) window.open(explorerLink, '_blank', 'noopener,noreferrer') } }, [destinationChain, connectedAddress]) const handleSynapseExplorerLink: () => void = useCallback(() => { if (kappa) { const explorerLink: string = getTransactionExplorerLink({ kappa, fromChainId: originChain?.id, toChainId: destinationChain?.id, }) window.open(explorerLink, '_blank', 'noopener,noreferrer') } else if (transactionHash) { const explorerLink: string = getTransactionHashExplorerLink({ transactionHash: transactionHash, }) window.open(explorerLink, '_blank', 'noopener,noreferrer') } }, [kappa, originChain, transactionStatus, isDelayed, transactionHash]) const handleSupportClick: () => void = () => { window.open(DISCORD_URL, '_blank', 'noopener,noreferrer') } return ( {({ open }) => ( <> {}} className={` group rounded-md inline-flex items-center hover:text-gray-900 focus:outline-none ${open ? 'text-gray-900' : 'text-purple-800'} `} > } text={`${originChain.explorerName}`} onClick={handleOriginExplorerLink} /> } text={`${destinationChain.explorerName}`} onClick={handleDestinationExplorerLink} /> } text={`Synapse Explorer`} onClick={handleSynapseExplorerLink} /> } text={'Contact Support'} onClick={handleSupportClick} /> )} ) } export function TransactionPopoverContainer({ children, className, }: { children: any className?: string }) { return (
{children}
) } export function DropdownButton({ open, onClick, isDelayed, className, ...props }: { open: boolean onClick?: () => void isDelayed?: boolean className?: string props?: any }) { return ( ) } export const OptionButton = ({ icon, text, onClick, }: { icon: any text: string onClick: () => void }) => { return (
{icon}
{text}
) }