import abi from 'human-standard-token-abi' import { calcGasTotal } from '../pages/send/send.utils' import { accountsWithSendEtherInfoSelector, getAddressBook, getSelectedAccount, getTargetAccount, getAveragePriceEstimateInHexWEI, } from '.' export function getBlockGasLimit(state) { return state.metamask.currentBlockGasLimit } export function getConversionRate(state) { return state.metamask.conversionRate } export function getNativeCurrency(state) { return state.metamask.nativeCurrency } export function getCurrentNetwork(state) { return state.metamask.network } export function getGasLimit(state) { return state.metamask.send.gasLimit || '0' } export function getGasPrice(state) { return state.metamask.send.gasPrice || getAveragePriceEstimateInHexWEI(state) } export function getGasTotal(state) { return calcGasTotal(getGasLimit(state), getGasPrice(state)) } export function getPrimaryCurrency(state) { const sendToken = getSendToken(state) return sendToken?.symbol } export function getSendToken(state) { return state.metamask.send.token } export function getSendTokenAddress(state) { return getSendToken(state)?.address } export function getSendTokenContract(state) { const sendTokenAddress = getSendTokenAddress(state) return sendTokenAddress ? global.eth.contract(abi).at(sendTokenAddress) : null } export function getSendAmount(state) { return state.metamask.send.amount } export function getSendHexData(state) { return state.metamask.send.data } export function getSendHexDataFeatureFlagState(state) { return state.metamask.featureFlags.sendHexData } export function getSendEditingTransactionId(state) { return state.metamask.send.editingTransactionId } export function getSendErrors(state) { return state.send.errors } export function sendAmountIsInError(state) { return Boolean(state.send.errors.amount) } export function getSendFrom(state) { return state.metamask.send.from } export function getSendFromBalance(state) { const fromAccount = getSendFromObject(state) return fromAccount.balance } export function getSendFromObject(state) { const fromAddress = getSendFrom(state) return fromAddress ? getTargetAccount(state, fromAddress) : getSelectedAccount(state) } export function getSendMaxModeState(state) { return state.metamask.send.maxModeOn } export function getSendTo(state) { return state.metamask.send.to } export function getSendToNickname(state) { return state.metamask.send.toNickname } export function getSendToAccounts(state) { const fromAccounts = accountsWithSendEtherInfoSelector(state) const addressBookAccounts = getAddressBook(state) return [...fromAccounts, ...addressBookAccounts] } export function getTokenBalance(state) { return state.metamask.send.tokenBalance } export function getSendEnsResolution(state) { return state.metamask.send.ensResolution } export function getSendEnsResolutionError(state) { return state.metamask.send.ensResolutionError } export function getUnapprovedTxs(state) { return state.metamask.unapprovedTxs } export function getQrCodeData(state) { return state.appState.qrCodeData } export function getGasLoadingError(state) { return state.send.errors.gasLoading } export function gasFeeIsInError(state) { return Boolean(state.send.errors.gasFee) } export function getGasButtonGroupShown(state) { return state.send.gasButtonGroupShown } export function getTitleKey(state) { const isEditing = Boolean(getSendEditingTransactionId(state)) const isToken = Boolean(getSendToken(state)) if (!getSendTo(state)) { return 'addRecipient' } if (isEditing) { return 'edit' } else if (isToken) { return 'sendTokens' } return 'sendETH' } export function isSendFormInError(state) { return Object.values(getSendErrors(state)).some((n) => n) }