import type { RouteExtended } from '@lifi/sdk' import { Box, Button } from '@mui/material' import { useRef } from 'react' import { useTranslation } from 'react-i18next' import type { BottomSheetBase } from '../../components/BottomSheet/types.js' import { useAddressActivity } from '../../hooks/useAddressActivity.js' import { useNavigateBack } from '../../hooks/useNavigateBack.js' import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js' import { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js' import { ConfirmToAddressSheet } from './ConfirmToAddressSheet.js' import { StartTransactionButton } from './StartTransactionButton.js' import { TokenValueBottomSheet } from './TokenValueBottomSheet.js' import { getTokenValueLossThreshold } from './utils.js' interface TransactionFailedButtonsProps { route: RouteExtended restartRoute: () => void deleteRoute: () => void } export const TransactionFailedButtons: React.FC< TransactionFailedButtonsProps > = ({ route, restartRoute, deleteRoute }) => { const { t } = useTranslation() const navigateBack = useNavigateBack() const { mode, hiddenUI } = useWidgetConfig() const tokenValueBottomSheetRef = useRef(null) const confirmToAddressSheetRef = useRef(null) const { toAddress, hasActivity, isLoading: isLoadingAddressActivity, isFetched: isActivityAddressFetched, } = useAddressActivity(route.toChainId) const handleRemoveRoute = () => { navigateBack() deleteRoute() } const handleRetryClick = () => { if ( toAddress && !hasActivity && !isLoadingAddressActivity && isActivityAddressFetched && !hiddenUI?.lowAddressActivityConfirmation ) { confirmToAddressSheetRef.current?.open() return } const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route) const fromAmountUSD = Number.parseFloat(route.fromAmountUSD) const toAmountUSD = Number.parseFloat(route.toAmountUSD) const tokenValueLossThresholdExceeded = getTokenValueLossThreshold( fromAmountUSD, toAmountUSD, gasCostUSD, feeCostUSD ) if (tokenValueLossThresholdExceeded && mode !== 'custom') { tokenValueBottomSheetRef.current?.open() } else { restartRoute() } } return ( {mode !== 'custom' ? ( ) : null} {!hiddenUI?.lowAddressActivityConfirmation ? ( ) : null} ) }