diff --git a/src/ui/pages/BridgeForm/BridgeForm.tsx b/src/ui/pages/BridgeForm/BridgeForm.tsx index 1af11cd14..5fa331a82 100644 --- a/src/ui/pages/BridgeForm/BridgeForm.tsx +++ b/src/ui/pages/BridgeForm/BridgeForm.tsx @@ -191,7 +191,7 @@ function FormHint({ style={{ width: 20, height: 20 }} color="var(--negative-500)" /> - Bridge Anyway + Bridge Anyway ); } @@ -724,7 +724,7 @@ function BridgeFormComponent() { const { mutate: sendApproveTransaction, - data: approveHash = null, + data: approveData, reset: resetApproveMutation, ...approveMutation } = useMutation({ @@ -741,6 +741,7 @@ function BridgeFormComponent() { invariant(formState.inputAmount, 'inputAmount must be set'); const evmTx = selectedQuote.transactionApprove.evm; + const quoteId = selectedQuote.contractMetadata?.id || null; const isPaymasterTx = Boolean(evmTx.customData?.paymasterParams); const approvalTx = allowanceBase && !isPaymasterTx @@ -785,11 +786,15 @@ function BridgeFormComponent() { addressAction: interpretationAction ?? fallbackAddressAction, }); invariant(txResponse.evm?.hash); - return txResponse.evm.hash; + return { hash: txResponse.evm.hash, quoteId }; + }, + onSuccess: ({ quoteId }) => { + setUserQuoteId(quoteId); }, }); - const approveTxStatus = useTransactionStatus(approveHash); + const approveTxStatus = useTransactionStatus(approveData?.hash ?? null); + useEffect(() => { if (approveTxStatus === 'confirmed') { refetchQuotes(); @@ -800,7 +805,7 @@ function BridgeFormComponent() { const isApproveMode = approveMutation.isLoading || - selectedQuote?.transactionApprove || + Boolean(selectedQuote?.transactionApprove) || approveTxStatus === 'pending'; const showApproveHintLine = Boolean(selectedQuote?.transactionApprove) || !approveMutation.isIdle; @@ -1385,11 +1390,17 @@ function BridgeFormComponent() { form={formId} wallet={wallet} disabled={ - approveMutation.isLoading || approveTxStatus === 'pending' + quotesData.isLoading || + approveMutation.isLoading || + approveTxStatus === 'pending' } holdToSign={false} > - Approve {inputPosition?.asset.symbol ?? null} + {approveMutation.isLoading || approveTxStatus === 'pending' + ? 'Approving...' + : quotesData.isLoading + ? 'Fetching offers' + : `Approve ${inputPosition?.asset.symbol ?? null}`} ) : null} diff --git a/src/ui/pages/SwapForm/SwapForm.tsx b/src/ui/pages/SwapForm/SwapForm.tsx index aeea51b14..039c347e1 100644 --- a/src/ui/pages/SwapForm/SwapForm.tsx +++ b/src/ui/pages/SwapForm/SwapForm.tsx @@ -181,7 +181,7 @@ function FormHint({ style={{ width: 20, height: 20 }} color="var(--negative-500)" /> - Swap Anyway + Swap Anyway ); } @@ -525,7 +525,7 @@ function SwapFormComponent() { const { mutate: sendApproveTransaction, - data: approveHash = null, + data: approveData, reset: resetApproveMutation, ...approveMutation } = useMutation({ @@ -542,6 +542,7 @@ function SwapFormComponent() { invariant(formState.inputAmount, 'inputAmount must be set'); const evmTx = selectedQuote.transactionApprove.evm; + const quoteId = selectedQuote.contractMetadata?.id || null; const isPaymasterTx = Boolean(evmTx.customData?.paymasterParams); const approvalTx = allowanceBase && !isPaymasterTx @@ -586,11 +587,15 @@ function SwapFormComponent() { addressAction: interpretationAction ?? fallbackAddressAction, }); invariant(txResponse.evm?.hash); - return txResponse.evm.hash; + return { hash: txResponse.evm.hash, quoteId }; + }, + onSuccess: ({ quoteId }) => { + setUserQuoteId(quoteId); }, }); - const approveTxStatus = useTransactionStatus(approveHash); + const approveTxStatus = useTransactionStatus(approveData?.hash ?? null); + useEffect(() => { if (approveTxStatus === 'confirmed') { refetchQuotes(); @@ -601,7 +606,7 @@ function SwapFormComponent() { const isApproveMode = approveMutation.isLoading || - selectedQuote?.transactionApprove || + Boolean(selectedQuote?.transactionApprove) || approveTxStatus === 'pending'; const showApproveHintLine = Boolean(selectedQuote?.transactionApprove) || !approveMutation.isIdle; @@ -1198,11 +1203,17 @@ function SwapFormComponent() { form={formId} wallet={wallet} disabled={ - approveMutation.isLoading || approveTxStatus === 'pending' + quotesData.isLoading || + approveMutation.isLoading || + approveTxStatus === 'pending' } holdToSign={false} > - Approve {inputPosition?.asset.symbol ?? null} + {approveMutation.isLoading || approveTxStatus === 'pending' + ? 'Approving...' + : quotesData.isLoading + ? 'Fetching offers' + : `Approve ${inputPosition?.asset.symbol ?? null}`} ) : null}