'use client'; import { useWithdrawAnalytics } from '@/earn/hooks/useWithdrawAnalytics'; 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 { WithdrawButtonProps } from '../types'; import { useEarnContext } from './EarnProvider'; import { RenderWithdrawButton } from './RenderWithdrawButton'; export function WithdrawButton({ className }: WithdrawButtonProps) { const { recipientAddress: address, withdrawCalls, withdrawAmount, setWithdrawAmount, updateLifecycleStatus, refetchDepositedBalance, withdrawAmountError, vaultToken, isSponsored, } = useEarnContext(); const [withdrawnAmount, setWithdrawnAmount] = useState(''); const { setTransactionState } = useWithdrawAnalytics(withdrawnAmount); 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' ) { if (withdrawAmount) { setWithdrawnAmount(withdrawAmount); } setWithdrawAmount(''); refetchDepositedBalance(); } }, [setWithdrawAmount, refetchDepositedBalance, withdrawAmount], ); if (!address) { return ( ); } return ( { return ( ); }} disabled={!!withdrawAmountError || !withdrawAmount} /> ); }