import { Badge, Body, centerFlexChildren, hFlex, Icon, MenuItem, MenuItemSize, Stack, Sticker, } from '@biom3/react'; import { ReactElement, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { getRouteAndTokenBalances } from '../../lib/squid/functions/getRouteAndTokenBalances'; import { getTotalRouteFees } from '../../lib/squid/functions/getTotalRouteFees'; import { Chain, RouteData } from '../../lib/squid/types'; import { getDurationFormatted } from '../../functions/getDurationFormatted'; import { getFormattedAmounts } from '../../functions/getFormattedNumber'; export interface RouteOptionProps< RC extends ReactElement | undefined = undefined, > { routeData: RouteData; chains: Chain[] | null; onClick: (route: RouteData) => void; disabled?: boolean; isFastest?: boolean; size?: MenuItemSize; rc?: RC; selected?: boolean; } export function RouteOption({ routeData, onClick, chains, disabled = false, isFastest = false, size = 'small', rc = , selected = false, }: RouteOptionProps) { const { t } = useTranslation(); const { fromToken } = routeData.amountData; const { estimate } = routeData.route.route; const chain = chains?.find((c) => c.id === fromToken.chainId); const estimatedDurationFormatted = getDurationFormatted( estimate.estimatedRouteDuration, t('views.ADD_TOKENS.routeSelection.minutesText'), t('views.ADD_TOKENS.routeSelection.minuteText'), t('views.ADD_TOKENS.routeSelection.secondsText'), ); const { totalFeesUsd } = useMemo( () => getTotalRouteFees(routeData.route), [routeData], ); const { routeBalanceUsd, fromAmount, fromAmountUsd } = useMemo( () => getRouteAndTokenBalances(routeData), [routeData], ); const handleClick = () => { onClick(routeData); }; const menuItemProps = { selected, disabled, emphasized: true, rc, size, onClick: disabled ? undefined : handleClick, }; return ( {fromToken.name} {chain && ( } size="xSmall" /> } /> )} {`${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}`} } direction="row" justifyContent="space-between" sx={{ w: '100%', }} > {estimatedDurationFormatted} {isFastest && ( )} { `${t('views.ADD_TOKENS.fees.fee')} ${t('views.ADD_TOKENS.fees.fiatPricePrefix')} $${getFormattedAmounts(totalFeesUsd)}` }
); }