@@ -49,6 +49,7 @@ export const lifiConfig = createConfig({
4949 * @param {Address } [params.account] - Account address for balance fetching (defaults to connected wallet)
5050 * @param {Chain['id'] } [params.chainId] - Specific chain ID to filter tokens (defaults to all supported chains)
5151 * @param {boolean } [params.withBalance=true] - Whether to fetch token balances
52+ * @param {boolean } [params.sortByBalance=true] - Whether to sort tokens by balance. When false, source order is preserved even if balances are fetched.
5253 *
5354 * @returns {Object } Token data and loading state
5455 * @returns {Token[] } returns.tokens - Array of tokens with price and balance information
@@ -78,12 +79,15 @@ export const useTokens = (
7879 account,
7980 chainId,
8081 withBalance,
82+ sortByBalance = true ,
8183 } : {
8284 account ?: Address
8385 chainId ?: Chain [ 'id' ]
8486 withBalance ?: boolean
87+ sortByBalance ?: boolean
8588 } = {
8689 withBalance : true ,
90+ sortByBalance : true ,
8791 } ,
8892) => {
8993 const { address } = useWeb3Status ( )
@@ -188,10 +192,16 @@ export const useTokens = (
188192 const cache = useMemo ( ( ) => {
189193 if ( withBalance && account ) {
190194 if ( ! isLoadingPrices && ! isLoadingBalances && tokensBalances && tokensPricesByChain ) {
191- return updateTokensBalances ( tokensData . tokens , [ tokensBalances , tokensPricesByChain ] )
195+ return updateTokensBalances ( tokensData . tokens , [ tokensBalances , tokensPricesByChain ] , {
196+ sortByBalance,
197+ } )
192198 }
193199 if ( useOnchainFallback && ! isLoadingOnchainBalances && onchainBalances && chainId ) {
194- return updateTokensWithRawBalances ( tokensData . tokens , { [ chainId ] : onchainBalances } )
200+ return updateTokensWithRawBalances (
201+ tokensData . tokens ,
202+ { [ chainId ] : onchainBalances } ,
203+ { sortByBalance } ,
204+ )
195205 }
196206 }
197207 return tokensData
@@ -202,6 +212,7 @@ export const useTokens = (
202212 isLoadingOnchainBalances ,
203213 isLoadingPrices ,
204214 onchainBalances ,
215+ sortByBalance ,
205216 tokensBalances ,
206217 tokensData ,
207218 tokensPricesByChain ,
@@ -228,6 +239,7 @@ export const useTokens = (
228239export function updateTokensBalances (
229240 tokens : Tokens ,
230241 results : [ Array < TokenAmount > , TokensResponse ] ,
242+ { sortByBalance = true } : { sortByBalance ?: boolean } = { } ,
231243) {
232244 const [ balanceTokens , prices ] = results
233245
@@ -273,9 +285,11 @@ export function updateTokensBalances(
273285 } )
274286 logger . timeEnd ( 'extending tokens with balance info' )
275287
276- logger . time ( 'sorting tokens by balance' )
277- tokensWithBalances . sort ( sortFn )
278- logger . timeEnd ( 'sorting tokens by balance' )
288+ if ( sortByBalance ) {
289+ logger . time ( 'sorting tokens by balance' )
290+ tokensWithBalances . sort ( sortFn )
291+ logger . timeEnd ( 'sorting tokens by balance' )
292+ }
279293
280294 logger . time ( 'updating tokens cache' )
281295 const tokensByChain = tokensWithBalances . reduce (
@@ -306,6 +320,7 @@ export function updateTokensBalances(
306320export function updateTokensWithRawBalances (
307321 tokens : Tokens ,
308322 rawBalances : Record < number , Record < string , bigint > > ,
323+ { sortByBalance = true } : { sortByBalance ?: boolean } = { } ,
309324) {
310325 const tokensWithBalances = tokens . map (
311326 ( token ) : Token => ( {
@@ -316,7 +331,9 @@ export function updateTokensWithRawBalances(
316331 } ) ,
317332 )
318333
319- tokensWithBalances . sort ( sortByBalancePresenceFn )
334+ if ( sortByBalance ) {
335+ tokensWithBalances . sort ( sortByBalancePresenceFn )
336+ }
320337
321338 const tokensByChainId = tokensWithBalances . reduce (
322339 ( acc , token ) => {
0 commit comments