@@ -4,14 +4,22 @@ import {
44 OverviewTransfer ,
55 OverviewTransferProps ,
66} from '@interchain-ui/react' ;
7- import { useChainWallet , useManager } from '@cosmos -kit/react' ;
7+ import { useChainWallet , useWalletManager } from '@interchain -kit/react' ;
88import BigNumber from 'bignumber.js' ;
9- import { ibc } from 'osmo-query ' ;
10- import { StdFee , coins } from '@cosmjs/amino ' ;
11- import { ChainName } from 'cosmos-kit ' ;
12- import { keplrWalletName } from '@/config ' ;
13- import { useDisclosure , useChainUtils , useTx , useBalance } from '@/hooks' ;
9+ import { useTransfer } from '@interchainjs/react/ibc/applications/transfer/v1/tx.rpc.react ' ;
10+ import { MsgTransfer } from '@interchainjs/react/ibc/applications/transfer/v1/tx ' ;
11+ import { defaultContext } from '@tanstack/react-query ' ;
12+ import { StdFee } from '@interchainjs/react/types ' ;
13+
1414import { truncDecimals } from '@/utils' ;
15+ import { keplrWalletName } from '@/config' ;
16+ import {
17+ useDisclosure ,
18+ useChainUtils ,
19+ useBalance ,
20+ useToastHandlers ,
21+ useSigningClient ,
22+ } from '@/hooks' ;
1523
1624import {
1725 PrettyAsset ,
@@ -21,8 +29,6 @@ import {
2129 Unpacked ,
2230} from './types' ;
2331
24- const { transfer } = ibc . applications . transfer . v1 . MessageComposer . withTypeUrl ;
25-
2632const ZERO_AMOUNT = '0' ;
2733
2834interface OverviewTransferWrapperProps {
@@ -36,13 +42,11 @@ interface OverviewTransferWrapperProps {
3642 React . SetStateAction < TransferInfo | undefined >
3743 > ;
3844 } ;
39- selectedChainName : ChainName ;
45+ selectedChainName : string ;
4046}
4147
4248const OverviewTransferWrapper = (
4349 props : OverviewTransferWrapperProps & {
44- isLoading : boolean ;
45- setIsLoading : React . Dispatch < React . SetStateAction < boolean > > ;
4650 inputValue : string ;
4751 setInputValue : React . Dispatch < React . SetStateAction < string > > ;
4852 }
@@ -54,8 +58,6 @@ const OverviewTransferWrapper = (
5458 transferInfoState,
5559 updateData,
5660 selectedChainName,
57- isLoading,
58- setIsLoading,
5961 inputValue,
6062 setInputValue,
6163 } = props ;
@@ -92,8 +94,17 @@ const OverviewTransferWrapper = (
9294 keplrWalletName
9395 ) ;
9496
95- const { getChainLogo } = useManager ( ) ;
96- const { tx } = useTx ( sourceChainName ) ;
97+ const { getChainLogoUrl } = useWalletManager ( ) ;
98+
99+ const toastHandlers = useToastHandlers ( ) ;
100+ const { data : signingClient } = useSigningClient ( sourceChainName ) ;
101+ const { mutate : transfer , isLoading } = useTransfer ( {
102+ clientResolver : signingClient ,
103+ options : {
104+ context : defaultContext ,
105+ ...toastHandlers ,
106+ } ,
107+ } ) ;
97108
98109 const availableAmount = useMemo ( ( ) : number => {
99110 if ( ! isDeposit ) {
@@ -125,12 +136,10 @@ const OverviewTransferWrapper = (
125136 const closeModal = ( ) => {
126137 modalControl . onClose ( ) ;
127138 setInputValue ( '' ) ;
128- setIsLoading ( false ) ;
129139 } ;
130140
131141 const handleTransferSubmit = async ( ) => {
132142 if ( ! sourceAddress || ! destAddress ) return ;
133- setIsLoading ( true ) ;
134143
135144 const transferAmount = new BigNumber ( inputValue )
136145 . shiftedBy ( getExponentByDenom ( symbolToDenom ( transferToken . symbol ) ) )
@@ -142,7 +151,7 @@ const OverviewTransferWrapper = (
142151 ) ;
143152
144153 const fee : StdFee = {
145- amount : coins ( '1000' , transferToken . denom ?? '' ) ,
154+ amount : [ { denom : transferToken . denom ?? '' , amount : '0' } ] ,
146155 gas : '250000' ,
147156 } ;
148157
@@ -154,49 +163,55 @@ const OverviewTransferWrapper = (
154163 const stamp = Date . now ( ) ;
155164 const timeoutInNanos = ( stamp + 1.2e6 ) * 1e6 ;
156165
157- const msg = transfer ( {
166+ const msg = MsgTransfer . fromPartial ( {
158167 sourcePort,
159168 sourceChannel,
160169 sender : sourceAddress ,
161170 receiver : destAddress ,
162171 token,
163- // @ts -ignore
164172 timeoutHeight : undefined ,
165173 timeoutTimestamp : BigInt ( timeoutInNanos ) ,
166174 } ) ;
167175
168- await tx ( [ msg ] , {
169- fee,
170- onSuccess : ( ) => {
171- updateData ( ) ;
172- closeModal ( ) ;
176+ transfer (
177+ {
178+ signerAddress : sourceAddress ,
179+ message : msg ,
180+ fee,
181+ memo : 'Transfer' ,
173182 } ,
174- } ) ;
175-
176- setIsLoading ( false ) ;
183+ {
184+ onSuccess : ( ) => {
185+ updateData ( ) ;
186+ closeModal ( ) ;
187+ } ,
188+ }
189+ ) ;
177190 } ;
178191
179192 const assetOptions : OverviewTransferProps [ 'dropdownList' ] = useMemo ( ( ) => {
180- return assets
181- . filter ( ( asset ) => {
182- if ( isDeposit ) {
183- return true ;
184- }
185- return new BigNumber ( asset . amount ) . gt ( 0 ) ;
186- } )
187- // .filter((asset) => {
188- // return asset.symbol !== transferToken.symbol;
189- // })
190- . map ( ( asset ) => ( {
191- available : new BigNumber ( asset . displayAmount ) . toNumber ( ) ,
192- symbol : asset . symbol ,
193- name : asset . prettyChainName ,
194- denom : asset . denom ,
195- imgSrc : asset . logoUrl ?? '' ,
196- priceDisplayAmount : new BigNumber (
197- truncDecimals ( asset . dollarValue , 2 )
198- ) . toNumber ( ) ,
199- } ) ) ;
193+ return (
194+ assets
195+ . filter ( ( asset ) => {
196+ if ( isDeposit ) {
197+ return true ;
198+ }
199+ return new BigNumber ( asset . amount ) . gt ( 0 ) ;
200+ } )
201+ // .filter((asset) => {
202+ // return asset.symbol !== transferToken.symbol;
203+ // })
204+ . map ( ( asset ) => ( {
205+ available : new BigNumber ( asset . displayAmount ) . toNumber ( ) ,
206+ symbol : asset . symbol ,
207+ name : asset . prettyChainName ,
208+ denom : asset . denom ,
209+ imgSrc : asset . logoUrl ?? '' ,
210+ priceDisplayAmount : new BigNumber (
211+ truncDecimals ( asset . dollarValue , 2 )
212+ ) . toNumber ( ) ,
213+ } ) )
214+ ) ;
200215 } , [ assets , isDeposit , transferToken ] ) ;
201216 console . log ( 'assetOptions' , assetOptions ) ;
202217
@@ -240,8 +255,10 @@ const OverviewTransferWrapper = (
240255 new BigNumber ( inputValue ) . isEqualTo ( 0 ) ||
241256 isNaN ( Number ( inputValue ) )
242257 }
243- fromChainLogoUrl = { getChainLogo ( transferInfo ?. sourceChainName ?? '' ) ?? '' }
244- toChainLogoUrl = { getChainLogo ( transferInfo ?. destChainName ?? '' ) ?? '' }
258+ fromChainLogoUrl = {
259+ getChainLogoUrl ( transferInfo ?. sourceChainName ?? '' ) ?? ''
260+ }
261+ toChainLogoUrl = { getChainLogoUrl ( transferInfo ?. destChainName ?? '' ) ?? '' }
245262 dropdownList = { assetOptions }
246263 onTransfer = { ( ) => {
247264 handleTransferSubmit ( ) ;
@@ -259,12 +276,10 @@ export const DropdownTransferModal = (props: OverviewTransferWrapperProps) => {
259276 const { modalControl, transferInfoState } = props ;
260277
261278 const [ inputValue , setInputValue ] = useState ( '' ) ;
262- const [ isLoading , setIsLoading ] = useState < boolean > ( false ) ;
263279
264280 const closeModal = ( ) => {
265281 modalControl . onClose ( ) ;
266282 setInputValue ( '' ) ;
267- setIsLoading ( false ) ;
268283 } ;
269284
270285 return (
@@ -280,8 +295,6 @@ export const DropdownTransferModal = (props: OverviewTransferWrapperProps) => {
280295 ...props . modalControl ,
281296 onClose : closeModal ,
282297 } }
283- isLoading = { isLoading }
284- setIsLoading = { setIsLoading }
285298 inputValue = { inputValue }
286299 setInputValue = { setInputValue }
287300 />
0 commit comments