import { AllDualVariantIconKeys, Button, MenuItem, Sticker, } from '@biom3/react'; import { MouseEvent, MouseEventHandler, useCallback, useMemo, } from 'react'; import { Checkout } from '@imtbl/checkout-sdk'; import { useTranslation } from 'react-i18next'; import { getRouteAndTokenBalances } from '../../../lib/squid/functions/getRouteAndTokenBalances'; import { Chain, RouteData } from '../../../lib/squid/types'; import { getRemoteVideo } from '../../../lib/utils'; import { getRouteAndTokenBalancesForDirectCryptoPay } from '../functions/getRouteAndBalancesForDirectCryptoPay'; import { DirectCryptoPayData, } from '../types'; interface PurchaseSelectedRouteOptionProps { checkout: Checkout; routeData?: RouteData | DirectCryptoPayData; chains: Chain[] | null; onClick: MouseEventHandler; loading?: boolean; insufficientBalance?: boolean; directCryptoPay?: boolean; showOnrampOption?: boolean; } export function PurchaseSelectedRouteOption({ checkout, routeData, chains, loading = false, insufficientBalance = false, directCryptoPay = false, showOnrampOption = false, onClick, }: PurchaseSelectedRouteOptionProps) { const { t } = useTranslation(); const { fromToken } = routeData?.amountData ?? {}; const chain = chains?.find((c) => c.id === fromToken?.chainId); let chainNativeCurrencySymbol = ''; const { routeBalanceUsd } = useMemo( () => { if (!routeData || !('route' in routeData)) { if (directCryptoPay) { chainNativeCurrencySymbol = chain?.nativeCurrency.symbol || ''; return getRouteAndTokenBalancesForDirectCryptoPay(routeData); } return { routeBalanceUsd: '0', fromAmount: '0', fromAmountUsd: '0' }; } chainNativeCurrencySymbol = routeData.route.route.estimate.gasCosts[0].token.symbol; return getRouteAndTokenBalances(routeData); }, [routeData], ); const insufficientBalancePayWithCard = insufficientBalance && showOnrampOption; const handleOnClick = useCallback( (event: MouseEvent) => { event.stopPropagation(); if (!loading && !routeData && !insufficientBalancePayWithCard) return false; onClick?.(event); return true; }, [onClick, loading, routeData], ); if (!routeData && loading) { return ( {t('views.PURCHASE.routeSelection.loadingText')} ); } if ((!routeData && !loading) || insufficientBalance) { let icon: AllDualVariantIconKeys = 'Sparkle'; let copy = ''; if (insufficientBalance) { icon = 'InformationCircle'; copy = t('views.PURCHASE.routeSelection.noRoute'); } if (insufficientBalancePayWithCard) { icon = 'BankCard'; copy = t('views.PURCHASE.routeSelection.noRoutePayWithCard'); } return ( {copy} ); } return ( {chain && ( } size="xSmall" /> } /> )} {t('views.PURCHASE.walletSelection.from.label')} {' '} {fromToken?.name} {`${t('views.PURCHASE.fees.balance')} ${t( 'views.PURCHASE.fees.fiatPricePrefix', )}${routeBalanceUsd}`} {routeData?.isInsufficientGas && ( <>
{t('views.PURCHASE.noGasRouteMessage', { token: chainNativeCurrencySymbol, })} )}
); }