import BigNumber from 'bignumber.js' import React, { ComponentType, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { Keyboard, TextInput as RNTextInput, StyleSheet, Text } from 'react-native' import { View } from 'react-native-animatable' import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context' import AppAnalytics from 'src/analytics/AppAnalytics' import { SendEvents } from 'src/analytics/Events' import BackButton from 'src/components/BackButton' import { BottomSheetModalRefType } from 'src/components/BottomSheet' import Button, { BtnSizes } from 'src/components/Button' import InLineNotification, { NotificationVariant } from 'src/components/InLineNotification' import KeyboardAwareScrollView from 'src/components/KeyboardAwareScrollView' import { LabelWithInfo } from 'src/components/LabelWithInfo' import TokenBottomSheet, { TokenBottomSheetProps, TokenPickerOrigin, } from 'src/components/TokenBottomSheet' import TokenDisplay from 'src/components/TokenDisplay' import TokenEnterAmount, { FETCH_UPDATED_TRANSACTIONS_DEBOUNCE_TIME_MS, useEnterAmount, } from 'src/components/TokenEnterAmount' import CustomHeader from 'src/components/header/CustomHeader' import { useSelector } from 'src/redux/hooks' import EnterAmountOptions from 'src/send/EnterAmountOptions' import { AmountEnteredIn } from 'src/send/types' import Colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' import { feeCurrenciesSelector } from 'src/tokens/selectors' import { TokenBalance } from 'src/tokens/slice' import { PreparedTransactionsResult, getFeeCurrencyAndAmounts } from 'src/viem/prepareTransactions' export interface ProceedArgs { tokenAmount: BigNumber localAmount: BigNumber | null token: TokenBalance amountEnteredIn: AmountEnteredIn } type ProceedComponentProps = Omit & { onPressProceed(args: ProceedArgs): void disabled: boolean tokenAmount: BigNumber | null showLoading?: boolean } interface Props { tokens: TokenBalance[] defaultToken?: TokenBalance prepareTransactionsResult?: PreparedTransactionsResult prepareTransactionsLoading: boolean onClearPreparedTransactions(): void onRefreshPreparedTransactions( amount: BigNumber, token: TokenBalance, feeCurrencies: TokenBalance[] ): void prepareTransactionError?: Error tokenSelectionDisabled?: boolean onPressProceed(args: ProceedArgs): void disableProceed?: boolean children?: React.ReactNode ProceedComponent: ComponentType disableBalanceCheck?: boolean } export const SendProceed = ({ tokenAmount, localAmount, token, amountEnteredIn, disabled, onPressProceed, showLoading, }: ProceedComponentProps) => { const { t } = useTranslation() return (