diff --git a/packages/thirdweb/src/react/core/utils/wallet.ts b/packages/thirdweb/src/react/core/utils/wallet.ts index 5025bd1478c..0c96f7937ca 100644 --- a/packages/thirdweb/src/react/core/utils/wallet.ts +++ b/packages/thirdweb/src/react/core/utils/wallet.ts @@ -77,7 +77,8 @@ export function useEnsAvatar(options: { } /** - * @internal + * @internal This hook is only being used in our react-native package + * It can be removed once we migrate the RN UI code to our headless components (AccountProvider, AccountName etc.) */ export function useConnectedWalletDetails( client: ThirdwebClient, diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx index 5cc3f561e13..31dcf7aa530 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/ConnectButton.tsx @@ -23,6 +23,7 @@ import { Spinner } from "../components/Spinner.js"; import { Container } from "../components/basic.js"; import { Button } from "../components/buttons.js"; import { fadeInAnimation } from "../design-system/animations.js"; +import { AccountProvider } from "../prebuilt/Account/provider.js"; import { ConnectedWalletDetails } from "./Details.js"; import ConnectModal from "./Modal/ConnectModal.js"; import { LockIcon } from "./icons/LockIcon.js"; @@ -532,37 +533,39 @@ function ConnectButtonInner( } return ( - { - // logout on explicit disconnect! - if (siweAuth.requiresAuth) { - siweAuth.doLogout(); - } - props.onDisconnect?.(info); - }} - chains={props?.chains || []} - chain={props.chain} - switchButton={props.switchButton} - client={props.client} - connectLocale={locale} - connectOptions={{ - accountAbstraction: props.accountAbstraction, - appMetadata: props.appMetadata, - chain: props.chain, - chains: props.chains, - connectModal: props.connectModal, - recommendedWallets: props.recommendedWallets, - showAllWallets: props.showAllWallets, - walletConnect: props.walletConnect, - wallets: props.wallets, - hiddenWallets: props.detailsModal?.hiddenWallets, - }} - /> + + { + // logout on explicit disconnect! + if (siweAuth.requiresAuth) { + siweAuth.doLogout(); + } + props.onDisconnect?.(info); + }} + chains={props?.chains || []} + chain={props.chain} + switchButton={props.switchButton} + client={props.client} + connectLocale={locale} + connectOptions={{ + accountAbstraction: props.accountAbstraction, + appMetadata: props.appMetadata, + chain: props.chain, + chains: props.chains, + connectModal: props.connectModal, + recommendedWallets: props.recommendedWallets, + showAllWallets: props.showAllWallets, + walletConnect: props.walletConnect, + wallets: props.wallets, + hiddenWallets: props.detailsModal?.hiddenWallets, + }} + /> + ); } diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx index e3e1887afda..e2bf3292aa9 100644 --- a/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx +++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/Details.tsx @@ -15,6 +15,7 @@ import type { Chain } from "../../../../chains/types.js"; import type { ThirdwebClient } from "../../../../client/client.js"; import { getContract } from "../../../../contract/contract.js"; import { getLastAuthProvider } from "../../../../react/core/utils/storage.js"; +import { shortenAddress } from "../../../../utils/address.js"; import { isContractDeployed } from "../../../../utils/bytecode/is-contract-deployed.js"; import { formatNumber } from "../../../../utils/formatNumber.js"; import { webLocalStorage } from "../../../../utils/storage/webStorage.js"; @@ -67,10 +68,7 @@ import type { SupportedTokens, } from "../../../core/utils/defaultTokens.js"; import { hasSmartAccount } from "../../../core/utils/isSmartWallet.js"; -import { - useConnectedWalletDetails, - useWalletInfo, -} from "../../../core/utils/wallet.js"; +import { useWalletInfo } from "../../../core/utils/wallet.js"; import { WalletUIStatesProvider } from "../../providers/wallet-ui-states-provider.js"; import { ChainIcon } from "../components/ChainIcon.js"; import { CopyIcon } from "../components/CopyIcon.js"; @@ -86,8 +84,13 @@ import { Button, IconButton } from "../components/buttons.js"; import { Link, Text } from "../components/text.js"; import { fadeInAnimation } from "../design-system/animations.js"; import { StyledButton } from "../design-system/elements.js"; +import { AccountAddress } from "../prebuilt/Account/address.js"; +import { AccountAvatar } from "../prebuilt/Account/avatar.js"; +import { AccountBalance } from "../prebuilt/Account/balance.js"; +import { AccountBlobbie } from "../prebuilt/Account/blobbie.js"; +import { AccountName } from "../prebuilt/Account/name.js"; +import { AccountProvider } from "../prebuilt/Account/provider.js"; import type { LocaleId } from "../types.js"; -import { Blobbie } from "./Blobbie.js"; import { MenuButton, MenuLink } from "./MenuButton.js"; import { ScreenSetupContext, useSetupScreen } from "./Modal/screen.js"; import { @@ -140,18 +143,10 @@ export const ConnectedWalletDetails: React.FC<{ connectOptions: DetailsModalConnectOptions | undefined; }> = (props) => { const { connectLocale: locale, client } = props; - const setRootEl = useContext(SetRootElementContext); const activeAccount = useActiveAccount(); const walletChain = useActiveWalletChain(); - const { pfp, name, balanceQuery } = useConnectedWalletDetails( - client, - walletChain, - activeAccount, - props.detailsButton?.displayBalanceToken, - ); - function closeModal() { setRootEl(null); } @@ -199,8 +194,6 @@ export const ConnectedWalletDetails: React.FC<{ ); } - const avatarSrc = props.detailsButton?.connectedAccountAvatarUrl || pfp; - const combinedClassName = `${TW_CONNECTED_WALLET} ${props.detailsButton?.className || ""}`; return ( @@ -219,10 +212,10 @@ export const ConnectedWalletDetails: React.FC<{ height: "35px", }} > - {avatarSrc ? ( + {props.detailsButton?.connectedAccountAvatarUrl ? ( ) : ( - activeAccount && + activeAccount && ( + } + fallbackComponent={} + queryOptions={{ + refetchOnWindowFocus: false, + refetchOnMount: false, + }} + /> + ) )} {/* Address */} - - {props.detailsButton?.connectedAccountName ?? name} - - - {/* Balance */} - {balanceQuery.data ? ( + {props.detailsButton?.connectedAccountName ? ( - {formatBalanceOnButton(Number(balanceQuery.data.displayValue))}{" "} - {balanceQuery.data.symbol} + {props.detailsButton.connectedAccountName} ) : ( - + + } + fallbackComponent={} + /> + )} + + + } + fallbackComponent={} + formatFn={formatBalanceOnButton} + tokenAddress={ + props.detailsButton?.displayBalanceToken?.[ + Number(walletChain?.id) + ] + } + /> + ); @@ -295,12 +315,6 @@ function DetailsModal(props: { const { client, locale } = props; const walletChain = useActiveWalletChain(); const activeAccount = useActiveAccount(); - const { pfp, name, balanceQuery } = useConnectedWalletDetails( - client, - walletChain, - activeAccount, - props.displayBalanceToken, - ); const theme = parseTheme(props.theme); const activeWallet = useActiveWallet(); @@ -363,12 +377,15 @@ function DetailsModal(props: { {chainNameQuery.name || `Unknown chain #${walletChain?.id}`} - {balanceQuery.data ? ( - formatNumber(Number(balanceQuery.data.displayValue), 9) - ) : ( - - )}{" "} - {balanceQuery.data?.symbol} + } + loadingComponent={} + formatFn={(num: number) => formatNumber(num, 9)} + chain={walletChain} + tokenAddress={ + props.displayBalanceToken?.[Number(walletChain?.id)] + } + /> )} @@ -384,8 +401,6 @@ function DetailsModal(props: { ); - const avatarSrc = props.detailsModal?.connectedAccountAvatarUrl ?? pfp; - const { hideSendFunds, hideReceiveFunds, hideBuyFunds } = props.detailsModal || {}; @@ -407,9 +422,9 @@ function DetailsModal(props: { overflow: "hidden", }} > - {avatarSrc ? ( + {props.detailsModal?.connectedAccountAvatarUrl ? ( ) : ( activeAccount && ( - } + fallbackComponent={} /> ) )} @@ -496,9 +511,22 @@ function DetailsModal(props: { alignItems: "center", }} > - - {props.detailsModal?.connectedAccountName ?? name} - + {props.detailsModal?.connectedAccountName ? ( + + {props.detailsModal.connectedAccountName} + + ) : ( + + + } + fallbackComponent={ + + } + /> + + )} - {content} + + {content} +