'use client'; import { useCallback, useMemo } from 'react'; import { Spinner } from '../../internal/components/Spinner'; import { checkmarkSvg } from '../../internal/svg/checkmarkSvg'; import { CloseSvg } from '../../internal/svg/closeSvg'; import { cn, pressable, text } from '../../styles/theme'; import { ConnectWallet } from '../../wallet'; import { useBuyContext } from './BuyProvider'; export function BuyButton() { const { address, disabled, setIsDropdownOpen, isDropdownOpen, from, fromETH, fromUSDC, to, lifecycleStatus: { statusName }, updateLifecycleStatus, } = useBuyContext(); const isLoading = to?.loading || from?.loading || fromETH?.loading || fromUSDC?.loading || statusName === 'transactionPending' || statusName === 'transactionApproved'; const isMissingRequiredField = !to?.amount || !to?.token; const isDisabled = isLoading || disabled; const handleSubmit = useCallback(() => { if (isMissingRequiredField) { updateLifecycleStatus({ statusName: 'error', statusData: { code: 'TmBPc05', error: 'Missing required fields', message: 'Complete the field to continue', }, }); return; } if (isDropdownOpen) { setIsDropdownOpen(false); return; } if (!isDropdownOpen) { setIsDropdownOpen(true); } }, [ isMissingRequiredField, setIsDropdownOpen, isDropdownOpen, updateLifecycleStatus, ]); const buttonContent = useMemo(() => { if (statusName === 'success') { return checkmarkSvg; } if (isDropdownOpen) { return ; } return 'Buy'; }, [statusName, isDropdownOpen]); if (!isDisabled && !address) { return ( ); } return ( ); }