import { formatFiatAmount } from '@/internal/utils/formatFiatAmount';
import { truncateDecimalPlaces } from '@/internal/utils/truncateDecimalPlaces';
import { cn, text } from '@/styles/theme';
import { TokenImage } from '@/token/components/TokenImage';
import { useMemo } from 'react';
import { formatUnits } from 'viem';
import type { TokenBalanceProps } from '../types';
export function TokenBalance({
token,
onClick,
onActionPress,
actionText = 'Max',
classNames,
'aria-label': ariaLabel,
...contentProps
}: TokenBalanceProps) {
if (onClick) {
return (
{onActionPress && (
)}
);
}
return (
);
}
function TokenBalanceContent({
token,
subtitle,
showImage = true,
onActionPress,
tokenSize = 40,
classNames,
}: TokenBalanceProps) {
const formattedFiatValue = useMemo(
() =>
formatFiatAmount({
amount: token.fiatBalance,
currency: 'USD',
}),
[token.fiatBalance],
);
const formattedCryptoValue = useMemo(
() =>
truncateDecimalPlaces(
formatUnits(BigInt(token.cryptoBalance), token.decimals),
3,
),
[token.cryptoBalance, token.decimals],
);
return (
{showImage && }
{token.name?.trim()}
{`${formattedCryptoValue} ${token.symbol} ${subtitle ?? ''}`}
{!onActionPress && (
{formattedFiatValue}
)}
);
}
function ActionButton({
actionText,
onActionPress,
className,
}: Pick & {
className?: string;
}) {
return (
);
}