import { ContentCopyRounded, MoreHoriz, OpenInNewRounded, TurnedIn, } from '@mui/icons-material'; import { ListItemAvatar, ListItemText, MenuItem } from '@mui/material'; import { useId, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { AccountAvatar } from '../../components/Avatar/AccountAvatar.js'; import { ListItem } from '../../components/ListItem/ListItem.js'; import { ListItemButton } from '../../components/ListItem/ListItemButton.js'; import { Menu } from '../../components/Menu.js'; import type { Account } from '../../hooks/useAccount.js'; import { useAccount } from '../../hooks/useAccount.js'; import { useExplorer } from '../../hooks/useExplorer.js'; import { useHeader } from '../../hooks/useHeader.js'; import { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'; import { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'; import { useFieldActions } from '../../stores/form/useFieldActions.js'; import { useSendToWalletActions } from '../../stores/settings/useSendToWalletStore.js'; import { shortenAddress } from '../../utils/wallet.js'; import { EmptyListIndicator } from './EmptyListIndicator.js'; import { ListContainer, OptionsMenuButton, SendToWalletPageContainer, } from './SendToWalletPage.style.js'; export const ConnectedWalletsPage = () => { const { t } = useTranslation(); const [selectedAccount, setSelectedAccount] = useState(); const { accounts } = useAccount(); const { setSelectedBookmark } = useBookmarkActions(); const { requiredToChainType } = useToAddressRequirements(); const navigate = useNavigate(); const { setFieldValue } = useFieldActions(); const { setSendToWallet } = useSendToWalletActions(); const [moreMenuAnchorEl, setMenuAnchorEl] = useState(); const moreMenuId = useId(); const open = Boolean(moreMenuAnchorEl); const { getAddressLink } = useExplorer(); useHeader(t('sendToWallet.connectedWallets')); const handleWalletSelected = (account: Account) => { setFieldValue('toAddress', account.address!, { isTouched: true, }); setSelectedBookmark({ name: account.connector?.name, address: account.address!, chainType: account.chainType!, isConnectedAccount: true, }); setSendToWallet(true); navigate(`../../`, { relative: 'path', replace: true, }); }; const closeMenu = () => { setMenuAnchorEl(null); }; const handleMenuOpen = (el: HTMLElement, connectedWallet: Account) => { setMenuAnchorEl(el); setSelectedAccount(connectedWallet); }; const handleCopyAddress = () => { if (selectedAccount?.address) { navigator.clipboard.writeText(selectedAccount.address); } closeMenu(); }; const handleViewOnExplorer = () => { if (selectedAccount?.chainId) { if (selectedAccount.address) { window.open( getAddressLink(selectedAccount.address, selectedAccount.chainId), '_blank', ); } } closeMenu(); }; return ( {accounts.map((account) => { const walletAddress = shortenAddress(account.address); return ( handleWalletSelected(account)} disabled={ requiredToChainType && requiredToChainType !== account.chainType } > handleMenuOpen(e.target as HTMLElement, account) } sx={{ opacity: requiredToChainType && requiredToChainType !== account.chainType ? 0.5 : 1, }} > ); })} {!accounts.length && ( }> {t('sendToWallet.noConnectedWallets')} )} {t('button.copyAddress')} {t('button.viewOnExplorer')} ); };