import type { Token } from '../model/useSwapForm' import { truncateDecimals } from '@shared/lib/utils/truncateDecimals' import { TokenSelect } from './TokenSelect' import styles from './SwapCard.module.css' interface Props { mode: 'from' | 'to' token: Token tokenOptions: Token[] amount: string usd?: string onTokenChange: (token: Token) => void onAmountChange?: (v: string) => void onSetPercent?: (p: number) => void selectedNetwork?: string onNetworkChange?: (network: string) => void hideNetworkSelect?: boolean } const NETWORKS = ['ETH', 'BSC', 'TRX', 'SOL'] const PERCENTS = [25, 50, 100] export function SwapCard({ mode, token, tokenOptions, amount, usd, onTokenChange, onAmountChange, onSetPercent, selectedNetwork, onNetworkChange, hideNetworkSelect, }: Props) { const [intPart, decPart] = amount.split('.') const pills = onSetPercent && ( <> {PERCENTS.map(p => ( ))} ) return (
{/* Пиллы над карточкой — только мобайл */} {mode === 'from' && pills && (
{pills}
)}
{mode === 'from' && !hideNetworkSelect && (
{NETWORKS.map(n => ( ))}
)}
{/* Пиллы внутри карточки — только десктоп */} {mode === 'from' && pills && (
{pills}
)} {/* Селект в топ-строке — только мобайл */}
{mode === 'from' ? ( onAmountChange?.(e.target.value)} placeholder="0" /> ) : (
{intPart} {decPart && .{decPart}}
)} {/* Селект справа от инпута — только десктоп */}
{usd && ( ≈ ${usd} )} {truncateDecimals(token.balance, 8)} {mode === 'from' && onSetPercent && ( )}
) }