import { AllDualVariantIconKeys, MenuItem, Stack, Sticker, Tooltip, } from '@biom3/react'; import { MouseEvent, MouseEventHandler, ReactNode, 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'; export interface SelectedRouteOptionProps { checkout: Checkout; routeData?: RouteData; chains: Chain[] | null; onClick: MouseEventHandler; loading?: boolean; withSelectedWallet?: boolean; insufficientBalance?: boolean; showOnrampOption?: boolean; } function SelectedRouteOptionContainer({ children, onClick, selected, }: { children: ReactNode; selected?: boolean; onClick?: MouseEventHandler; }) { return ( (selected ? `calc(${base.spacing.x12} * -1)` : `calc(${base.spacing.x16} * -1)`), w: ({ base }) => (selected ? `calc(100% + (${base.spacing.x12}))` : `calc(100% + (${base.spacing.x16}))`), }} rc={} > {children} ); } export function SelectedRouteOption({ checkout, routeData, chains, loading = false, withSelectedWallet = false, insufficientBalance = false, showOnrampOption = false, onClick, }: SelectedRouteOptionProps) { const { t } = useTranslation(); const { fromToken } = routeData?.amountData ?? {}; const chain = chains?.find((c) => c.id === fromToken?.chainId); const { routeBalanceUsd, fromAmount, fromAmountUsd } = useMemo( () => 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.ADD_TOKENS.routeSelection.loadingText')} ); } if ((!routeData && !loading) || insufficientBalance) { let icon: AllDualVariantIconKeys = 'Sparkle'; let copy = ''; if (insufficientBalance) { icon = 'InformationCircle'; copy = t('views.ADD_TOKENS.routeSelection.noRoute'); } if (insufficientBalancePayWithCard) { icon = 'BankCard'; copy = t('views.ADD_TOKENS.routeSelection.payWithCard'); } return ( {copy} ); } return ( {chain && ( } size="xSmall" /> {chain.name} } /> )} {fromToken?.name} {`${t('views.ADD_TOKENS.fees.balance')} ${t( 'views.ADD_TOKENS.fees.fiatPricePrefix', )} $${routeBalanceUsd}`} {routeData?.isInsufficientGas && ( <>
{t('views.ADD_TOKENS.noGasRouteMessage', { token: routeData.route.route.estimate.gasCosts[0].token.symbol, })} )}
{`${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${fromAmountUsd}`}
); }