import { Coin } from '@cosmjs/stargate' import { TxBroadcastResult } from '@marsprotocol/wallet-connector' import { Card, TxFailedContent, TxSuccessContent } from 'components/common' import { getFeeFromResponse } from 'functions' import { useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import useStore from 'store' import { TxStatus } from 'types/enums/RedBankAction' interface Props { response?: TxBroadcastResult error?: string title: string actions?: FieldsAction[] handleClose: () => void onSuccess: () => void } export const TxResponse = ({ error, response, title, actions = [], handleClose, onSuccess, }: Props) => { const { t } = useTranslation() const [checkTxStatus, setCheckTxStatus] = useState(false) const [txFee, setTxFee] = useState() const [txStatus, setTxStatus] = useState(TxStatus.LOADING) const rpc = useStore((s) => s.chainInfo?.rpc) const chainId = useStore((s) => s.chainInfo?.chainId) const client = useStore((s) => s.client) const baseCurrency = useStore((s) => s.baseCurrency) useEffect(() => { const getTxInfo = async (hash?: string) => { if (txStatus !== TxStatus.LOADING) return if (!rpc || !chainId || !hash || !response) return try { const coin = getFeeFromResponse(response) if (coin) { setTxFee(coin) } setTxStatus(TxStatus.SUCCESS) onSuccess && onSuccess() } catch { } finally { // We get 404's until the transaction is complete. setCheckTxStatus(false) } } getTxInfo(response?.hash || undefined) }, [client, response, rpc, chainId, checkTxStatus, onSuccess, txStatus, baseCurrency.denom]) // reset scroll useEffect(() => { window.scrollTo(0, 0) }, []) useEffect(() => { if (error) setTxStatus(TxStatus.FAILURE) }, [error]) const [cardTitle] = useMemo(() => { if (txStatus === TxStatus.FAILURE) return [t('common.failed')] if (txStatus === TxStatus.LOADING) return [t('common.pending')] return [t('common.completed'), null] }, [txStatus, t]) return ( {txStatus === TxStatus.FAILURE ? ( ) : ( )} ) } export default TxResponse