import { useEffect, useState } from 'react' import { useAccount, useAccountEffect, useSwitchChain } from 'wagmi' import { useConnectModal } from '@rainbow-me/rainbowkit' import { useTranslations } from 'next-intl' import { DEFAULT_WITHDRAW_QUOTE } from '@/slices/poolWithdrawSlice' import { usePoolDataState, usePoolWithdrawState, usePoolUserDataState, } from '@/slices/pools/hooks' import { stringToBigInt } from '@/utils/bigint/format' import { TransactionButton } from '@/components/buttons/TransactionButton' import LoadingDots from '@/components/ui/tailwind/LoadingDots' const WithdrawButton = ({ approveTxn, withdrawTxn, isApproved }) => { const t = useTranslations('Pools.WithdrawButton') const { chain, isConnected: isConnectedInit } = useAccount() const { chains, switchChain } = useSwitchChain() const { openConnectModal } = useConnectModal() const [isConnected, setIsConnected] = useState(false) useAccountEffect({ onDisconnect() { setIsConnected(false) }, }) useEffect(() => { setIsConnected(isConnectedInit) }, [isConnectedInit]) const { pool } = usePoolDataState() const { poolUserData } = usePoolUserDataState() const { withdrawQuote, inputValue, isLoading } = usePoolWithdrawState() const poolDecimals = pool?.decimals[pool?.chainId] const isBalanceEnough = stringToBigInt(inputValue, poolDecimals) !== 0n && stringToBigInt(inputValue, poolDecimals) <= poolUserData.lpTokenBalance const isValidInput = stringToBigInt(inputValue, poolDecimals) !== 0n const isValidQuote = withdrawQuote !== DEFAULT_WITHDRAW_QUOTE const isButtonDisabled = isLoading || !isBalanceEnough || !isValidQuote let buttonProperties if (!isBalanceEnough && isValidQuote && isValidInput) { buttonProperties = { label: t('insufficientBalance'), onClick: null, } } else if (isLoading) { buttonProperties = { label: (