import { ArrowOutwardRounded, Check, Close } from '@mui/icons-material' import { useTranslation } from 'react-i18next' import { CrossChainPacketInfoStatus, TxRelayState } from '@dao-dao/types' import { getConfiguredChainConfig, processError } from '@dao-dao/utils' import { CopyToClipboardUnderline } from '../CopyToClipboard' import { IconButtonLink } from '../icon_buttons' import { Loader } from '../logo' import { StatusCard } from '../StatusCard' import { Tooltip } from '../tooltip' export type TxCrossChainRelayStatusProps = { state: TxRelayState /** * Whether or not all data is loaded and self-relay can occur. */ canSelfRelay: boolean /** * The error that occurred when loading the data needed to self-relay. */ selfRelayLoadError?: Error } export const TxCrossChainRelayStatus = ({ state: { hasCrossChainMessages, needsSelfRelay, states, openSelfRelay }, canSelfRelay, selfRelayLoadError, }: TxCrossChainRelayStatusProps) => { const { t } = useTranslation() if (!hasCrossChainMessages) { return null } const hasErrorOrTimedOut = states.errored.length + states.timedOut.length > 0 const hasPending = states.pending.length > 0 return (
{states.all.map((state, index) => { const destChainId = state.packet.data.chainId const explorerUrlTemplates = getConfiguredChainConfig(destChainId)?.explorerUrlTemplates return (

{t('title.actionNumber', { number: index + 1, })}

{state.status === CrossChainPacketInfoStatus.Pending ? ( ) : state.status === CrossChainPacketInfoStatus.Relayed ? ( ) : state.status === CrossChainPacketInfoStatus.Errored || state.status === CrossChainPacketInfoStatus.TimedOut ? ( ) : null}
{state.status === CrossChainPacketInfoStatus.Relayed && state.txHashes?.length ? (
{state.txHashes.map((hash) => (
{!!explorerUrlTemplates?.tx && ( )}
))}
) : state.status === CrossChainPacketInfoStatus.Errored ? (
                  {processError(state.error, { forceCapture: false })}
                
) : state.status === CrossChainPacketInfoStatus.TimedOut ? (

{t('title.timedOut')}

) : null}
) })}
) }