"use client"; import { Address, formatEther } from "viem"; import { useDisplayUsdMode } from "~~/hooks/scaffold-eth/useDisplayUsdMode"; import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; import { useWatchBalance } from "~~/hooks/scaffold-eth/useWatchBalance"; import { useGlobalState } from "~~/services/store/store"; type BalanceProps = { address?: Address; className?: string; usdMode?: boolean; }; /** * Display (ETH & USD) balance of an ETH address. */ export const Balance = ({ address, className = "", usdMode }: BalanceProps) => { const { targetNetwork } = useTargetNetwork(); const nativeCurrencyPrice = useGlobalState(state => state.nativeCurrency.price); const isNativeCurrencyPriceFetching = useGlobalState(state => state.nativeCurrency.isFetching); const { data: balance, isError, isLoading, } = useWatchBalance({ address, }); const { displayUsdMode, toggleDisplayUsdMode } = useDisplayUsdMode({ defaultUsdMode: usdMode }); if (!address || isLoading || balance === null || (isNativeCurrencyPriceFetching && nativeCurrencyPrice === 0)) { return (
); } if (isError) { return (
Error
); } const formattedBalance = balance ? Number(formatEther(balance.value)) : 0; return ( ); };