'use client'; import { useDepositAnalytics } from '@/earn/hooks/useDepositAnalytics'; import { cn } from '@/styles/theme'; import { type LifecycleStatus, Transaction, TransactionButton, type TransactionResponseType, } from '@/transaction'; import { TransactionButtonRenderParams } from '@/transaction/types'; import { ConnectWallet } from '@/wallet'; import { useCallback, useState } from 'react'; import type { DepositButtonProps } from '../types'; import { useEarnContext } from './EarnProvider'; import { RenderDepositButton } from './RenderDepositButton'; export function DepositButton({ className }: DepositButtonProps) { const { recipientAddress: address, vaultToken, depositCalls, depositAmount, setDepositAmount, depositAmountError, updateLifecycleStatus, refetchWalletBalance, isSponsored, } = useEarnContext(); const [depositedAmount, setDepositedAmount] = useState(''); const { setTransactionState } = useDepositAnalytics(depositedAmount); const handleOnStatus = useCallback( (status: LifecycleStatus) => { setTransactionState(status.statusName); if (status.statusName === 'transactionPending') { updateLifecycleStatus({ statusName: 'transactionPending' }); } if ( status.statusName === 'transactionLegacyExecuted' || status.statusName === 'success' || status.statusName === 'error' ) { updateLifecycleStatus(status); } }, [updateLifecycleStatus, setTransactionState], ); const handleOnSuccess = useCallback( (res: TransactionResponseType) => { if ( res.transactionReceipts[0] && res.transactionReceipts[0].status === 'success' ) { // Don't overwrite to '' when the second txn comes in if (depositAmount) { setDepositedAmount(depositAmount); } setDepositAmount(''); refetchWalletBalance(); } }, [depositAmount, setDepositAmount, refetchWalletBalance], ); if (!address) { return ( ); } return ( { return ( ); }} disabled={!!depositAmountError || !depositAmount} /> ); }