import { Badge, Box, MenuItem } from '@biom3/react'; import { useTranslation } from 'react-i18next'; import { cloneElement, ReactElement, useState } from 'react'; import { EIP6963ProviderInfo, WalletProviderName } from '@imtbl/checkout-sdk'; import { RawImage } from '../../../components/RawImage/RawImage'; import { getProviderSlugFromRdns } from '../../../lib/provider'; import useIsSmallScreen from '../../../lib/hooks/useIsSmallScreen'; export interface WalletProps { loading?: boolean; recommended?: boolean; onWalletItemClick: () => void; providerInfo: EIP6963ProviderInfo; rc?: RC; } export function WalletItem< RC extends ReactElement | undefined = undefined, >({ rc = , loading = false, recommended = false, providerInfo, onWalletItemClick, }: WalletProps) { const { t } = useTranslation(); const { isSmallScreenMode } = useIsSmallScreen(); const [busy, setBusy] = useState(false); const providerSlug = getProviderSlugFromRdns(providerInfo.rdns); const isPassport = providerSlug === WalletProviderName.PASSPORT; const isPassportOrMetamask = isPassport || providerSlug === WalletProviderName.METAMASK; const offsetStyles = { marginLeft: '65px' }; return ( { if (loading) return; setBusy(true); // let the parent handle errors try { await onWalletItemClick(); } finally { setBusy(false); } }, })} testId={`wallet-list-${providerInfo.rdns}`} size="medium" emphasized sx={{ marginBottom: 'base.spacing.x1', position: 'relative', }} > {((recommended && isSmallScreenMode) && ( ))} {providerInfo.name} {(!busy && )} {(isPassportOrMetamask) && t(`wallets.${providerSlug}.description`)} {(((recommended || busy) && !isSmallScreenMode) && ( ))} ); }