add redirects
This commit is contained in:
66
src/widgets/bridge-form/ui/BridgeConfirmModal.tsx
Normal file
66
src/widgets/bridge-form/ui/BridgeConfirmModal.tsx
Normal file
@@ -0,0 +1,66 @@
|
||||
import type { JumperQuote } from '@features/wallet'
|
||||
import { fromBaseUnits } from '@shared/lib/utils/baseUnits'
|
||||
import { truncateDecimals } from '@shared/lib/utils/truncateDecimals'
|
||||
import styles from './BridgeConfirmModal.module.css'
|
||||
|
||||
interface Props {
|
||||
quote: JumperQuote
|
||||
fromAmountHuman: string
|
||||
isExecuting?: boolean
|
||||
onConfirm: () => void
|
||||
onClose: () => void
|
||||
}
|
||||
|
||||
export function BridgeConfirmModal({ quote, fromAmountHuman, isExecuting, onConfirm, onClose }: Props) {
|
||||
const { action, estimate, toolDetails } = quote
|
||||
const toSymbol = action.toToken.symbol
|
||||
const fromSymbol = action.fromToken.symbol
|
||||
|
||||
const toAmount = truncateDecimals(fromBaseUnits(estimate.toAmount, action.toToken.decimals), 8)
|
||||
const toMin = truncateDecimals(fromBaseUnits(estimate.toAmountMin, action.toToken.decimals), 8)
|
||||
|
||||
const feesUsd = (estimate.feeCosts ?? [])
|
||||
.reduce((sum, f) => sum + (parseFloat(f.amountUSD) || 0), 0)
|
||||
.toFixed(2)
|
||||
|
||||
return (
|
||||
<div className={styles.overlay} onClick={onClose}>
|
||||
<div className={styles.card} onClick={e => e.stopPropagation()}>
|
||||
<div className={styles.header}>
|
||||
<span className={styles.title}>Подтвердить бридж</span>
|
||||
<button className={styles.closeBtn} onClick={onClose}>×</button>
|
||||
</div>
|
||||
|
||||
<div className={styles.flow}>
|
||||
<div className={styles.token}>
|
||||
<span className={styles.tokenLabel}>Отдаёте</span>
|
||||
<span className={styles.tokenAmount}>{fromAmountHuman} {fromSymbol}</span>
|
||||
</div>
|
||||
|
||||
<div className={styles.arrow}>↓</div>
|
||||
|
||||
<div className={styles.token}>
|
||||
<span className={styles.tokenLabel}>Получаете</span>
|
||||
<span className={styles.tokenAmount}>{toAmount} {toSymbol}</span>
|
||||
<span className={styles.minOut}>Минимум: {toMin} {toSymbol}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.details}>
|
||||
<div className={styles.row}>
|
||||
<span className={styles.rowLabel}>Комиссия</span>
|
||||
<span className={styles.rowValue}>≈${feesUsd}</span>
|
||||
</div>
|
||||
<div className={styles.row}>
|
||||
<span className={styles.rowLabel}>Мост</span>
|
||||
<span className={styles.rowValue}>{toolDetails.name}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button className={styles.confirmBtn} onClick={onConfirm} disabled={isExecuting}>
|
||||
{isExecuting ? 'Обработка...' : 'Подтвердить бридж'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user