14.05.2026 rip

This commit is contained in:
2026-05-14 23:23:20 +03:00
parent 26a7315ea1
commit 0d114e12c2
6 changed files with 271 additions and 8 deletions

View File

@@ -1,11 +1,12 @@
import { useState, useEffect } from 'react'
import { PrimaryButton } from '@shared/ui'
import { useWalletBalance, useWalletAddresses, useTokensList, useRelayQuote, useExecuteRelaySwap, type Chain } from '@features/wallet'
import { useWalletBalance, useWalletAddresses, useTokensList, useRelayQuote, useExecuteRelaySwap, useSignSwap, type Chain, type RelaySwapResponse } from '@features/wallet'
import { useDebounce } from '@shared/lib/hooks/useDebounce'
import { TOKENS_LIST, buildTokensFromBalance, useSwapForm } from '../model/useSwapForm'
import { SwapCard } from './SwapCard'
import { SwapDirectionButton } from './SwapDirectionButton'
import { SwapInfoPanel } from './SwapInfoPanel'
import { SwapConfirmModal } from './SwapConfirmModal'
import styles from './SwapForm.module.css'
@@ -27,6 +28,7 @@ export function SwapForm() {
} = useSwapForm()
const [fromNetwork, setFromNetwork] = useState('ETH')
const [modalData, setModalData] = useState<RelaySwapResponse | null>(null)
const { data: walletData } = useWalletBalance(fromNetwork as Chain)
const tokenOptions = walletData ? buildTokensFromBalance(walletData) : TOKENS_LIST
@@ -62,6 +64,7 @@ export function SwapForm() {
const { data: quoteData } = useRelayQuote(quotePayload)
const { mutate: executeSwap, isPending: isSwapping } = useExecuteRelaySwap()
const { mutate: signSwap } = useSignSwap()
const displayToAmount = quoteData?.details.currencyOut.amountFormatted ?? '0'
const displayToUsd = quoteData?.details.currencyOut.amountUsd
@@ -69,7 +72,9 @@ export function SwapForm() {
function handleSwap() {
if (!quotePayload) return
executeSwap(quotePayload)
executeSwap(quotePayload, {
onSuccess: (data) => setModalData(data),
})
}
return (
@@ -101,6 +106,18 @@ export function SwapForm() {
<SwapInfoPanel gasFee={gasFee} />
<PrimaryButton onClick={handleSwap} disabled={!quotePayload || isSwapping} />
{modalData && (
<SwapConfirmModal
data={modalData}
onClose={() => setModalData(null)}
onConfirm={() => {
const txData = modalData.steps[0]?.items[0]?.data
if (txData) signSwap({ chain: fromNetwork as Chain, txData })
setModalData(null)
}}
/>
)}
</div>
)
}