import React, { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { Tabs, Tab } from '../../../ui/tabs'; import Button from '../../../ui/button'; import ActionableMessage from '../../../ui/actionable-message/actionable-message'; import { PageContainerFooter } from '../../../ui/page-container'; import ErrorMessage from '../../../ui/error-message'; import { INSUFFICIENT_FUNDS_ERROR_KEY } from '../../../../helpers/constants/error-keys'; import Typography from '../../../ui/typography'; import { TYPOGRAPHY } from '../../../../helpers/constants/design-system'; import { TRANSACTION_TYPES } from '../../../../../shared/constants/transaction'; import { ConfirmPageContainerSummary, ConfirmPageContainerWarning } from '.'; export default class ConfirmPageContainerContent extends Component { static contextTypes = { t: PropTypes.func.isRequired, }; static propTypes = { action: PropTypes.string, dataComponent: PropTypes.node, dataHexComponent: PropTypes.node, detailsComponent: PropTypes.node, errorKey: PropTypes.string, errorMessage: PropTypes.string, hasSimulationError: PropTypes.bool, hideSubtitle: PropTypes.bool, tokenAddress: PropTypes.string, nonce: PropTypes.string, subtitleComponent: PropTypes.node, title: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), image: PropTypes.string, titleComponent: PropTypes.node, warning: PropTypes.string, origin: PropTypes.string.isRequired, ethGasPriceWarning: PropTypes.string, // Footer onCancelAll: PropTypes.func, onCancel: PropTypes.func, cancelText: PropTypes.string, onSubmit: PropTypes.func, setUserAcknowledgedGasMissing: PropTypes.func, submitText: PropTypes.string, disabled: PropTypes.bool, hideUserAcknowledgedGasMissing: PropTypes.bool, unapprovedTxCount: PropTypes.number, rejectNText: PropTypes.string, hideTitle: PropTypes.bool, supportsEIP1559V2: PropTypes.bool, hasTopBorder: PropTypes.bool, currentTransaction: PropTypes.string, nativeCurrency: PropTypes.string, networkName: PropTypes.string, showBuyModal: PropTypes.func, toAddress: PropTypes.string, transactionType: PropTypes.string, isBuyableChain: PropTypes.bool, }; renderContent() { const { detailsComponent, dataComponent } = this.props; if (detailsComponent && dataComponent) { return this.renderTabs(); } return detailsComponent || dataComponent; } renderTabs() { const { t } = this.context; const { detailsComponent, dataComponent, dataHexComponent } = this.props; return ( {detailsComponent} {dataComponent} {dataHexComponent && ( {dataHexComponent} )} ); } render() { const { action, errorKey, errorMessage, hasSimulationError, title, image, titleComponent, subtitleComponent, hideSubtitle, tokenAddress, nonce, detailsComponent, dataComponent, warning, onCancelAll, onCancel, cancelText, onSubmit, submitText, disabled, unapprovedTxCount, rejectNText, origin, ethGasPriceWarning, hideTitle, setUserAcknowledgedGasMissing, hideUserAcknowledgedGasMissing, supportsEIP1559V2, hasTopBorder, currentTransaction, nativeCurrency, networkName, showBuyModal, toAddress, transactionType, isBuyableChain, } = this.props; const primaryAction = hideUserAcknowledgedGasMissing ? null : { label: this.context.t('tryAnywayOption'), onClick: setUserAcknowledgedGasMissing, }; const { t } = this.context; const showInsuffienctFundsError = supportsEIP1559V2 && !hasSimulationError && (errorKey || errorMessage) && errorKey === INSUFFICIENT_FUNDS_ERROR_KEY; return (
{warning ? : null} {ethGasPriceWarning && ( )} {hasSimulationError && (
)} {this.renderContent()} {!supportsEIP1559V2 && !hasSimulationError && (errorKey || errorMessage) && currentTransaction.type !== TRANSACTION_TYPES.SIMPLE_SEND && (
)} {showInsuffienctFundsError && (
{t('insufficientCurrencyBuyOrDeposit', [ nativeCurrency, networkName, , ])} ) : ( {t('insufficientCurrencyDeposit', [ nativeCurrency, networkName, ])} ) } useIcon iconFillColor="var(--color-error-default)" type="danger" />
)} {unapprovedTxCount > 1 ? ( {rejectNText} ) : null}
); } }