1- import { Asset , Chain } from "@chain-registry/types" ;
1+ import { Chain } from "@chain-registry/types" ;
22import { Window as KeplrWindow } from "@keplr-wallet/types" ;
33import { mapUndefined } from "@namada/utils" ;
44import { TransactionTimeline } from "App/Common/TransactionTimeline" ;
@@ -8,19 +8,20 @@ import {
88} from "App/Transfer/TransferModule" ;
99import { allDefaultAccountsAtom } from "atoms/accounts" ;
1010import {
11+ assetBalanceAtomFamily ,
1112 availableChainsAtom ,
1213 chainRegistryAtom ,
1314 ibcTransferAtom ,
1415} from "atoms/integrations" ;
1516import clsx from "clsx" ;
1617import { AnimatePresence , motion } from "framer-motion" ;
17- import { useAssetAmount } from "hooks/useAssetAmount" ;
1818import { useWalletManager } from "hooks/useWalletManager" ;
1919import { wallets } from "integrations" ;
2020import { KeplrWalletManager } from "integrations/Keplr" ;
2121import { useAtomValue } from "jotai" ;
2222import { useEffect , useMemo , useState } from "react" ;
2323import namadaChain from "registry/namada.json" ;
24+ import { Address } from "types" ;
2425import { IbcTopHeader } from "./IbcTopHeader" ;
2526
2627import * as cosmos from "chain-registry/mainnet/cosmoshub" ;
@@ -33,7 +34,7 @@ export const IbcTransfer: React.FC = () => {
3334 const chainRegistry = useAtomValue ( chainRegistryAtom ) ;
3435 const availableChains = useAtomValue ( availableChainsAtom ) ;
3536 const [ shielded , setShielded ] = useState < boolean > ( true ) ;
36- const [ selectedAsset , setSelectedAsset ] = useState < Asset > ( ) ;
37+ const [ selectedAssetAddress , setSelectedAssetAddress ] = useState < Address > ( ) ;
3738 const [ currentStep , setCurrentStep ] = useState ( 0 ) ;
3839 const [ generalErrorMessage , setGeneralErrorMessage ] = useState ( "" ) ;
3940 const performIbcTransfer = useAtomValue ( ibcTransferAtom ) ;
@@ -45,15 +46,17 @@ export const IbcTransfer: React.FC = () => {
4546 chainId,
4647 } = useWalletManager ( keplr ) ;
4748
48- const {
49- balance : availableAmount ,
50- availableAssets,
51- isLoading : isLoadingBalances ,
52- } = useAssetAmount ( {
53- registry,
54- asset : selectedAsset ,
55- walletAddress : sourceAddress ,
56- } ) ;
49+ const { data : availableAssets , isLoading : isLoadingBalances } = useAtomValue (
50+ assetBalanceAtomFamily ( {
51+ chain : registry ?. chain ,
52+ walletAddress : sourceAddress ,
53+ } )
54+ ) ;
55+
56+ const availableAmount = mapUndefined (
57+ ( address ) => availableAssets ?. [ address ] ?. amount ,
58+ selectedAssetAddress
59+ ) ;
5760
5861 const transactionFee = useMemo ( ( ) => {
5962 if ( typeof registry !== "undefined" ) {
@@ -63,7 +66,7 @@ export const IbcTransfer: React.FC = () => {
6366 } , [ registry ] ) ;
6467
6568 useEffect ( ( ) => {
66- setSelectedAsset ( undefined ) ;
69+ setSelectedAssetAddress ( undefined ) ;
6770 } , [ registry ] ) ;
6871
6972 const namadaAddress = useMemo ( ( ) => {
@@ -90,6 +93,11 @@ export const IbcTransfer: React.FC = () => {
9093 throw new Error ( "Chain ID is undefined" ) ;
9194 }
9295
96+ const selectedAsset = mapUndefined (
97+ ( address ) => availableAssets ?. [ address ] ,
98+ selectedAssetAddress
99+ ) ;
100+
93101 if ( ! selectedAsset ) {
94102 throw new Error ( "No asset is selected" ) ;
95103 }
@@ -182,7 +190,7 @@ export const IbcTransfer: React.FC = () => {
182190 source = { {
183191 isLoadingAssets : isLoadingBalances ,
184192 availableAssets,
185- selectedAsset ,
193+ selectedAssetAddress ,
186194 availableAmount,
187195 availableChains,
188196 onChangeChain,
@@ -191,7 +199,7 @@ export const IbcTransfer: React.FC = () => {
191199 wallet : wallets . keplr ,
192200 walletAddress : sourceAddress ,
193201 onChangeWallet,
194- onChangeSelectedAsset : setSelectedAsset ,
202+ onChangeSelectedAsset : setSelectedAssetAddress ,
195203 } }
196204 destination = { {
197205 chain : namadaChain as Chain ,
0 commit comments