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 '../../swap-form/model/useSwapForm'
|
||||
import { SwapCard } from '../../swap-form/ui/SwapCard'
|
||||
@@ -26,6 +29,9 @@ function nativeAddr(chain: string) {
|
||||
}
|
||||
|
||||
export function BridgeForm() {
|
||||
const navigate = useNavigate()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const {
|
||||
fromAmount, fromUsd,
|
||||
fromToken, toToken,
|
||||
@@ -37,6 +43,7 @@ export function BridgeForm() {
|
||||
const [toNetwork, setToNetwork] = useState('BSC')
|
||||
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'
|
||||
|
||||
@@ -84,7 +91,7 @@ export function BridgeForm() {
|
||||
|
||||
const { data: quoteData } = useRelayQuote(quotePayload)
|
||||
const { mutate: executeSwap, isPending: isSwapping } = useExecuteRelaySwap()
|
||||
const { mutate: signSwap } = useSignSwap()
|
||||
const { mutate: signSwap, isPending: isSigning } = useSignSwap()
|
||||
|
||||
const trxQuotePayload = isTrxNetwork && parsedAmount > 0
|
||||
? { from: fromToken.symbol, to: toToken.symbol, amountHuman: debouncedAmount }
|
||||
@@ -92,7 +99,9 @@ export function BridgeForm() {
|
||||
|
||||
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
|
||||
|
||||
const displayToAmount = isTrxNetwork
|
||||
? (trxQuoteData?.expectedOutFormatted ?? '0')
|
||||
@@ -162,7 +171,23 @@ export function BridgeForm() {
|
||||
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', 'balance', toNetwork] })
|
||||
queryClient.invalidateQueries({ queryKey: ['wallet', 'portfolio'] })
|
||||
navigate(ROUTES.WALLET)
|
||||
},
|
||||
onError: (err) => {
|
||||
setErrorMessage(err instanceof Error ? err.message : 'Не удалось подписать транзакцию')
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
setModalData(null)
|
||||
}}
|
||||
/>
|
||||
@@ -176,11 +201,38 @@ export function BridgeForm() {
|
||||
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', 'balance', toNetwork] })
|
||||
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