diff --git a/src/components/LiteTransactionList/index.tsx b/src/components/LiteTransactionList/index.tsx index a6b07b9d2..03a7e3473 100644 --- a/src/components/LiteTransactionList/index.tsx +++ b/src/components/LiteTransactionList/index.tsx @@ -81,7 +81,7 @@ const LiteTransactionList: React.FC<{ > {item.transactionHash} - {item.isRgbTransaction && } + {item.isRgbTransaction && item.rgbTransferStep && } {isPendingListActive ? null : ( diff --git a/src/components/RGBPP/index.tsx b/src/components/RGBPP/index.tsx index a08a73168..7f2560c95 100644 --- a/src/components/RGBPP/index.tsx +++ b/src/components/RGBPP/index.tsx @@ -1,29 +1,15 @@ -import { useMemo, useState } from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Transaction } from '../../models/Transaction' import SimpleModal from '../Modal' import SimpleButton from '../SimpleButton' import TransactionRGBPPDigestModal from '../TransactionItem/TransactionRGBPPDigestModal' import styles from './styles.module.scss' -import { TransactionLeapDirection } from './types' const RGBPP = ({ transaction }: { transaction: Transaction }) => { const [showModal, setShowModal] = useState(false) const { t } = useTranslation() - const direction = useMemo(() => { - // FIXME: should be from API because inputs/outputs are paginated - const inputCellCount = transaction.displayInputs.filter(c => c.rgbInfo).length - const outputCellCount = transaction.displayOutputs.filter(c => c.rgbInfo).length - if (inputCellCount === outputCellCount) { - return TransactionLeapDirection.NONE - } - if (inputCellCount > outputCellCount) { - return TransactionLeapDirection.OUT - } - return TransactionLeapDirection.IN - }, [transaction]) - return (
{ }} >
- {t('transaction.view_rgbpp_digest')} + RGB++: {t(`rgbpp.transaction.step.${transaction.rgbTransferStep}`)}
- setShowModal(false)} - hash={transaction.transactionHash} - leapDirection={direction} - /> + setShowModal(false)} hash={transaction.transactionHash} />
) diff --git a/src/components/RGBPP/types.ts b/src/components/RGBPP/types.ts index 9f8d6b1b7..dcc7c0a7a 100644 --- a/src/components/RGBPP/types.ts +++ b/src/components/RGBPP/types.ts @@ -2,4 +2,5 @@ export enum TransactionLeapDirection { NONE = 'none', IN = 'in', OUT = 'out', + WITH_IN_BTC = 'with_in_btc', } diff --git a/src/components/TransactionItem/TransactionRGBPPDigestModal/TransactionRGBPPDigestContent.tsx b/src/components/TransactionItem/TransactionRGBPPDigestModal/TransactionRGBPPDigestContent.tsx index 796847b7c..09b4fc7e7 100644 --- a/src/components/TransactionItem/TransactionRGBPPDigestModal/TransactionRGBPPDigestContent.tsx +++ b/src/components/TransactionItem/TransactionRGBPPDigestModal/TransactionRGBPPDigestContent.tsx @@ -1,15 +1,11 @@ import { useMemo } from 'react' import { useTranslation } from 'react-i18next' -import { Tooltip } from 'antd' -import { useQuery } from '@tanstack/react-query' import BigNumber from 'bignumber.js' import { ReactComponent as CopyIcon } from '../../../assets/copy_icon.svg' import { ReactComponent as RedirectIcon } from '../../../assets/redirect-icon.svg' import { TransactionRGBPPDigestTransfer } from './TransactionRGBPPDigestTransfer' import { useSetToast } from '../../Toast' -import { explorerService, LiteTransfer } from '../../../services/ExplorerService' -import SmallLoading from '../../Loading/SmallLoading' -import { TransactionLeapDirection } from '../../RGBPP/types' +import { LiteTransfer, RGBDigest } from '../../../services/ExplorerService' import SimpleButton from '../../SimpleButton' import EllipsisMiddle from '../../EllipsisMiddle' import styles from './styles.module.scss' @@ -17,23 +13,24 @@ import AddressText from '../../AddressText' import { useIsMobile } from '../../../hooks' import { Link } from '../../Link' import config from '../../../config' +import SmallLoading from '../../Loading/SmallLoading' export const TransactionRGBPPDigestContent = ({ - leapDirection, hash, + digest, + isFetched, }: { - leapDirection: TransactionLeapDirection hash: string + digest?: RGBDigest + isFetched: boolean }) => { const { t } = useTranslation() const setToast = useSetToast() const isMobile = useIsMobile() - const { data, isFetched } = useQuery(['rgb-digest', hash], () => explorerService.api.fetchRGBDigest(hash)) - const transfers = useMemo(() => { const m = new Map() - data?.data.transfers?.forEach(tf => { + digest?.transfers.forEach(tf => { const list = m.get(tf.address) || [] tf.transfers.forEach(i => { let asset: LiteTransfer.Transfer | undefined @@ -84,7 +81,7 @@ export const TransactionRGBPPDigestContent = ({ m.set(tf.address, list) }) return m - }, [data?.data.transfers]) + }, [digest?.transfers]) if (!isFetched) { return ( @@ -93,17 +90,17 @@ export const TransactionRGBPPDigestContent = ({ ) } - if (!data) { + if (!digest) { return
{t('transaction.no_records')}
} return (
- {data.data.commitment ? ( + {digest.commitment ? (
{t('address.seal_tx_on_bitcoin')} - {data.data.txid && ( + {digest.txid && ( <> - {data.data.txid} + {digest.txid} - + )}
- {typeof data.data.confirmations === 'number' && ( - ({data.data.confirmations} Confirmations on Bitcoin) + {typeof digest.confirmations === 'number' && ( + ({digest.confirmations} Confirmations on Bitcoin) )} - {leapDirection !== TransactionLeapDirection.NONE ? ( - - {t(`address.leap_${leapDirection}`)} - - ) : null}
Commitment:
- + { - navigator.clipboard.writeText(data.data.commitment) + navigator.clipboard.writeText(digest.commitment) setToast({ message: t('common.copied') }) }} > diff --git a/src/components/TransactionItem/TransactionRGBPPDigestModal/index.tsx b/src/components/TransactionItem/TransactionRGBPPDigestModal/index.tsx index 6df5a50d3..ecacdd4fb 100644 --- a/src/components/TransactionItem/TransactionRGBPPDigestModal/index.tsx +++ b/src/components/TransactionItem/TransactionRGBPPDigestModal/index.tsx @@ -1,31 +1,49 @@ import { useTranslation } from 'react-i18next' +import { useQuery } from '@tanstack/react-query' +import { useMemo } from 'react' import styles from './styles.module.scss' import CloseIcon from '../../../assets/modal_close.png' import { TransactionRGBPPDigestContent } from './TransactionRGBPPDigestContent' +import { explorerService } from '../../../services/ExplorerService' import { TransactionLeapDirection } from '../../RGBPP/types' -const TransactionRGBPPDigestModal = ({ - hash, - leapDirection, - onClickClose, -}: { - onClickClose: Function - hash: string - leapDirection: TransactionLeapDirection -}) => { +const TransactionRGBPPDigestModal = ({ hash, onClickClose }: { onClickClose: Function; hash: string }) => { const { t } = useTranslation() - return ( -
-
- {t('address.transaction_rgbpp_digest')} - + const { data, isFetched } = useQuery(['rgb-digest', hash], () => explorerService.api.fetchRGBDigest(hash)) + + const direction = useMemo(() => { + switch (data?.data.leapDirection) { + case 'in': + return TransactionLeapDirection.IN + case 'leapoutBTC': + return TransactionLeapDirection.OUT + case 'withinBTC': + return TransactionLeapDirection.WITH_IN_BTC + default: + return TransactionLeapDirection.NONE + } + }, [data]) + + if (isFetched && data?.data) { + return ( +
+
+
+ {t('address.transaction_rgbpp_digest')} + {direction !== TransactionLeapDirection.NONE && ( + {t(`address.leap_${direction}`)} + )} +
+ +
+
- -
- ) + ) + } + return null } export default TransactionRGBPPDigestModal diff --git a/src/components/TransactionItem/TransactionRGBPPDigestModal/styles.module.scss b/src/components/TransactionItem/TransactionRGBPPDigestModal/styles.module.scss index 8c465ae34..377887d50 100644 --- a/src/components/TransactionItem/TransactionRGBPPDigestModal/styles.module.scss +++ b/src/components/TransactionItem/TransactionRGBPPDigestModal/styles.module.scss @@ -17,6 +17,13 @@ .header { display: flex; justify-content: space-between; + margin-bottom: 10px; + + .left { + display: flex; + gap: 8px; + align-items: center; + } > span { font-family: Roboto, sans-serif; @@ -71,7 +78,9 @@ .txid, .commitment { + max-width: 100%; display: flex; + flex: 1 1; flex-shrink: 1; overflow: hidden; font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; diff --git a/src/components/TransactionItem/index.tsx b/src/components/TransactionItem/index.tsx index d935e00e7..c15d64fe2 100644 --- a/src/components/TransactionItem/index.tsx +++ b/src/components/TransactionItem/index.tsx @@ -119,7 +119,7 @@ const TransactionItem = ({ > {transaction.transactionHash} - {transaction.isRgbTransaction && } + {transaction.isRgbTransaction && transaction.rgbTransferStep && }