11import { CheckCircledIcon } from "@radix-ui/react-icons" ;
2+ import { useQuery } from "@tanstack/react-query" ;
23import { useState } from "react" ;
34import type { Chain } from "../../../../../../../chains/types.js" ;
45import { getCachedChain } from "../../../../../../../chains/utils.js" ;
@@ -78,6 +79,48 @@ export function TransferConfirmationScreen(
7879 | { id : "done" }
7980 > ( { id : "idle" } ) ;
8081
82+ const transferQuery = useQuery ( {
83+ queryKey : [
84+ "transfer" ,
85+ isNativeToken ( token ) ? NATIVE_TOKEN_ADDRESS : token . address ,
86+ tokenAmount ,
87+ receiverAddress ,
88+ payer . account . address ,
89+ payOptions ?. purchaseData ,
90+ ] ,
91+ queryFn : async ( ) => {
92+ const transferResponse = await getBuyWithCryptoTransfer ( {
93+ client,
94+ fromAddress : payer . account . address ,
95+ toAddress : receiverAddress ,
96+ chainId : chain . id ,
97+ tokenAddress : isNativeToken ( token )
98+ ? NATIVE_TOKEN_ADDRESS
99+ : token . address ,
100+ amount : tokenAmount ,
101+ purchaseData : payOptions ?. purchaseData ,
102+ } ) ;
103+ return transferResponse ;
104+ } ,
105+ refetchInterval : 30 * 1000 ,
106+ } ) ;
107+
108+ if ( transferQuery . isLoading ) {
109+ return (
110+ < Container p = "lg" >
111+ < ModalHeader title = { title } onBack = { onBack } />
112+ < Container flex = "column" center = "both" style = { { minHeight : "300px" } } >
113+ < Spacer y = "xl" />
114+ < Spinner size = "xl" color = "secondaryText" />
115+ < Spacer y = "xl" />
116+ </ Container >
117+ </ Container >
118+ ) ;
119+ }
120+
121+ const transferFromAmountWithFees =
122+ transferQuery . data ?. paymentToken . amount || tokenAmount ;
123+
81124 return (
82125 < Container p = "lg" >
83126 < ModalHeader title = { title } onBack = { onBack } />
@@ -109,7 +152,7 @@ export function TransferConfirmationScreen(
109152 fromChain = { chain }
110153 toToken = { token }
111154 toChain = { chain }
112- fromAmount = { tokenAmount }
155+ fromAmount = { transactionMode ? tokenAmount : transferFromAmountWithFees }
113156 toAmount = { tokenAmount }
114157 />
115158
@@ -230,7 +273,9 @@ export function TransferConfirmationScreen(
230273 token,
231274 chain,
232275 tokenMetadata,
233- tokenAmount,
276+ tokenAmount : transactionMode
277+ ? tokenAmount
278+ : transferFromAmountWithFees ,
234279 fromAddress : payer . account . address ,
235280 toAddress : receiverAddress ,
236281 transaction : txResult ,
@@ -240,17 +285,11 @@ export function TransferConfirmationScreen(
240285 setStep ( "execute" ) ;
241286 setStatus ( { id : "idle" } ) ;
242287 } else {
243- const transferResponse = await getBuyWithCryptoTransfer ( {
244- client,
245- fromAddress : payer . account . address ,
246- toAddress : receiverAddress ,
247- chainId : chain . id ,
248- tokenAddress : isNativeToken ( token )
249- ? NATIVE_TOKEN_ADDRESS
250- : token . address ,
251- amount : tokenAmount ,
252- purchaseData : payOptions ?. purchaseData ,
253- } ) ;
288+ const transferResponse = transferQuery . data ;
289+
290+ if ( ! transferResponse ) {
291+ throw new Error ( "Transfer data not found" ) ;
292+ }
254293
255294 if ( transferResponse . approvalData ) {
256295 // check allowance
0 commit comments