import type { Route } from '@lifi/sdk'; import { WarningRounded } from '@mui/icons-material'; import { Box, Button, Typography } from '@mui/material'; import type { MutableRefObject } from 'react'; import { forwardRef, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'; import type { BottomSheetBase } from '../../components/BottomSheet/types.js'; import { FeeBreakdownTooltip } from '../../components/FeeBreakdownTooltip.js'; import { useSetContentHeight } from '../../hooks/useSetContentHeight.js'; import { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'; import { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'; import { calculateValueLossPercentage } from './utils.js'; import { useFieldValues } from '../../stores/form/useFieldValues.js'; import { FormKeyHelper } from '../../stores/form/types.js'; import { TON_CHAIN_ID } from '../../utils/constants.js'; interface TokenValueBottomSheetProps { route: Route; onContinue(): void; onCancel?(): void; } export const TokenValueBottomSheet = forwardRef< BottomSheetBase, TokenValueBottomSheetProps >(({ route, onContinue, onCancel }, ref) => { const handleCancel = () => { (ref as MutableRefObject).current?.close(); onCancel?.(); }; return ( ); }); const TokenValueBottomSheetContent: React.FC = ({ route, onCancel, onContinue, }) => { const { t } = useTranslation(); const ref = useRef(); useSetContentHeight(ref); const { gasCosts, feeCosts, gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route); const fromAmountUSD = parseFloat(route.fromAmountUSD); const toAmountUSD = parseFloat(route.toAmountUSD); const [chainId] = useFieldValues(FormKeyHelper.getChainKey('from')); let formatGasCostUSD = gasCostUSD; let formatFeeCostUSD = feeCostUSD; if (chainId === TON_CHAIN_ID) { formatGasCostUSD = gasCostUSD / 10; formatFeeCostUSD = feeCostUSD / 10; } return ( {t('warning.title.highValueLoss')} {t('warning.message.highValueLoss')} {t('main.sending')} {t('format.currency', { value: route.fromAmountUSD })} {t('main.fees.network')} {t('format.currency', { value: formatGasCostUSD })} {formatFeeCostUSD ? ( {t('main.fees.provider')} {t('format.currency', { value: formatFeeCostUSD })} ) : null} {t('main.receiving')} {t('format.currency', { value: route.toAmountUSD })} {t('main.valueLoss')} {calculateValueLossPercentage( fromAmountUSD, toAmountUSD, formatGasCostUSD, formatFeeCostUSD, )} % ); };