diff --git a/src/widgets/pools/model/meta.ts b/src/widgets/pools/model/meta.ts index bf4c332..4464005 100644 --- a/src/widgets/pools/model/meta.ts +++ b/src/widgets/pools/model/meta.ts @@ -1,9 +1,16 @@ import { COIN_ICONS } from '@shared/assets/coins' +/** Wrapper-токены → их нативные аналоги (WETH→ETH, WBTC→BTC). */ +const NATIVE_SYMBOL: Record = { WETH: 'ETH', WBTC: 'BTC' } + +/** Отображаемый символ: wrapper-токены показываем как нативные (WETH→ETH, WBTC→BTC). */ +export function displaySymbol(symbol: string): string { + return NATIVE_SYMBOL[symbol] ?? symbol +} + /** Иконка по символу токена: WETH→ETH, WBTC→BTC, иначе по тикеру (может вернуть undefined). */ export function coinIcon(symbol: string): string | undefined { - const map: Record = { WETH: 'ETH', WBTC: 'BTC' } - return COIN_ICONS[map[symbol] ?? symbol] + return COIN_ICONS[displaySymbol(symbol)] } /** feeTier (сотые доли процента) → человекочитаемые проценты: 3000 → «0.3%». */ diff --git a/src/widgets/pools/ui/LpDepositCard.tsx b/src/widgets/pools/ui/LpDepositCard.tsx index b854216..6ebb9ff 100644 --- a/src/widgets/pools/ui/LpDepositCard.tsx +++ b/src/widgets/pools/ui/LpDepositCard.tsx @@ -2,7 +2,7 @@ import { PrimaryButton } from '@shared/ui' import { truncateDecimals } from '@shared/lib/utils/truncateDecimals' import type { Pool, LpQuote } from '@features/pools' import { useWalletBalance, type WalletBalanceData } from '@features/wallet' -import { formatFeeTier } from '../model/meta' +import { formatFeeTier, displaySymbol } from '../model/meta' import styles from './LpDepositCard.module.css' interface Props { @@ -26,10 +26,11 @@ interface Props { const DASH = '—' const decimalRe = /^(\d+\.?\d*|\.?\d*)$/ -// Баланс ноги по символу: нативный токен (chain === символ) берём из native, остальное — из tokens. +// Баланс ноги по символу. Wrapper-токен нативной монеты (WETH на ETH) показываем как баланс +// нативной монеты; остальные токены берём из tokens по исходному символу. function legBalance(wb: WalletBalanceData | undefined, symbol: string): string { if (!wb) return '0' - if (symbol === wb.chain) return wb.native.formatted + if (displaySymbol(symbol) === wb.chain) return wb.native.formatted return wb.tokens[symbol]?.formatted ?? '0' } @@ -141,7 +142,7 @@ export function LpDepositCard({
- {pool.symbol0}/{pool.symbol1} + {displaySymbol(pool.symbol0)}/{displaySymbol(pool.symbol1)} {formatFeeTier(pool.feeTier)}
@@ -149,20 +150,20 @@ export function LpDepositCard({ Суммы взноса
- Диапазон цен ({pool.symbol1} за {pool.symbol0}) + Диапазон цен ({displaySymbol(pool.symbol1)} за {displaySymbol(pool.symbol0)})
@@ -184,11 +185,11 @@ export function LpDepositCard({
- Взнос {pool.symbol0} + Взнос {displaySymbol(pool.symbol0)} {amount0Out}
- Взнос {pool.symbol1} + Взнос {displaySymbol(pool.symbol1)} {amount1Out}
@@ -203,7 +204,7 @@ export function LpDepositCard({ {insufficient && (

- Недостаточно средств{shortLeg ? `: не хватает ${shortLeg.symbol}` : ''}. Пополните баланс. + Недостаточно средств{shortLeg ? `: не хватает ${displaySymbol(shortLeg.symbol)}` : ''}. Пополните баланс.

)} diff --git a/src/widgets/pools/ui/LpPositionsPanel.tsx b/src/widgets/pools/ui/LpPositionsPanel.tsx index 646c84b..25a526a 100644 --- a/src/widgets/pools/ui/LpPositionsPanel.tsx +++ b/src/widgets/pools/ui/LpPositionsPanel.tsx @@ -1,7 +1,7 @@ import { Spinner } from '@shared/ui' import { truncateDecimals } from '@shared/lib/utils/truncateDecimals' import type { LpPosition } from '@features/pools' -import { formatFeeTier } from '../model/meta' +import { formatFeeTier, displaySymbol } from '../model/meta' import styles from './LpPositionsPanel.module.css' interface Props { @@ -43,7 +43,7 @@ export function LpPositionsPanel({ positions, onRemove, removePending, isLoading
- {p.symbol0}/{p.symbol1} + {displaySymbol(p.symbol0)}/{displaySymbol(p.symbol1)} {formatFeeTier(p.feeTier)} @@ -59,17 +59,17 @@ export function LpPositionsPanel({ positions, onRemove, removePending, isLoading
- {p.symbol0} + {displaySymbol(p.symbol0)} {truncateDecimals(p.currentAmount0Human, 8)}
- {p.symbol1} + {displaySymbol(p.symbol1)} {truncateDecimals(p.currentAmount1Human, 8)}
Комиссии к выводу - {truncateDecimals(p.feesOwed0Human, 8)} {p.symbol0} · {truncateDecimals(p.feesOwed1Human, 8)} {p.symbol1} + {truncateDecimals(p.feesOwed0Human, 8)} {displaySymbol(p.symbol0)} · {truncateDecimals(p.feesOwed1Human, 8)} {displaySymbol(p.symbol1)}
diff --git a/src/widgets/pools/ui/LpRemoveModal.tsx b/src/widgets/pools/ui/LpRemoveModal.tsx index 1e67424..0ff7e79 100644 --- a/src/widgets/pools/ui/LpRemoveModal.tsx +++ b/src/widgets/pools/ui/LpRemoveModal.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import type { LpPosition } from '@features/pools' -import { formatFeeTier } from '../model/meta' +import { formatFeeTier, displaySymbol } from '../model/meta' import styles from './LpRemoveModal.module.css' interface Props { @@ -36,7 +36,7 @@ export function LpRemoveModal({ position, pending, onConfirm, onClose }: Props)
Позиция - {position.symbol0}/{position.symbol1} + {displaySymbol(position.symbol0)}/{displaySymbol(position.symbol1)} {formatFeeTier(position.feeTier)} · #{position.tokenId} diff --git a/src/widgets/pools/ui/PoolsTable.tsx b/src/widgets/pools/ui/PoolsTable.tsx index 6c72942..e3ff055 100644 --- a/src/widgets/pools/ui/PoolsTable.tsx +++ b/src/widgets/pools/ui/PoolsTable.tsx @@ -1,7 +1,7 @@ import { useMemo, useState } from 'react' import { Spinner } from '@shared/ui' import type { Pool } from '@features/pools' -import { formatFeeTier } from '../model/meta' +import { formatFeeTier, displaySymbol } from '../model/meta' import styles from './PoolsTable.module.css' interface Props { @@ -35,7 +35,7 @@ function formatApr(value: number | null): string { } function pairName(p: Pool): string { - return `${p.symbol0}/${p.symbol1}` + return `${displaySymbol(p.symbol0)}/${displaySymbol(p.symbol1)}` } // Числовые поля могут быть null — null уходит вниз независимо от направления. @@ -140,7 +140,7 @@ export function PoolsTable({ pools, selected, onSelect, loading, error }: Props) > - {p.symbol0}/{p.symbol1} + {displaySymbol(p.symbol0)}/{displaySymbol(p.symbol1)} diff --git a/src/widgets/pools/ui/PoolsWidget.tsx b/src/widgets/pools/ui/PoolsWidget.tsx index 889bdda..a85a59a 100644 --- a/src/widgets/pools/ui/PoolsWidget.tsx +++ b/src/widgets/pools/ui/PoolsWidget.tsx @@ -11,6 +11,7 @@ import { type LpDepositInput, type LpPosition, } from '@features/pools' +import { displaySymbol } from '../model/meta' import { PoolsTable } from './PoolsTable' import { LpDepositCard } from './LpDepositCard' import { LpPositionsPanel } from './LpPositionsPanel' @@ -103,7 +104,7 @@ export function PoolsWidget() { setToast({ status: 'info', message: 'Внесение в пул может занять несколько минут…' }) addM.mutate(input, { onSuccess: () => { - setToast({ status: 'success', message: `Депозит в пул ${pool.symbol0}/${pool.symbol1} выполнен` }) + setToast({ status: 'success', message: `Депозит в пул ${displaySymbol(pool.symbol0)}/${displaySymbol(pool.symbol1)} выполнен` }) setAmount0('') setAmount1('') },