mars-interface/src/components/common/TxModal/TxSuccessContent.tsx
Linkie Link 5d7f86662a
v1.2.0
2023-02-07 17:52:13 +01:00

85 lines
2.8 KiB
TypeScript

import { Coin } from '@cosmjs/stargate'
import { ChainInfoID, SimpleChainInfoList, TxBroadcastResult } from '@marsprotocol/wallet-connector'
import { Button, InfoTitle, TxFee, TxLink } from 'components/common'
import { useTranslation } from 'react-i18next'
import useStore from 'store'
import { TxStatus } from 'types/enums/RedBankAction'
import styles from './TxSuccessContent.module.scss'
interface Props {
title: string
response?: TxBroadcastResult | null
txFee?: Coin
txStatus: TxStatus
actions: { label: string; values: string[] }[]
handleClose: () => void
}
export const TxSuccessContent = ({
response,
txFee,
title,
txStatus,
actions,
handleClose,
}: Props) => {
const { t } = useTranslation()
const chainInfo = useStore((s) => s.chainInfo)
const explorerUrl = chainInfo && SimpleChainInfoList[chainInfo.chainId as ChainInfoID].explorer
return (
<div className={styles.container}>
<div className={styles.result}>
<div className={styles.infoContainer}>
<InfoTitle
src={txStatus}
subTitle={txStatus === TxStatus.LOADING ? '' : title}
title={
txStatus === TxStatus.LOADING
? t('common.transactionPending')
: t('common.transactionSuccessful')
}
/>
{response && txStatus === TxStatus.SUCCESS && (
<div className={styles.info}>
{actions.map((action, index) => {
return (
<div key={`item-${index}`} className={styles.item}>
<div className={styles.label}>{action.label}</div>
<div>
{action.values.map((value, index) => (
<div key={`value-${index}`} className={styles.value}>
{value}
</div>
))}
</div>
</div>
)
})}
<div className={styles.item}>
<span className={`${styles.label}`}>{t('common.transactionFee')}</span>
<TxFee displayLabel={false} styleOverride={{ padding: 0 }} txFee={txFee} />
</div>
<div className={styles.item}>
<div className={styles.label}>{t('common.txHash')}</div>
<TxLink
hash={response?.response.transactionHash || ''}
link={`${explorerUrl}/txs/${response?.response.transactionHash}`}
/>
</div>
</div>
)}
</div>
</div>
{response && txStatus === TxStatus.SUCCESS && (
<div style={{ alignSelf: 'center', marginBottom: '32px' }}>
<Button color='primary' disabled={false} onClick={handleClose} text={t('common.close')} />
</div>
)}
</div>
)
}