add redirects
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { PrimaryButton } from '@shared/ui'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { useQueryClient } from '@tanstack/react-query'
|
||||
import { Notification, PrimaryButton } from '@shared/ui'
|
||||
import {
|
||||
useWalletBalance, useWalletAddresses, useTokensList,
|
||||
useRelayQuote, useExecuteRelaySwap, useSignSwap,
|
||||
useTrxSwapQuote, useFetchTrxQuote, useExecuteTrxSwap,
|
||||
type Chain, type RelaySwapResponse, type TrxSwapQuoteData,
|
||||
} from '@features/wallet'
|
||||
import { ROUTES } from '@shared/config/routes'
|
||||
import { useDebounce } from '@shared/lib/hooks/useDebounce'
|
||||
import { TOKENS_LIST, buildTokensFromBalance, useSwapForm } from '../model/useSwapForm'
|
||||
import { SwapCard } from './SwapCard'
|
||||
@@ -26,6 +29,9 @@ function nativeAddr(chain: string) {
|
||||
}
|
||||
|
||||
export function SwapForm() {
|
||||
const navigate = useNavigate()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const {
|
||||
fromAmount, fromUsd,
|
||||
fromToken, toToken,
|
||||
@@ -36,6 +42,7 @@ export function SwapForm() {
|
||||
const [fromNetwork, setFromNetwork] = useState('ETH')
|
||||
const [modalData, setModalData] = useState<RelaySwapResponse | null>(null)
|
||||
const [trxModalQuote, setTrxModalQuote] = useState<TrxSwapQuoteData | null>(null)
|
||||
const [errorMessage, setErrorMessage] = useState<string | null>(null)
|
||||
|
||||
const isTrxNetwork = fromNetwork === 'TRX'
|
||||
|
||||
@@ -75,7 +82,7 @@ export function SwapForm() {
|
||||
|
||||
const { data: quoteData } = useRelayQuote(quotePayload)
|
||||
const { mutate: executeSwap, isPending: isSwapping } = useExecuteRelaySwap()
|
||||
const { mutate: signSwap } = useSignSwap()
|
||||
const { mutate: signSwap, isPending: isSigning } = useSignSwap()
|
||||
|
||||
// ── TRX ─────────────────────────────────────────────────────────────────
|
||||
const trxQuotePayload = isTrxNetwork && parsedAmount > 0
|
||||
@@ -84,7 +91,9 @@ export function SwapForm() {
|
||||
|
||||
const { data: trxQuoteData } = useTrxSwapQuote(trxQuotePayload)
|
||||
const { mutate: fetchTrxQuote, isPending: isFetchingTrxQuote } = useFetchTrxQuote()
|
||||
const { mutate: executeTrxSwap } = useExecuteTrxSwap()
|
||||
const { mutate: executeTrxSwap, isPending: isExecutingTrxSwap } = useExecuteTrxSwap()
|
||||
|
||||
const isProcessing = isSigning || isExecutingTrxSwap
|
||||
|
||||
// ── Display values ───────────────────────────────────────────────────────
|
||||
const displayToAmount = isTrxNetwork
|
||||
@@ -153,7 +162,22 @@ export function SwapForm() {
|
||||
onClose={() => setModalData(null)}
|
||||
onConfirm={() => {
|
||||
const txData = modalData.steps[0]?.items[0]?.data
|
||||
if (txData) signSwap({ chain: fromNetwork as Chain, txData })
|
||||
if (txData) {
|
||||
setErrorMessage(null)
|
||||
signSwap(
|
||||
{ chain: fromNetwork as Chain, txData },
|
||||
{
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['wallet', 'balance', fromNetwork] })
|
||||
queryClient.invalidateQueries({ queryKey: ['wallet', 'portfolio'] })
|
||||
navigate(ROUTES.WALLET)
|
||||
},
|
||||
onError: (err) => {
|
||||
setErrorMessage(err instanceof Error ? err.message : 'Не удалось подписать транзакцию')
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
setModalData(null)
|
||||
}}
|
||||
/>
|
||||
@@ -167,11 +191,37 @@ export function SwapForm() {
|
||||
amountHuman={fromAmount}
|
||||
onClose={() => setTrxModalQuote(null)}
|
||||
onConfirm={() => {
|
||||
executeTrxSwap(trxModalQuote.quoteId)
|
||||
setErrorMessage(null)
|
||||
executeTrxSwap(trxModalQuote.quoteId, {
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['wallet', 'balance', 'TRX'] })
|
||||
queryClient.invalidateQueries({ queryKey: ['wallet', 'portfolio'] })
|
||||
navigate(ROUTES.WALLET)
|
||||
},
|
||||
onError: (err) => {
|
||||
setErrorMessage(err instanceof Error ? err.message : 'Не удалось выполнить свап')
|
||||
},
|
||||
})
|
||||
setTrxModalQuote(null)
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{isProcessing && (
|
||||
<Notification
|
||||
status="warning"
|
||||
message="Обработка транзакции..."
|
||||
onClose={() => {}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{errorMessage && (
|
||||
<Notification
|
||||
status="error"
|
||||
message={errorMessage}
|
||||
onClose={() => setErrorMessage(null)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user