@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.
- package/CHANGELOG.md +19 -0
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +3 -2
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.d.ts +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.js +3 -2
- package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
- package/dist/esm/components/BottomSheet/BottomSheet.js +2 -2
- package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/esm/components/BottomSheet/types.d.ts +1 -0
- package/dist/esm/components/ChainSelect/ChainSelect.js +35 -18
- package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.d.ts +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.js +3 -3
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.d.ts +7 -0
- package/dist/esm/components/Chains/AllChainsAvatar.js +77 -0
- package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -0
- package/dist/esm/components/Chains/ChainList.d.ts +2 -1
- package/dist/esm/components/Chains/ChainList.js +2 -2
- package/dist/esm/components/Chains/ChainList.js.map +1 -1
- package/dist/esm/components/Chains/ChainSearchInput.js +2 -2
- package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
- package/dist/esm/components/Chains/SelectChainContent.js +1 -1
- package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
- package/dist/esm/components/Chains/VirtualizedChainList.d.ts +2 -1
- package/dist/esm/components/Chains/VirtualizedChainList.js +42 -10
- package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.d.ts +1 -5
- package/dist/esm/components/TokenList/TokenDetailsSheet.js +5 -3
- package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +2 -2
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenList.js +11 -53
- package/dist/esm/components/TokenList/TokenList.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.d.ts +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js +29 -25
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js +56 -37
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/types.d.ts +6 -10
- package/dist/esm/components/TokenList/useTokenSelect.js +3 -4
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js +2 -2
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.d.ts +6 -0
- package/dist/esm/hooks/useAccountsBalancesData.js +64 -0
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -0
- package/dist/esm/hooks/useFilteredByTokenBalances.d.ts +8 -0
- package/dist/esm/hooks/useFilteredByTokenBalances.js +69 -0
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -0
- package/dist/esm/hooks/useListHeight.d.ts +0 -1
- package/dist/esm/hooks/useListHeight.js +0 -1
- package/dist/esm/hooks/useListHeight.js.map +1 -1
- package/dist/esm/hooks/useToken.d.ts +2 -2
- package/dist/esm/hooks/useToken.js +13 -11
- package/dist/esm/hooks/useToken.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.d.ts +2 -3
- package/dist/esm/hooks/useTokenAddressBalance.js +10 -14
- package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalances.d.ts +6 -9
- package/dist/esm/hooks/useTokenBalances.js +57 -72
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.d.ts +11 -0
- package/dist/esm/hooks/useTokenBalancesQueries.js +74 -0
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -0
- package/dist/esm/hooks/useTokens.d.ts +6 -6
- package/dist/esm/hooks/useTokens.js +78 -70
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/i18n/bn.json +3 -3
- package/dist/esm/i18n/de.json +3 -3
- package/dist/esm/i18n/en.json +3 -3
- package/dist/esm/i18n/es.json +3 -3
- package/dist/esm/i18n/fr.json +3 -3
- package/dist/esm/i18n/hi.json +3 -3
- package/dist/esm/i18n/id.json +3 -3
- package/dist/esm/i18n/it.json +3 -3
- package/dist/esm/i18n/ja.json +3 -3
- package/dist/esm/i18n/ko.json +3 -3
- package/dist/esm/i18n/pl.json +3 -3
- package/dist/esm/i18n/pt.json +3 -3
- package/dist/esm/i18n/th.json +3 -3
- package/dist/esm/i18n/tr.json +3 -3
- package/dist/esm/i18n/uk.json +3 -3
- package/dist/esm/i18n/vi.json +3 -3
- package/dist/esm/i18n/zh.json +3 -3
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js +6 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +2 -4
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.d.ts +3 -2
- package/dist/esm/stores/chains/createChainOrderStore.js +13 -8
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/types.d.ts +2 -0
- package/dist/esm/stores/chains/useChainOrder.js +5 -1
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/types/token.d.ts +7 -2
- package/dist/esm/utils/chainType.d.ts +1 -0
- package/dist/esm/utils/chainType.js +2 -0
- package/dist/esm/utils/chainType.js.map +1 -1
- package/dist/esm/utils/token.d.ts +8 -0
- package/dist/esm/utils/token.js +29 -0
- package/dist/esm/utils/token.js.map +1 -0
- package/dist/esm/utils/tokenList.d.ts +13 -0
- package/dist/esm/utils/tokenList.js +106 -0
- package/dist/esm/utils/tokenList.js.map +1 -0
- package/package.json +8 -8
- package/package.json.tmp +7 -7
- package/src/components/AmountInput/AmountInputEndAdornment.tsx +3 -2
- package/src/components/AmountInput/PriceFormHelperText.tsx +3 -2
- package/src/components/BottomSheet/BottomSheet.tsx +2 -2
- package/src/components/BottomSheet/types.ts +1 -0
- package/src/components/ChainSelect/ChainSelect.tsx +112 -40
- package/src/components/ChainSelect/useChainSelect.ts +3 -3
- package/src/components/Chains/AllChainsAvatar.tsx +113 -0
- package/src/components/Chains/ChainList.tsx +3 -0
- package/src/components/Chains/ChainSearchInput.tsx +2 -2
- package/src/components/Chains/SelectChainContent.tsx +1 -0
- package/src/components/Chains/VirtualizedChainList.tsx +80 -12
- package/src/components/RouteCard/RouteCardEssentials.tsx +1 -1
- package/src/components/TokenList/TokenDetailsSheet.tsx +5 -10
- package/src/components/TokenList/TokenDetailsSheetContent.tsx +2 -6
- package/src/components/TokenList/TokenList.tsx +57 -129
- package/src/components/TokenList/TokenListItem.tsx +191 -166
- package/src/components/TokenList/VirtualizedTokenList.tsx +88 -48
- package/src/components/TokenList/types.ts +14 -10
- package/src/components/TokenList/useTokenSelect.ts +3 -4
- package/src/components/TransactionDetails.tsx +2 -2
- package/src/config/version.ts +1 -1
- package/src/hooks/useAccountsBalancesData.ts +101 -0
- package/src/hooks/useFilteredByTokenBalances.ts +101 -0
- package/src/hooks/useListHeight.ts +0 -1
- package/src/hooks/useToken.ts +26 -14
- package/src/hooks/useTokenAddressBalance.ts +14 -20
- package/src/hooks/useTokenBalances.ts +81 -80
- package/src/hooks/useTokenBalancesQueries.ts +94 -0
- package/src/hooks/useTokens.ts +118 -90
- package/src/i18n/bn.json +3 -3
- package/src/i18n/de.json +3 -3
- package/src/i18n/en.json +3 -3
- package/src/i18n/es.json +3 -3
- package/src/i18n/fr.json +3 -3
- package/src/i18n/hi.json +3 -3
- package/src/i18n/id.json +3 -3
- package/src/i18n/it.json +3 -3
- package/src/i18n/ja.json +3 -3
- package/src/i18n/ko.json +3 -3
- package/src/i18n/pl.json +3 -3
- package/src/i18n/pt.json +3 -3
- package/src/i18n/th.json +3 -3
- package/src/i18n/tr.json +3 -3
- package/src/i18n/uk.json +3 -3
- package/src/i18n/vi.json +3 -3
- package/src/i18n/zh.json +3 -3
- package/src/pages/SelectTokenPage/SearchTokenInput.tsx +5 -0
- package/src/pages/SelectTokenPage/SelectTokenPage.tsx +7 -13
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +1 -1
- package/src/stores/chains/createChainOrderStore.ts +17 -8
- package/src/stores/chains/types.ts +2 -0
- package/src/stores/chains/useChainOrder.ts +5 -1
- package/src/types/token.ts +11 -2
- package/src/utils/chainType.ts +2 -0
- package/src/utils/token.ts +65 -0
- package/src/utils/tokenList.ts +172 -0
- package/dist/esm/components/TokenList/utils.d.ts +0 -2
- package/dist/esm/components/TokenList/utils.js +0 -35
- package/dist/esm/components/TokenList/utils.js.map +0 -1
- package/src/components/TokenList/utils.ts +0 -42
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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 {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
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;
|
|
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 {
|
|
2
|
-
export declare const useTokenBalances: (selectedChainId?: number) => {
|
|
3
|
-
tokens: import("@lifi/sdk").
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {
|
|
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 {
|
|
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
|
|
9
|
-
|
|
10
|
-
const {
|
|
11
|
-
const
|
|
12
|
-
const {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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":"AAAA,OAAO,EAAE,
|
|
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":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAA;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,sBAAsB,GAAG,KAAM,CAAA;AAErC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,kBAAoE,EACpE,uBAAiC,EACjC,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,CAAA;IACvC,MAAM,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAErD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAC/C,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,EAAE,CAChC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;YAClC,OAAO;gBACL,QAAQ,EAAE;oBACR,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC;oBACxC,cAAc;oBACd,OAAO;oBACP,MAAM,CAAC,MAAM;iBACd;gBACD,OAAO,EAAE,KAAK,IAAoC,EAAE;oBAClD,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC/B,OAAO,EAAE,CAAA;oBACX,CAAC;oBACD,OAAO,MAAM,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;gBACvD,CAAC;gBACD,OAAO,EAAE,uBAAuB;gBAChC,eAAe,EAAE,sBAAsB;gBACvC,SAAS,EAAE,sBAAsB;gBACjC,gBAAgB,EAAE,IAAI;aACvB,CAAA;QACH,CAAC,CAAC,CACL,CAAA;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC,CAAA;IAE5D,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAEtB,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACpE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,OAAO,GAAG,GAAG,CAAA;YACjC,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAC/B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAC/C,CAAA;YAED,iDAAiD;YACjD,IAAI,WAAW,EAAE,CAAC;gBAChB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;YAClC,CAAC;YAED,0CAA0C;YAC1C,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO;gBAC9C,CAAC,CAAC,GAAG,GAAG,iBAAiB,CAAC,OAAO;gBACjC,CAAC,CAAC,CAAC,CAAA;YAEL,mFAAmF;YACnF,MAAM,mBAAmB,GAAG,WAAW,IAAI,cAAc,IAAI,GAAG,CAAA;YAEhE,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAkB,OAAO;qBAChC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;qBACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAClC,OAAO;oBACL,IAAI;oBACJ,SAAS,EAAE,CAAC,WAAW;oBACvB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;iBAClD,CAAA;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,KAAK;aACf,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const useTokens: (
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 {
|
|
7
|
-
export const useTokens = (
|
|
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: () =>
|
|
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
|
-
|
|
19
|
-
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"useTokens.js","sourceRoot":"","sources":["../../../src/hooks/useTokens.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/i18n/bn.json
CHANGED
|
@@ -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": "",
|
package/dist/esm/i18n/de.json
CHANGED
|
@@ -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": "",
|
package/dist/esm/i18n/en.json
CHANGED
|
@@ -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",
|
package/dist/esm/i18n/es.json
CHANGED
|
@@ -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": "",
|