@lifi/widget 3.29.0 → 3.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +1 -1
  3. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +3 -2
  4. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  5. package/dist/esm/components/AmountInput/PriceFormHelperText.d.ts +1 -1
  6. package/dist/esm/components/AmountInput/PriceFormHelperText.js +3 -2
  7. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  8. package/dist/esm/components/BottomSheet/BottomSheet.js +2 -2
  9. package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
  10. package/dist/esm/components/BottomSheet/types.d.ts +1 -0
  11. package/dist/esm/components/ChainSelect/ChainSelect.js +35 -18
  12. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  13. package/dist/esm/components/ChainSelect/useChainSelect.d.ts +1 -1
  14. package/dist/esm/components/ChainSelect/useChainSelect.js +3 -3
  15. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  16. package/dist/esm/components/Chains/AllChainsAvatar.d.ts +7 -0
  17. package/dist/esm/components/Chains/AllChainsAvatar.js +77 -0
  18. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -0
  19. package/dist/esm/components/Chains/ChainList.d.ts +2 -1
  20. package/dist/esm/components/Chains/ChainList.js +2 -2
  21. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  22. package/dist/esm/components/Chains/ChainSearchInput.js +2 -2
  23. package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
  24. package/dist/esm/components/Chains/SelectChainContent.js +1 -1
  25. package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
  26. package/dist/esm/components/Chains/VirtualizedChainList.d.ts +2 -1
  27. package/dist/esm/components/Chains/VirtualizedChainList.js +42 -10
  28. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  29. package/dist/esm/components/RouteCard/RouteCardEssentials.js +1 -1
  30. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  31. package/dist/esm/components/TokenList/TokenDetailsSheet.d.ts +1 -5
  32. package/dist/esm/components/TokenList/TokenDetailsSheet.js +5 -3
  33. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  34. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +2 -2
  35. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  36. package/dist/esm/components/TokenList/TokenList.js +11 -53
  37. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  38. package/dist/esm/components/TokenList/TokenListItem.d.ts +1 -1
  39. package/dist/esm/components/TokenList/TokenListItem.js +29 -25
  40. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  41. package/dist/esm/components/TokenList/VirtualizedTokenList.js +56 -37
  42. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  43. package/dist/esm/components/TokenList/types.d.ts +6 -10
  44. package/dist/esm/components/TokenList/useTokenSelect.js +3 -4
  45. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  46. package/dist/esm/components/TransactionDetails.js +2 -2
  47. package/dist/esm/components/TransactionDetails.js.map +1 -1
  48. package/dist/esm/config/version.d.ts +1 -1
  49. package/dist/esm/config/version.js +1 -1
  50. package/dist/esm/hooks/useAccountsBalancesData.d.ts +6 -0
  51. package/dist/esm/hooks/useAccountsBalancesData.js +64 -0
  52. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -0
  53. package/dist/esm/hooks/useFilteredByTokenBalances.d.ts +8 -0
  54. package/dist/esm/hooks/useFilteredByTokenBalances.js +69 -0
  55. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -0
  56. package/dist/esm/hooks/useListHeight.d.ts +0 -1
  57. package/dist/esm/hooks/useListHeight.js +0 -1
  58. package/dist/esm/hooks/useListHeight.js.map +1 -1
  59. package/dist/esm/hooks/useToken.d.ts +2 -2
  60. package/dist/esm/hooks/useToken.js +13 -11
  61. package/dist/esm/hooks/useToken.js.map +1 -1
  62. package/dist/esm/hooks/useTokenAddressBalance.d.ts +2 -3
  63. package/dist/esm/hooks/useTokenAddressBalance.js +10 -14
  64. package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
  65. package/dist/esm/hooks/useTokenBalances.d.ts +6 -9
  66. package/dist/esm/hooks/useTokenBalances.js +57 -72
  67. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  68. package/dist/esm/hooks/useTokenBalancesQueries.d.ts +11 -0
  69. package/dist/esm/hooks/useTokenBalancesQueries.js +74 -0
  70. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -0
  71. package/dist/esm/hooks/useTokens.d.ts +6 -6
  72. package/dist/esm/hooks/useTokens.js +78 -70
  73. package/dist/esm/hooks/useTokens.js.map +1 -1
  74. package/dist/esm/i18n/bn.json +3 -3
  75. package/dist/esm/i18n/de.json +3 -3
  76. package/dist/esm/i18n/en.json +3 -3
  77. package/dist/esm/i18n/es.json +3 -3
  78. package/dist/esm/i18n/fr.json +3 -3
  79. package/dist/esm/i18n/hi.json +3 -3
  80. package/dist/esm/i18n/id.json +3 -3
  81. package/dist/esm/i18n/it.json +3 -3
  82. package/dist/esm/i18n/ja.json +3 -3
  83. package/dist/esm/i18n/ko.json +3 -3
  84. package/dist/esm/i18n/pl.json +3 -3
  85. package/dist/esm/i18n/pt.json +3 -3
  86. package/dist/esm/i18n/th.json +3 -3
  87. package/dist/esm/i18n/tr.json +3 -3
  88. package/dist/esm/i18n/uk.json +3 -3
  89. package/dist/esm/i18n/vi.json +3 -3
  90. package/dist/esm/i18n/zh.json +3 -3
  91. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js +6 -1
  92. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
  93. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +2 -4
  94. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  95. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +1 -1
  96. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  97. package/dist/esm/stores/chains/createChainOrderStore.d.ts +3 -2
  98. package/dist/esm/stores/chains/createChainOrderStore.js +13 -8
  99. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  100. package/dist/esm/stores/chains/types.d.ts +2 -0
  101. package/dist/esm/stores/chains/useChainOrder.js +5 -1
  102. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  103. package/dist/esm/types/token.d.ts +7 -2
  104. package/dist/esm/utils/chainType.d.ts +1 -0
  105. package/dist/esm/utils/chainType.js +2 -0
  106. package/dist/esm/utils/chainType.js.map +1 -1
  107. package/dist/esm/utils/token.d.ts +8 -0
  108. package/dist/esm/utils/token.js +29 -0
  109. package/dist/esm/utils/token.js.map +1 -0
  110. package/dist/esm/utils/tokenList.d.ts +13 -0
  111. package/dist/esm/utils/tokenList.js +106 -0
  112. package/dist/esm/utils/tokenList.js.map +1 -0
  113. package/package.json +8 -8
  114. package/package.json.tmp +7 -7
  115. package/src/components/AmountInput/AmountInputEndAdornment.tsx +3 -2
  116. package/src/components/AmountInput/PriceFormHelperText.tsx +3 -2
  117. package/src/components/BottomSheet/BottomSheet.tsx +2 -2
  118. package/src/components/BottomSheet/types.ts +1 -0
  119. package/src/components/ChainSelect/ChainSelect.tsx +112 -40
  120. package/src/components/ChainSelect/useChainSelect.ts +3 -3
  121. package/src/components/Chains/AllChainsAvatar.tsx +113 -0
  122. package/src/components/Chains/ChainList.tsx +3 -0
  123. package/src/components/Chains/ChainSearchInput.tsx +2 -2
  124. package/src/components/Chains/SelectChainContent.tsx +1 -0
  125. package/src/components/Chains/VirtualizedChainList.tsx +80 -12
  126. package/src/components/RouteCard/RouteCardEssentials.tsx +1 -1
  127. package/src/components/TokenList/TokenDetailsSheet.tsx +5 -10
  128. package/src/components/TokenList/TokenDetailsSheetContent.tsx +2 -6
  129. package/src/components/TokenList/TokenList.tsx +57 -129
  130. package/src/components/TokenList/TokenListItem.tsx +191 -166
  131. package/src/components/TokenList/VirtualizedTokenList.tsx +88 -48
  132. package/src/components/TokenList/types.ts +14 -10
  133. package/src/components/TokenList/useTokenSelect.ts +3 -4
  134. package/src/components/TransactionDetails.tsx +2 -2
  135. package/src/config/version.ts +1 -1
  136. package/src/hooks/useAccountsBalancesData.ts +101 -0
  137. package/src/hooks/useFilteredByTokenBalances.ts +101 -0
  138. package/src/hooks/useListHeight.ts +0 -1
  139. package/src/hooks/useToken.ts +26 -14
  140. package/src/hooks/useTokenAddressBalance.ts +14 -20
  141. package/src/hooks/useTokenBalances.ts +81 -80
  142. package/src/hooks/useTokenBalancesQueries.ts +94 -0
  143. package/src/hooks/useTokens.ts +118 -90
  144. package/src/i18n/bn.json +3 -3
  145. package/src/i18n/de.json +3 -3
  146. package/src/i18n/en.json +3 -3
  147. package/src/i18n/es.json +3 -3
  148. package/src/i18n/fr.json +3 -3
  149. package/src/i18n/hi.json +3 -3
  150. package/src/i18n/id.json +3 -3
  151. package/src/i18n/it.json +3 -3
  152. package/src/i18n/ja.json +3 -3
  153. package/src/i18n/ko.json +3 -3
  154. package/src/i18n/pl.json +3 -3
  155. package/src/i18n/pt.json +3 -3
  156. package/src/i18n/th.json +3 -3
  157. package/src/i18n/tr.json +3 -3
  158. package/src/i18n/uk.json +3 -3
  159. package/src/i18n/vi.json +3 -3
  160. package/src/i18n/zh.json +3 -3
  161. package/src/pages/SelectTokenPage/SearchTokenInput.tsx +5 -0
  162. package/src/pages/SelectTokenPage/SelectTokenPage.tsx +7 -13
  163. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +1 -1
  164. package/src/stores/chains/createChainOrderStore.ts +17 -8
  165. package/src/stores/chains/types.ts +2 -0
  166. package/src/stores/chains/useChainOrder.ts +5 -1
  167. package/src/types/token.ts +11 -2
  168. package/src/utils/chainType.ts +2 -0
  169. package/src/utils/token.ts +65 -0
  170. package/src/utils/tokenList.ts +172 -0
  171. package/dist/esm/components/TokenList/utils.d.ts +0 -2
  172. package/dist/esm/components/TokenList/utils.js +0 -35
  173. package/dist/esm/components/TokenList/utils.js.map +0 -1
  174. package/src/components/TokenList/utils.ts +0 -42
@@ -1,20 +1,16 @@
1
- import { useMemo } from 'react';
2
- import { useTokenBalances } from './useTokenBalances.js';
1
+ import { useAccount } from '@lifi/wallet-management';
2
+ import { useChain } from './useChain.js';
3
+ import { useToken } from './useToken.js';
4
+ import { useTokenBalance } from './useTokenBalance.js';
3
5
  export const useTokenAddressBalance = (chainId, tokenAddress) => {
4
- const { tokens, tokensWithBalance, chain, isBalanceLoading, refetch } = useTokenBalances(chainId);
5
- const token = useMemo(() => {
6
- if (tokenAddress && chainId) {
7
- let token = tokensWithBalance?.find((token) => token.address === tokenAddress && token.chainId === chainId);
8
- if (!token) {
9
- token = tokens?.find((token) => token.address === tokenAddress && token.chainId === chainId);
10
- }
11
- return token;
12
- }
13
- }, [chainId, tokenAddress, tokens, tokensWithBalance]);
6
+ const { chain, isLoading: isChainLoading } = useChain(chainId);
7
+ const { account } = useAccount({ chainType: chain?.chainType });
8
+ const { token, isLoading: isTokenLoading } = useToken(chainId, tokenAddress);
9
+ const { token: tokenBalance, isLoading: isBalanceLoading, refetch, } = useTokenBalance(account?.address, token);
14
10
  return {
15
- token,
11
+ token: tokenBalance,
16
12
  chain,
17
- isLoading: isBalanceLoading,
13
+ isLoading: isBalanceLoading || isChainLoading || isTokenLoading,
18
14
  refetch,
19
15
  };
20
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenAddressBalance.js","sourceRoot":"","sources":["../../../src/hooks/useTokenAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAAgB,EAChB,YAAqB,EACrB,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,GACnE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAG,iBAAiB,EAAE,IAAI,CACjC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CACvE,CAAA;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,MAAM,EAAE,IAAI,CAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CACvE,CAAA;YACH,CAAC;YACD,OAAO,KAAoB,CAAA;QAC7B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAEtD,OAAO;QACL,KAAK;QACL,KAAK;QACL,SAAS,EAAE,gBAAgB;QAC3B,OAAO;KACR,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"useTokenAddressBalance.js","sourceRoot":"","sources":["../../../src/hooks/useTokenAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAAgB,EAChB,YAAqB,EACrB,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC/D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IAE5E,MAAM,EACJ,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,GACR,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAE5C,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,KAAK;QACL,SAAS,EAAE,gBAAgB,IAAI,cAAc,IAAI,cAAc;QAC/D,OAAO;KACR,CAAA;AACH,CAAC,CAAA"}
@@ -1,11 +1,8 @@
1
- import type { TokenAmount } from '../types/token.js';
2
- export declare const useTokenBalances: (selectedChainId?: number) => {
3
- tokens: import("@lifi/sdk").Token[] | undefined;
4
- tokensWithBalance: TokenAmount[] | undefined;
5
- featuredTokens: TokenAmount[] | undefined;
6
- popularTokens: TokenAmount[] | undefined;
7
- chain: import("@lifi/sdk").ExtendedChain | undefined;
8
- isLoading: boolean;
1
+ import type { FormType } from '../stores/form/types.js';
2
+ export declare const useTokenBalances: (selectedChainId?: number, formType?: FormType, isAllNetworks?: boolean, search?: string) => {
3
+ tokens: (import("../index.js").TokenAmount | import("@lifi/sdk").TokenExtended)[];
4
+ withCategories: boolean;
5
+ isTokensLoading: boolean;
6
+ isSearchLoading: boolean;
9
7
  isBalanceLoading: boolean;
10
- refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<TokenAmount[], Error>>;
11
8
  };
@@ -1,78 +1,63 @@
1
- import { getTokenBalances } from '@lifi/sdk';
2
- import { useAccount } from '@lifi/wallet-management';
3
- import { useQuery } from '@tanstack/react-query';
4
- import { formatUnits } from 'viem';
1
+ import { useMemo } from 'react';
5
2
  import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js';
6
- import { getQueryKey } from '../utils/queries.js';
3
+ import { isSearchMatch, processTokenBalances } from '../utils/tokenList.js';
4
+ import { useAccountsBalancesData } from './useAccountsBalancesData.js';
5
+ import { useTokenBalancesQueries } from './useTokenBalancesQueries.js';
7
6
  import { useTokens } from './useTokens.js';
8
- const defaultRefetchInterval = 32000;
9
- export const useTokenBalances = (selectedChainId) => {
10
- const { tokens, featuredTokens, popularTokens, chain, isLoading } = useTokens(selectedChainId);
11
- const { account } = useAccount({ chainType: chain?.chainType });
12
- const { keyPrefix } = useWidgetConfig();
13
- const isBalanceLoadingEnabled = Boolean(account.address) &&
14
- Boolean(tokens?.length) &&
15
- Boolean(selectedChainId);
16
- const { data: tokensWithBalance, isLoading: isBalanceLoading, refetch, } = useQuery({
17
- queryKey: [
18
- getQueryKey('token-balances', keyPrefix),
19
- account.address,
20
- selectedChainId,
21
- tokens?.length,
22
- ],
23
- queryFn: async ({ queryKey: [, accountAddress] }) => {
24
- const tokensWithBalance = await getTokenBalances(accountAddress, tokens);
25
- if (!tokensWithBalance?.length) {
26
- return tokens;
27
- }
28
- const sortFn = (a, b) => Number.parseFloat(formatUnits(b.amount ?? 0n, b.decimals)) *
29
- Number.parseFloat(b.priceUSD ?? '0') -
30
- Number.parseFloat(formatUnits(a.amount ?? 0n, a.decimals)) *
31
- Number.parseFloat(a.priceUSD ?? '0');
32
- const featuredTokens = [];
33
- const tokensWithAmount = [];
34
- const popularTokens = [];
35
- const allTokens = [];
36
- tokensWithBalance.forEach((token) => {
37
- if (token.amount) {
38
- token.featured = false;
39
- token.popular = false;
40
- }
41
- if (token.featured) {
42
- featuredTokens.push(token);
43
- }
44
- else if (token.amount) {
45
- tokensWithAmount.push(token);
46
- }
47
- else if (token.popular) {
48
- popularTokens.push(token);
49
- }
50
- else {
51
- allTokens.push(token);
52
- }
53
- });
54
- tokensWithAmount.sort(sortFn);
55
- const result = [
56
- ...featuredTokens,
57
- ...tokensWithAmount,
58
- ...popularTokens,
59
- ...allTokens,
60
- ];
61
- return result;
62
- },
63
- enabled: isBalanceLoadingEnabled,
64
- refetchInterval: defaultRefetchInterval,
65
- staleTime: defaultRefetchInterval,
66
- });
7
+ export const useTokenBalances = (selectedChainId, formType, isAllNetworks, search) => {
8
+ const { allTokens, isLoading: isTokensLoading, isSearchLoading, } = useTokens(formType, search);
9
+ const { data: accountsWithAllTokens, isLoading: isAccountsLoading } = useAccountsBalancesData(selectedChainId, formType, isAllNetworks, allTokens);
10
+ const isBalanceLoadingEnabled = Boolean(accountsWithAllTokens) && !isAccountsLoading;
11
+ const { data: allTokensWithBalances, isLoading: isBalanceQueriesLoading } = useTokenBalancesQueries(accountsWithAllTokens, isBalanceLoadingEnabled);
12
+ const { tokens: configTokens } = useWidgetConfig();
13
+ const isBalanceLoading = (isBalanceQueriesLoading || isAccountsLoading) &&
14
+ !allTokensWithBalances?.length;
15
+ const displayedTokensList = useMemo(() => {
16
+ const tokensByChain = isAllNetworks
17
+ ? Object.values(allTokens ?? {}).flat()
18
+ : selectedChainId
19
+ ? allTokens?.[selectedChainId]
20
+ : undefined;
21
+ return tokensByChain?.filter((t) => isSearchMatch(t, search)) ?? [];
22
+ }, [allTokens, isAllNetworks, selectedChainId, search]);
23
+ const displayedTokensWithBalances = useMemo(() => {
24
+ const balancesByChain = isAllNetworks
25
+ ? allTokensWithBalances
26
+ : selectedChainId
27
+ ? allTokensWithBalances?.filter((t) => t.chainId === selectedChainId)
28
+ : undefined;
29
+ const displayedTokensSet = new Set(displayedTokensList?.map((t) => `${t.chainId}-${t.address.toLowerCase()}`) || []);
30
+ return balancesByChain?.filter((token) => {
31
+ const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`;
32
+ // Check if token is in displayed list and has amount
33
+ const isInDisplayedList = displayedTokensSet.has(tokenKey) && token.amount;
34
+ // Check if it matches search (for cached appended tokens)
35
+ const matchesSearch = isSearchMatch(token, search);
36
+ return isInDisplayedList || matchesSearch;
37
+ });
38
+ }, [
39
+ allTokensWithBalances,
40
+ displayedTokensList,
41
+ search,
42
+ selectedChainId,
43
+ isAllNetworks,
44
+ ]);
45
+ const { processedTokens, withCategories } = useMemo(() => {
46
+ return processTokenBalances(isBalanceLoading, isAllNetworks ?? false, configTokens, selectedChainId, displayedTokensList, displayedTokensWithBalances);
47
+ }, [
48
+ isBalanceLoading,
49
+ isAllNetworks,
50
+ configTokens,
51
+ selectedChainId,
52
+ displayedTokensList,
53
+ displayedTokensWithBalances,
54
+ ]);
67
55
  return {
68
- tokens,
69
- tokensWithBalance,
70
- featuredTokens,
71
- popularTokens,
72
- chain,
73
- isLoading,
74
- isBalanceLoading: isBalanceLoading && isBalanceLoadingEnabled,
75
- refetch,
56
+ tokens: processedTokens ?? [],
57
+ withCategories,
58
+ isTokensLoading,
59
+ isSearchLoading,
60
+ isBalanceLoading,
76
61
  };
77
62
  };
78
63
  //# sourceMappingURL=useTokenBalances.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenBalances.js","sourceRoot":"","sources":["../../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTokenBalances.js","sourceRoot":"","sources":["../../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type TokenExtended } from '@lifi/sdk';
2
+ import type { TokenAmount } from '../types/token.js';
3
+ export declare const useTokenBalancesQueries: (accountsWithTokens?: Record<string, Record<number, TokenExtended[]>>, isBalanceLoadingEnabled?: boolean) => {
4
+ data: TokenAmount[];
5
+ isLoading: boolean;
6
+ isError: boolean;
7
+ } | {
8
+ data: undefined;
9
+ isLoading: boolean;
10
+ isError: boolean;
11
+ };
@@ -0,0 +1,74 @@
1
+ import { getTokenBalances } from '@lifi/sdk';
2
+ import { useQueries } from '@tanstack/react-query';
3
+ import { useMemo, useRef } from 'react';
4
+ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js';
5
+ import { getQueryKey } from '../utils/queries.js';
6
+ const defaultRefetchInterval = 32000;
7
+ export const useTokenBalancesQueries = (accountsWithTokens, isBalanceLoadingEnabled) => {
8
+ const { keyPrefix } = useWidgetConfig();
9
+ const firstLoadStartRef = useRef(null);
10
+ const queryConfig = useMemo(() => {
11
+ if (!accountsWithTokens) {
12
+ return [];
13
+ }
14
+ return Object.entries(accountsWithTokens).flatMap(([accountAddress, chainTokens]) => Object.entries(chainTokens).map(([chainIdStr, tokens]) => {
15
+ const chainId = Number(chainIdStr);
16
+ return {
17
+ queryKey: [
18
+ getQueryKey('token-balances', keyPrefix),
19
+ accountAddress,
20
+ chainId,
21
+ tokens.length,
22
+ ],
23
+ queryFn: async () => {
24
+ if (!accountAddress || !tokens) {
25
+ return [];
26
+ }
27
+ return await getTokenBalances(accountAddress, tokens);
28
+ },
29
+ enabled: isBalanceLoadingEnabled,
30
+ refetchInterval: defaultRefetchInterval,
31
+ staleTime: defaultRefetchInterval,
32
+ keepPreviousData: true,
33
+ };
34
+ }));
35
+ }, [accountsWithTokens, isBalanceLoadingEnabled, keyPrefix]);
36
+ const result = useQueries({
37
+ queries: queryConfig,
38
+ combine: (results) => {
39
+ const now = Date.now();
40
+ const hasLoadingQueries = results.some((result) => result.isLoading);
41
+ if (hasLoadingQueries && firstLoadStartRef.current === null) {
42
+ firstLoadStartRef.current = now;
43
+ }
44
+ const allComplete = results.every((result) => result.isSuccess || result.isError);
45
+ // Reset the start time when all queries complete
46
+ if (allComplete) {
47
+ firstLoadStartRef.current = null;
48
+ }
49
+ // Calculate time since first load started
50
+ const timeSinceStart = firstLoadStartRef.current
51
+ ? now - firstLoadStartRef.current
52
+ : 0;
53
+ // Return results if all complete OR if 500ms have passed since first query started
54
+ const shouldReturnResults = allComplete || timeSinceStart >= 500;
55
+ if (shouldReturnResults) {
56
+ const data = results
57
+ .flatMap((result) => result.data || [])
58
+ .filter((token) => token.amount);
59
+ return {
60
+ data,
61
+ isLoading: !allComplete,
62
+ isError: results.some((result) => result.isError),
63
+ };
64
+ }
65
+ return {
66
+ data: undefined,
67
+ isLoading: true,
68
+ isError: false,
69
+ };
70
+ },
71
+ });
72
+ return result;
73
+ };
74
+ //# sourceMappingURL=useTokenBalancesQueries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTokenBalancesQueries.js","sourceRoot":"","sources":["../../../src/hooks/useTokenBalancesQueries.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import type { TokenAmount } from '../types/token.js';
2
- export declare const useTokens: (selectedChainId?: number) => {
3
- tokens: import("@lifi/sdk").Token[] | undefined;
4
- featuredTokens: TokenAmount[] | undefined;
5
- popularTokens: TokenAmount[] | undefined;
6
- chain: import("@lifi/sdk").ExtendedChain | undefined;
1
+ import type { FormType } from '../stores/form/types.js';
2
+ export declare const useTokens: (formType?: FormType, search?: string) => {
3
+ allTokens: {
4
+ [chainId: number]: import("@lifi/sdk").TokenExtended[];
5
+ } | undefined;
7
6
  isLoading: boolean;
7
+ isSearchLoading: boolean;
8
8
  };
@@ -1,88 +1,96 @@
1
1
  import { ChainType, getTokens } from '@lifi/sdk';
2
- import { useQuery } from '@tanstack/react-query';
2
+ import { useQuery, useQueryClient } from '@tanstack/react-query';
3
3
  import { useMemo } from 'react';
4
4
  import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js';
5
+ import { isItemAllowed } from '../utils/item.js';
5
6
  import { getQueryKey } from '../utils/queries.js';
6
- import { useChains } from './useChains.js';
7
- export const useTokens = (selectedChainId) => {
8
- const { tokens: configTokens, keyPrefix } = useWidgetConfig();
7
+ import { filterAllowedTokens } from '../utils/token.js';
8
+ export const useTokens = (formType, search) => {
9
+ const { tokens: configTokens, chains: chainsConfig, keyPrefix, } = useWidgetConfig();
10
+ const { isLoading: isSearchLoading } = useBackgroundTokenSearch(search);
9
11
  const { data, isLoading } = useQuery({
10
12
  queryKey: [getQueryKey('tokens', keyPrefix)],
11
- queryFn: () => getTokens({
12
- chainTypes: [
13
+ queryFn: async ({ signal }) => {
14
+ const chainTypes = [
13
15
  ChainType.EVM,
14
16
  ChainType.SVM,
15
17
  ChainType.UTXO,
16
18
  ChainType.MVM,
17
- ],
18
- orderBy: 'volumeUSD24H',
19
- limit: 1000,
20
- }),
19
+ ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types));
20
+ const tokensResponse = await getTokens({
21
+ chainTypes,
22
+ orderBy: 'volumeUSD24H',
23
+ extended: true,
24
+ limit: 1000,
25
+ }, { signal });
26
+ return tokensResponse;
27
+ },
21
28
  refetchInterval: 300000,
22
29
  staleTime: 300000,
23
30
  });
24
- const { chains, isLoading: isSupportedChainsLoading, getChainById, } = useChains();
25
- const filteredData = useMemo(() => {
26
- if (isSupportedChainsLoading || !data) {
27
- return;
28
- }
29
- const chain = getChainById(selectedChainId, chains);
30
- const chainAllowed = selectedChainId && chain;
31
- if (!chainAllowed) {
32
- return;
33
- }
34
- let filteredTokens = data.tokens?.[selectedChainId] || [];
35
- const includedTokens = configTokens?.include?.filter((token) => token.chainId === selectedChainId);
36
- if (includedTokens?.length) {
37
- filteredTokens = [...includedTokens, ...filteredTokens];
38
- }
39
- const filteredTokensMap = new Map(filteredTokens.map((token) => [token.address, token]));
40
- const [popularTokens, featuredTokens] = ['popular', 'featured'].map((tokenType) => {
41
- const typedConfigTokens = configTokens?.[tokenType]?.filter((token) => token.chainId === selectedChainId);
42
- const populatedConfigTokens = typedConfigTokens?.map((token) => {
43
- // Mark token as popular
44
- ;
45
- token[tokenType] = true;
46
- // Check if this token exists in the filteredTokensMap and add priceUSD if it does
47
- const matchingFilteredToken = filteredTokensMap.get(token.address);
48
- if (matchingFilteredToken?.priceUSD) {
49
- ;
50
- token.priceUSD = matchingFilteredToken.priceUSD;
51
- }
52
- if (!token.logoURI && matchingFilteredToken) {
53
- ;
54
- token.logoURI = matchingFilteredToken.logoURI;
55
- }
56
- return token;
57
- });
58
- if (populatedConfigTokens?.length) {
59
- const configTokenAddresses = new Set(populatedConfigTokens?.map((token) => token.address));
60
- filteredTokens = filteredTokens.filter((token) => !configTokenAddresses.has(token.address));
61
- populatedConfigTokens.push(...filteredTokens);
62
- filteredTokens = populatedConfigTokens;
63
- }
64
- return populatedConfigTokens;
65
- });
66
- return {
67
- tokens: filteredTokens,
68
- featuredTokens,
69
- popularTokens,
70
- chain,
71
- };
72
- }, [
73
- chains,
74
- configTokens,
75
- data,
76
- getChainById,
77
- isSupportedChainsLoading,
78
- selectedChainId,
79
- ]);
31
+ const allTokens = useMemo(() => {
32
+ return filterAllowedTokens(data?.tokens, configTokens, chainsConfig, formType);
33
+ }, [data?.tokens, configTokens, chainsConfig, formType]);
80
34
  return {
81
- tokens: filteredData?.tokens,
82
- featuredTokens: filteredData?.featuredTokens,
83
- popularTokens: filteredData?.popularTokens,
84
- chain: filteredData?.chain,
35
+ allTokens,
85
36
  isLoading,
37
+ isSearchLoading,
38
+ };
39
+ };
40
+ // This hook is used to search for tokens in the background.
41
+ // It updates the main tokens cache with the search results,
42
+ // if any of the tokens are not already in the cache.
43
+ const useBackgroundTokenSearch = (search) => {
44
+ const { chains: chainsConfig, keyPrefix } = useWidgetConfig();
45
+ const queryClient = useQueryClient();
46
+ const { isLoading: isSearchLoading } = useQuery({
47
+ queryKey: [getQueryKey('tokens-search', keyPrefix), search],
48
+ queryFn: async ({ queryKey: [, searchQuery], signal }) => {
49
+ const chainTypes = [
50
+ ChainType.EVM,
51
+ ChainType.SVM,
52
+ ChainType.UTXO,
53
+ ChainType.MVM,
54
+ ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types));
55
+ const tokensResponse = await getTokens({
56
+ chainTypes,
57
+ orderBy: 'volumeUSD24H',
58
+ extended: true,
59
+ search: searchQuery,
60
+ limit: 1000,
61
+ }, { signal });
62
+ // Merge search results into main tokens cache
63
+ if (searchQuery) {
64
+ queryClient.setQueriesData({ queryKey: [getQueryKey('tokens', keyPrefix)] }, (data) => {
65
+ if (!data) {
66
+ return data;
67
+ }
68
+ const clonedData = { ...data, tokens: { ...data.tokens } };
69
+ Object.entries(tokensResponse.tokens).forEach(([chainId, searchTokens]) => {
70
+ const chainIdNum = Number(chainId);
71
+ const existingTokens = clonedData.tokens[chainIdNum] || [];
72
+ const existingTokenAddresses = new Set(existingTokens.map((token) => token.address.toLowerCase()));
73
+ // Find tokens in search results that don't exist in the main list
74
+ const newTokens = searchTokens.filter((searchToken) => !existingTokenAddresses.has(searchToken.address.toLowerCase()));
75
+ // Add new tokens to the main list
76
+ if (newTokens.length > 0) {
77
+ clonedData.tokens[chainIdNum] = [
78
+ ...existingTokens,
79
+ ...newTokens,
80
+ ];
81
+ }
82
+ });
83
+ return clonedData;
84
+ });
85
+ }
86
+ return tokensResponse;
87
+ },
88
+ enabled: !!search,
89
+ refetchInterval: 300000,
90
+ staleTime: 300000,
91
+ });
92
+ return {
93
+ isLoading: isSearchLoading,
86
94
  };
87
95
  };
88
96
  //# sourceMappingURL=useTokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTokens.js","sourceRoot":"","sources":["../../../src/hooks/useTokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTokens.js","sourceRoot":"","sources":["../../../src/hooks/useTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAA+B,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAA;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAmB,EAAE,MAAe,EAAE,EAAE;IAChE,MAAM,EACJ,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,SAAS,GACV,GAAG,eAAe,EAAE,CAAA;IAErB,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAEvE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QACnC,QAAQ,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG;gBACjB,SAAS,CAAC,GAAG;gBACb,SAAS,CAAC,GAAG;gBACb,SAAS,CAAC,IAAI;gBACd,SAAS,CAAC,GAAG;aACd,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAA;YACtE,MAAM,cAAc,GAA2B,MAAM,SAAS,CAC5D;gBACE,UAAU;gBACV,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI;aACZ,EACD,EAAE,MAAM,EAAE,CACX,CAAA;YACD,OAAO,cAAc,CAAA;QACvB,CAAC;QACD,eAAe,EAAE,MAAO;QACxB,SAAS,EAAE,MAAO;KACnB,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,OAAO,mBAAmB,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,CACT,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExD,OAAO;QACL,SAAS;QACT,SAAS;QACT,eAAe;KAChB,CAAA;AACH,CAAC,CAAA;AAED,4DAA4D;AAC5D,4DAA4D;AAC5D,qDAAqD;AACrD,MAAM,wBAAwB,GAAG,CAAC,MAAe,EAAE,EAAE;IACnD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,CAAA;IAC7D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;QAC9C,QAAQ,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACvD,MAAM,UAAU,GAAG;gBACjB,SAAS,CAAC,GAAG;gBACb,SAAS,CAAC,GAAG;gBACb,SAAS,CAAC,IAAI;gBACd,SAAS,CAAC,GAAG;aACd,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAA;YACtE,MAAM,cAAc,GAA2B,MAAM,SAAS,CAC5D;gBACE,UAAU;gBACV,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,IAAI;aACZ,EACD,EAAE,MAAM,EAAE,CACX,CAAA;YAED,8CAA8C;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,cAAc,CACxB,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,EAChD,CAAC,IAAI,EAAE,EAAE;oBACP,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,IAAI,CAAA;oBACb,CAAC;oBAED,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAA;oBAE1D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAC3C,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE;wBAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;wBAClC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;wBAE1D,MAAM,sBAAsB,GAAG,IAAI,GAAG,CACpC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAC3D,CAAA;wBAED,kEAAkE;wBAClE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CACnC,CAAC,WAAW,EAAE,EAAE,CACd,CAAC,sBAAsB,CAAC,GAAG,CACzB,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAClC,CACJ,CAAA;wBAED,kCAAkC;wBAClC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACzB,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;gCAC9B,GAAG,cAAc;gCACjB,GAAG,SAAS;6BACb,CAAA;wBACH,CAAC;oBACH,CAAC,CACF,CAAA;oBAED,OAAO,UAAU,CAAA;gBACnB,CAAC,CACF,CAAA;YACH,CAAC;YAED,OAAO,cAAc,CAAA;QACvB,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,MAAM;QACjB,eAAe,EAAE,MAAO;QACxB,SAAS,EAAE,MAAO;KACnB,CAAC,CAAA;IAEF,OAAO;QACL,SAAS,EAAE,eAAe;KAC3B,CAAA;AACH,CAAC,CAAA"}
@@ -212,6 +212,7 @@
212
212
  "slippage": ""
213
213
  },
214
214
  "main": {
215
+ "allNetworks": "",
215
216
  "allTokens": "",
216
217
  "bridgeStepDetails": "",
217
218
  "checkoutStepDetails": "",
@@ -310,10 +311,9 @@
310
311
  "tokenOnChainAmount": "",
311
312
  "tokenSearch": "",
312
313
  "valueLoss": "মান ক্ষতি",
313
- "searchChain": "",
314
- "searchChains": "",
315
314
  "searchBridges": "",
316
- "searchExchanges": ""
315
+ "searchExchanges": "",
316
+ "searchNetwork": ""
317
317
  },
318
318
  "settings": {
319
319
  "appearance": "",
@@ -212,6 +212,7 @@
212
212
  "slippage": ""
213
213
  },
214
214
  "main": {
215
+ "allNetworks": "",
215
216
  "allTokens": "",
216
217
  "bridgeStepDetails": "",
217
218
  "checkoutStepDetails": "",
@@ -310,10 +311,9 @@
310
311
  "tokenOnChainAmount": "",
311
312
  "tokenSearch": "",
312
313
  "valueLoss": "Wertverlust",
313
- "searchChain": "",
314
- "searchChains": "",
315
314
  "searchBridges": "",
316
- "searchExchanges": ""
315
+ "searchExchanges": "",
316
+ "searchNetwork": ""
317
317
  },
318
318
  "settings": {
319
319
  "appearance": "",
@@ -212,6 +212,7 @@
212
212
  "slippage": "The maximum percentage difference between the expected price, and the actual price at which a transfer is executed. This value can be changed in settings."
213
213
  },
214
214
  "main": {
215
+ "allNetworks": "All networks",
215
216
  "allTokens": "All tokens",
216
217
  "bridgeStepDetails": "Bridge from {{from}} to {{to}} via {{tool}}",
217
218
  "checkoutStepDetails": "Purchase via {{tool}}",
@@ -310,10 +311,9 @@
310
311
  "tokenOnChainAmount": "{{amount, numberExt}} {{tokenSymbol}} on {{chainName}}",
311
312
  "tokenSearch": "Search by token or address",
312
313
  "valueLoss": "Value loss",
313
- "searchChain": "Search chain",
314
- "searchChains": "Search by chain name",
315
314
  "searchBridges": "Search by bridge name",
316
- "searchExchanges": "Search by exchange name"
315
+ "searchExchanges": "Search by exchange name",
316
+ "searchNetwork": "Search network"
317
317
  },
318
318
  "settings": {
319
319
  "appearance": "Appearance",
@@ -212,6 +212,7 @@
212
212
  "slippage": "El porcentaje máximo de diferencia entre el precio esperado, y el precio real al que se ejecuta una transferencia. Este valor puede cambiarse en ajustes."
213
213
  },
214
214
  "main": {
215
+ "allNetworks": "",
215
216
  "allTokens": "Todos los tokens",
216
217
  "bridgeStepDetails": "Puente de {{from}} a {{to}} vía {{tool}}",
217
218
  "checkoutStepDetails": "Comprar a través de {{tool}}",
@@ -310,10 +311,9 @@
310
311
  "tokenOnChainAmount": "",
311
312
  "tokenSearch": "",
312
313
  "valueLoss": "Valor perdido",
313
- "searchChain": "",
314
- "searchChains": "Buscar por nombre de cadena",
315
314
  "searchBridges": "Buscar por nombre de puente",
316
- "searchExchanges": "Buscar por nombre de intercambio"
315
+ "searchExchanges": "Buscar por nombre de intercambio",
316
+ "searchNetwork": ""
317
317
  },
318
318
  "settings": {
319
319
  "appearance": "",