import { useShuttle } from '@delphi-labs/shuttle-react'
import BigNumber from 'bignumber.js'
import classNames from 'classnames'
import { resolvePrimaryDomainByAddress } from 'ibc-domains-sdk'
import { useCallback, useEffect, useState } from 'react'
import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import useClipboard from 'react-use-clipboard'
import Button from 'components/common/Button'
import { CircularProgress } from 'components/common/CircularProgress'
import { FormattedNumber } from 'components/common/FormattedNumber'
import { Check, Copy, ExternalLink, Wallet } from 'components/common/Icons'
import Overlay from 'components/common/Overlay'
import Text from 'components/common/Text'
import RecentTransactions from 'components/Wallet/RecentTransactions'
import WalletSelect from 'components/Wallet/WalletSelect'
import chains from 'configs/chains'
import { BN_ZERO } from 'constants/math'
import useBaseAsset from 'hooks/assets/useBasetAsset'
import useMarketEnabledAssets from 'hooks/assets/useMarketEnabledAssets'
import useChainConfig from 'hooks/useChainConfig'
import useCurrentWallet from 'hooks/useCurrentWallet'
import useICNSDomain from 'hooks/useICNSDomain'
import useToggle from 'hooks/useToggle'
import useWalletBalances from 'hooks/useWalletBalances'
import useStore from 'store'
import { NETWORK } from 'types/enums/network'
import { ChainInfoID } from 'types/enums/wallet'
import { truncate } from 'utils/formatters'
import { getPage, getRoute } from 'utils/route'
export default function WalletConnectedButton() {
// ---------------
// EXTERNAL HOOKS
// ---------------
const marketAssets = useMarketEnabledAssets()
const currentWallet = useCurrentWallet()
const { disconnectWallet } = useShuttle()
const address = currentWallet?.account.address
const userDomain = useStore((s) => s.userDomain)
const focusComponent = useStore((s) => s.focusComponent)
const network = useStore((s) => s.client?.connectedWallet.network)
const chainConfig = useChainConfig()
const baseAsset = useBaseAsset()
const { data: walletBalances, isLoading } = useWalletBalances(address)
const { data: icnsData, isLoading: isLoadingICNS } = useICNSDomain(address)
const navigate = useNavigate()
const { pathname } = useLocation()
const [searchParams] = useSearchParams()
// ---------------
// LOCAL STATE
// ---------------
const [showDetails, setShowDetails] = useToggle()
const [walletAmount, setWalletAmount] = useState(BN_ZERO)
const [isCopied, setCopied] = useClipboard(address || '', {
successDuration: 1000 * 5,
})
// ---------------
// VARIABLES
// ---------------
const explorerName = network && chains[network.chainId as ChainInfoID].explorerName
const viewOnFinder = useCallback(() => {
const explorerUrl = network && chains[network.chainId as ChainInfoID].endpoints.explorer
window.open(`${explorerUrl}/account/${address}`, '_blank')
}, [network, address])
const onDisconnectWallet = () => {
if (currentWallet) disconnectWallet(currentWallet)
useStore.setState({
client: undefined,
address: undefined,
userDomain: undefined,
balances: [],
focusComponent: null,
})
if (focusComponent) {
useStore.setState({
focusComponent: {
component: