import { infoSvg } from '@/internal/svg/infoSvg'; import { multiplyFloats } from '@/internal/utils/multiplyFloats'; import { useNFTContext } from '@/nft/components/NFTProvider'; import { cn, text } from '@/styles/theme'; import { formatAmount } from '@/token/utils/formatAmount'; import { type ReactNode, useCallback, useMemo, useState } from 'react'; type NFTTotalCostProps = { className?: string; label?: ReactNode; }; export function NFTTotalCost({ className, label = 'Total cost', }: NFTTotalCostProps) { const [isOverlayVisible, setIsOverlayVisible] = useState(false); const { price, mintFee, quantity } = useNFTContext(); const toggleOverlay = useCallback(() => { setIsOverlayVisible((prev) => !prev); }, []); const showOverlay = useCallback(() => { setIsOverlayVisible(true); }, []); const hideOverlay = useCallback(() => { setIsOverlayVisible(false); }, []); const overlay = useMemo(() => { // only show overlay if mintFee if ( price?.amount === undefined || price?.amountUSD === undefined || mintFee?.amount === undefined || mintFee.amountUSD === undefined ) { return null; } return (
NFT cost
$ {formatAmount( `${multiplyFloats(Number(price.amountUSD), quantity)}`, { minimumFractionDigits: 2, maximumFractionDigits: 2, }, )}
Mint fee
$ {formatAmount( `${multiplyFloats(Number(mintFee.amountUSD), quantity)}`, { minimumFractionDigits: 2, maximumFractionDigits: 2, }, )}
); }, [mintFee, price, quantity]); if ( !price?.amount || !price?.currency || !price?.amountUSD || !mintFee?.amount || !mintFee.amountUSD ) { return null; } return (
{label}
$ {formatAmount( `${multiplyFloats(Number(price.amountUSD), quantity)}`, { minimumFractionDigits: 2, maximumFractionDigits: 2, }, )}
{overlay && ( )}
{isOverlayVisible && overlay}
); }