/* eslint-disable no-negated-condition */ import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { TransactionType } from '../../../../../../shared/constants/transaction'; import { toChecksumHexAddress } from '../../../../../../shared/modules/hexstring-utils'; import { useI18nContext } from '../../../../../hooks/useI18nContext'; import useAddressDetails from '../../../../../hooks/useAddressDetails'; import { getIpfsGateway } from '../../../../../selectors'; import Identicon from '../../../../ui/identicon'; import InfoTooltip from '../../../../ui/info-tooltip'; import NicknamePopovers from '../../../modals/nickname-popovers'; import Typography from '../../../../ui/typography'; import { TYPOGRAPHY } from '../../../../../helpers/constants/design-system'; import { ORIGIN_METAMASK } from '../../../../../../shared/constants/app'; import SiteOrigin from '../../../../ui/site-origin'; import { getAssetImageURL } from '../../../../../helpers/utils/util'; const ConfirmPageContainerSummary = (props) => { const { action, title, titleComponent, subtitleComponent, hideSubtitle, className, tokenAddress, toAddress, nonce, origin, hideTitle, image, transactionType, } = props; const [showNicknamePopovers, setShowNicknamePopovers] = useState(false); const t = useI18nContext(); const ipfsGateway = useSelector(getIpfsGateway); const contractInitiatedTransactionType = [ TransactionType.contractInteraction, TransactionType.tokenMethodTransfer, TransactionType.tokenMethodTransferFrom, TransactionType.tokenMethodSafeTransferFrom, ]; const isContractTypeTransaction = contractInitiatedTransactionType.includes(transactionType); let contractAddress; if (isContractTypeTransaction) { // If the transaction is TOKEN_METHOD_TRANSFER or TOKEN_METHOD_TRANSFER_FROM // the contract address is passed down as tokenAddress, if it is anyother // type of contract interaction it is passed as toAddress contractAddress = transactionType === TransactionType.tokenMethodTransfer || transactionType === TransactionType.tokenMethodTransferFrom || transactionType === TransactionType.tokenMethodSafeTransferFrom || transactionType === TransactionType.tokenMethodSetApprovalForAll ? tokenAddress : toAddress; } const { toName, isTrusted } = useAddressDetails(contractAddress); const checksummedAddress = toChecksumHexAddress(contractAddress); const renderImage = () => { const imagePath = getAssetImageURL(image, ipfsGateway); if (image) { return ( ); } else if (contractAddress) { return ( ); } return null; }; return (
{origin === ORIGIN_METAMASK ? null : ( )}
{isContractTypeTransaction && toName && ( : )} {action} {isContractTypeTransaction && isTrusted === false && ( )}
{nonce && (
{`#${nonce}`}
)}
<>
{renderImage()} {!hideTitle ? ( {titleComponent || title} ) : null}
{hideSubtitle ? null : (
{subtitleComponent}
)} {showNicknamePopovers && ( setShowNicknamePopovers(false)} address={checksummedAddress} /> )}
); }; ConfirmPageContainerSummary.propTypes = { action: PropTypes.string, title: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), image: PropTypes.string, titleComponent: PropTypes.node, subtitleComponent: PropTypes.node, hideSubtitle: PropTypes.bool, className: PropTypes.string, tokenAddress: PropTypes.string, toAddress: PropTypes.string, nonce: PropTypes.string, origin: PropTypes.string.isRequired, hideTitle: PropTypes.bool, transactionType: PropTypes.string, }; export default ConfirmPageContainerSummary;