"use client";
import { useMemo } from "react";
import type { Chain } from "../../../../chains/types.js";
import type { ThirdwebClient } from "../../../../client/client.js";
import { NATIVE_TOKEN_ADDRESS } from "../../../../constants/addresses.js";
import { iconSize } from "../../../core/design-system/index.js";
import { useChainMetadata } from "../../../core/hooks/others/useChainQuery.js";
import { genericTokenIcon } from "../../../core/utils/walletIcon.js";
import { CoinsIcon } from "../ConnectWallet/icons/CoinsIcon.js";
import {
isNativeToken,
type NativeToken,
} from "../ConnectWallet/screens/nativeToken.js";
import { Container } from "./basic.js";
import { Img } from "./Img.js";
/**
* @internal
*/
export function TokenIcon(props: {
token:
| {
address: string;
icon?: string;
}
| NativeToken;
chain: Chain;
size: keyof typeof iconSize;
client: ThirdwebClient;
}) {
const chainMeta = useChainMetadata(props.chain).data;
const tokenImage = useMemo(() => {
if (
isNativeToken(props.token) ||
props.token.address === NATIVE_TOKEN_ADDRESS
) {
if (chainMeta?.nativeCurrency.symbol === "ETH") {
return "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/ethereum/512.png"; // ETH icon
}
return chainMeta?.icon?.url;
}
return props.token.icon;
}, [props.token, chainMeta?.icon?.url, chainMeta?.nativeCurrency.symbol]);
return tokenImage ? (
) : (
);
}