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}