@lifi/widget 3.29.1 → 3.30.1
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 +24 -0
- package/dist/esm/AppProvider.d.ts +0 -1
- package/dist/esm/AppProvider.js +1 -1
- package/dist/esm/AppProvider.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.d.ts +0 -9
- package/dist/esm/components/AmountInput/AmountInput.js +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputAdornment.style.d.ts +0 -1
- package/dist/esm/components/AmountInput/AmountInputAdornment.style.js +1 -6
- package/dist/esm/components/AmountInput/AmountInputAdornment.style.js.map +1 -1
- 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 -7
- package/dist/esm/components/AmountInput/PriceFormHelperText.js +4 -3
- package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.d.ts +0 -4
- package/dist/esm/components/Avatar/Avatar.js +1 -1
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Avatar/TokenAvatar.d.ts +0 -15
- package/dist/esm/components/Avatar/TokenAvatar.js +2 -2
- package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
- package/dist/esm/components/Card/CardButton.style.d.ts +0 -1
- package/dist/esm/components/Card/CardButton.style.js +0 -7
- package/dist/esm/components/Card/CardButton.style.js.map +1 -1
- 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/FeeBreakdownTooltip.d.ts +2 -3
- package/dist/esm/components/FeeBreakdownTooltip.js +1 -1
- package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
- package/dist/esm/components/Header/Header.d.ts +1 -2
- package/dist/esm/components/Header/Header.js +1 -1
- package/dist/esm/components/Header/Header.js.map +1 -1
- package/dist/esm/components/Header/WalletHeader.d.ts +0 -1
- package/dist/esm/components/Header/WalletHeader.js +1 -1
- package/dist/esm/components/Header/WalletHeader.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/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/StepActions/StepActions.d.ts +1 -10
- package/dist/esm/components/StepActions/StepActions.js +6 -6
- package/dist/esm/components/StepActions/StepActions.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.d.ts +0 -1
- package/dist/esm/components/Tabs/Tabs.style.js +1 -1
- package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
- package/dist/esm/components/Timer/TimerContent.js +1 -2
- package/dist/esm/components/Timer/TimerContent.js.map +1 -1
- package/dist/esm/components/Token/Token.d.ts +0 -2
- package/dist/esm/components/Token/Token.js +2 -2
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.d.ts +1 -5
- package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -2
- 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 -4
- package/dist/esm/components/TokenList/TokenListItem.js +30 -26
- 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 +8 -11
- package/dist/esm/components/TokenList/useTokenSelect.d.ts +0 -4
- package/dist/esm/components/TokenList/useTokenSelect.js +3 -4
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.js +1 -3
- package/dist/esm/components/TokenRate/TokenRate.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/timer/time.d.ts +0 -8
- package/dist/esm/hooks/timer/time.js.map +1 -1
- package/dist/esm/hooks/timer/useTimer.d.ts +3 -2
- 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/useAvailableChains.d.ts +2 -1
- package/dist/esm/hooks/useChain.d.ts +1 -1
- package/dist/esm/hooks/useChains.d.ts +1 -1
- package/dist/esm/hooks/useExplorer.d.ts +2 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.d.ts +9 -0
- package/dist/esm/hooks/useFilteredByTokenBalances.js +78 -0
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -0
- package/dist/esm/hooks/useListHeight.d.ts +0 -3
- package/dist/esm/hooks/useListHeight.js +2 -3
- package/dist/esm/hooks/useListHeight.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js +2 -2
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.d.ts +2 -1
- package/dist/esm/hooks/useToken.d.ts +2 -2
- package/dist/esm/hooks/useToken.js +13 -10
- package/dist/esm/hooks/useToken.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.d.ts +3 -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/useTokenSearch.js +3 -3
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.d.ts +6 -6
- package/dist/esm/hooks/useTokens.js +98 -69
- 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 +5 -5
- 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/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +27 -17
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
- package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +2 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.d.ts +0 -5
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.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/providers/I18nProvider/types.d.ts +4 -3
- package/dist/esm/providers/WalletProvider/EVMProvider.d.ts +0 -1
- package/dist/esm/providers/WalletProvider/EVMProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/EVMProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SVMProvider.d.ts +0 -1
- package/dist/esm/providers/WalletProvider/SVMProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/SVMProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SuiProvider.d.ts +0 -1
- package/dist/esm/providers/WalletProvider/SuiProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/SuiProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/UTXOProvider.d.ts +0 -1
- package/dist/esm/providers/WalletProvider/UTXOProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/UTXOProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +0 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +1 -2
- package/dist/esm/stores/bookmarks/BookmarkStore.js +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.d.ts +0 -5
- package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
- package/dist/esm/stores/chains/ChainOrderStore.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 +4 -1
- package/dist/esm/stores/chains/useChainOrder.js +5 -1
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/stores/header/types.d.ts +2 -1
- package/dist/esm/stores/header/useHeaderStore.d.ts +1 -4
- package/dist/esm/stores/header/useHeaderStore.js +3 -3
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/inputMode/useInputModeStore.d.ts +1 -1
- package/dist/esm/stores/routes/RouteExecutionStore.d.ts +2 -2
- package/dist/esm/stores/routes/RouteExecutionStore.js +1 -1
- package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/settings/types.d.ts +3 -3
- package/dist/esm/stores/settings/types.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsStore.d.ts +1 -2
- package/dist/esm/stores/settings/useSettingsStore.js +1 -1
- package/dist/esm/stores/settings/useSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.d.ts +1 -4
- package/dist/esm/stores/settings/useSplitSubvariantStore.js +3 -3
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/types/events.d.ts +0 -4
- package/dist/esm/types/events.js +0 -4
- package/dist/esm/types/events.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/fees.d.ts +1 -4
- package/dist/esm/utils/fees.js +3 -3
- package/dist/esm/utils/fees.js.map +1 -1
- package/dist/esm/utils/format.js +1 -1
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/navigationRoutes.d.ts +2 -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 +9 -0
- package/dist/esm/utils/tokenList.js +106 -0
- package/dist/esm/utils/tokenList.js.map +1 -0
- package/package.json +10 -10
- package/package.json.tmp +9 -9
- package/src/AppProvider.tsx +1 -1
- package/src/components/AmountInput/AmountInput.tsx +1 -1
- package/src/components/AmountInput/AmountInputAdornment.style.tsx +1 -7
- package/src/components/AmountInput/AmountInputEndAdornment.tsx +3 -2
- package/src/components/AmountInput/PriceFormHelperText.tsx +4 -3
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Avatar/TokenAvatar.tsx +2 -2
- package/src/components/Card/CardButton.style.tsx +0 -8
- 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/FeeBreakdownTooltip.tsx +2 -5
- package/src/components/Header/Header.tsx +1 -1
- package/src/components/Header/WalletHeader.tsx +1 -1
- package/src/components/RouteCard/RouteCardEssentials.tsx +1 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +0 -1
- package/src/components/StepActions/StepActions.tsx +6 -6
- package/src/components/Tabs/Tabs.style.tsx +1 -1
- package/src/components/Timer/TimerContent.tsx +1 -2
- package/src/components/Token/Token.tsx +2 -2
- package/src/components/TokenList/TokenDetailsSheet.tsx +4 -9
- package/src/components/TokenList/TokenDetailsSheetContent.tsx +2 -6
- package/src/components/TokenList/TokenList.tsx +57 -129
- package/src/components/TokenList/TokenListItem.tsx +177 -154
- package/src/components/TokenList/VirtualizedTokenList.tsx +88 -48
- package/src/components/TokenList/types.ts +15 -11
- package/src/components/TokenList/useTokenSelect.ts +3 -9
- package/src/components/TokenRate/TokenRate.tsx +0 -1
- package/src/components/TransactionDetails.tsx +2 -3
- package/src/config/version.ts +1 -1
- package/src/hooks/timer/time.ts +0 -10
- package/src/hooks/timer/useTimer.ts +2 -2
- package/src/hooks/useAccountsBalancesData.ts +101 -0
- package/src/hooks/useAvailableChains.ts +1 -1
- package/src/hooks/useExplorer.ts +1 -1
- package/src/hooks/useFilteredByTokenBalances.ts +130 -0
- package/src/hooks/useListHeight.ts +2 -3
- package/src/hooks/useRoutes.ts +4 -2
- package/src/hooks/useToAddressAutoPopulate.ts +1 -1
- package/src/hooks/useToken.ts +31 -13
- package/src/hooks/useTokenAddressBalance.ts +15 -20
- package/src/hooks/useTokenBalances.ts +81 -80
- package/src/hooks/useTokenBalancesQueries.ts +94 -0
- package/src/hooks/useTokenSearch.ts +4 -7
- package/src/hooks/useTokens.ts +153 -87
- 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 +5 -5
- 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/SettingsPage/SettingsCard/SettingCardExpandable.tsx +0 -1
- package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +33 -30
- package/src/pages/TransactionPage/RouteTracker.tsx +1 -1
- package/src/pages/TransactionPage/StatusBottomSheet.tsx +5 -3
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +1 -1
- package/src/providers/I18nProvider/types.ts +3 -3
- package/src/providers/WalletProvider/EVMProvider.tsx +1 -1
- package/src/providers/WalletProvider/SVMProvider.tsx +1 -1
- package/src/providers/WalletProvider/SuiProvider.tsx +1 -1
- package/src/providers/WalletProvider/UTXOProvider.tsx +1 -1
- package/src/providers/WalletProvider/WalletProvider.tsx +1 -1
- package/src/stores/bookmarks/BookmarkStore.tsx +1 -1
- package/src/stores/chains/ChainOrderStore.tsx +3 -7
- package/src/stores/chains/createChainOrderStore.ts +17 -8
- package/src/stores/chains/types.ts +3 -1
- package/src/stores/chains/useChainOrder.ts +5 -1
- package/src/stores/header/types.ts +1 -1
- package/src/stores/header/useHeaderStore.tsx +3 -3
- package/src/stores/inputMode/useInputModeStore.ts +1 -1
- package/src/stores/routes/RouteExecutionStore.tsx +4 -3
- package/src/stores/settings/types.ts +2 -6
- package/src/stores/settings/useSettingsStore.ts +1 -1
- package/src/stores/settings/useSplitSubvariantStore.tsx +5 -4
- package/src/types/events.ts +0 -4
- package/src/types/token.ts +11 -2
- package/src/utils/chainType.ts +2 -0
- package/src/utils/fees.ts +3 -3
- package/src/utils/format.ts +2 -1
- package/src/utils/navigationRoutes.ts +1 -1
- package/src/utils/token.ts +67 -0
- package/src/utils/tokenList.ts +172 -0
- package/dist/esm/AppDrawer.style.d.ts +0 -1
- package/dist/esm/AppDrawer.style.js +0 -12
- package/dist/esm/AppDrawer.style.js.map +0 -1
- package/dist/esm/components/Select.d.ts +0 -3
- package/dist/esm/components/Select.js +0 -35
- package/dist/esm/components/Select.js.map +0 -1
- package/dist/esm/components/StepActions/StepFees.d.ts +0 -5
- package/dist/esm/components/StepActions/StepFees.js +0 -32
- package/dist/esm/components/StepActions/StepFees.js.map +0 -1
- 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/dist/esm/pages/MainPage/MainPage.style.d.ts +0 -1
- package/dist/esm/pages/MainPage/MainPage.style.js +0 -8
- package/dist/esm/pages/MainPage/MainPage.style.js.map +0 -1
- package/dist/esm/pages/SelectNativeTokenPage.d.ts +0 -2
- package/dist/esm/pages/SelectNativeTokenPage.js +0 -23
- package/dist/esm/pages/SelectNativeTokenPage.js.map +0 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.d.ts +0 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.js +0 -6
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.js.map +0 -1
- package/dist/esm/pages/SelectTokenPage/types.d.ts +0 -4
- package/dist/esm/pages/SelectTokenPage/types.js +0 -6
- package/dist/esm/pages/SelectTokenPage/types.js.map +0 -1
- package/dist/esm/providers/WidgetProvider/utils.d.ts +0 -5
- package/dist/esm/providers/WidgetProvider/utils.js +0 -17
- package/dist/esm/providers/WidgetProvider/utils.js.map +0 -1
- package/dist/esm/stores/form/useFieldController.d.ts +0 -11
- package/dist/esm/stores/form/useFieldController.js +0 -20
- package/dist/esm/stores/form/useFieldController.js.map +0 -1
- package/dist/esm/stores/form/useValidation.d.ts +0 -2
- package/dist/esm/stores/form/useValidation.js +0 -14
- package/dist/esm/stores/form/useValidation.js.map +0 -1
- package/dist/esm/stores/form/useValidationActions.d.ts +0 -2
- package/dist/esm/stores/form/useValidationActions.js +0 -10
- package/dist/esm/stores/form/useValidationActions.js.map +0 -1
- package/src/AppDrawer.style.tsx +0 -12
- package/src/components/Select.tsx +0 -42
- package/src/components/StepActions/StepFees.tsx +0 -49
- package/src/components/TokenList/utils.ts +0 -42
- package/src/pages/MainPage/MainPage.style.tsx +0 -8
- package/src/pages/SelectNativeTokenPage.tsx +0 -47
- package/src/pages/SelectTokenPage/SearchTokenInput.style.tsx +0 -6
- package/src/pages/SelectTokenPage/types.ts +0 -4
- package/src/providers/WidgetProvider/utils.ts +0 -26
- package/src/stores/form/useFieldController.ts +0 -31
- package/src/stores/form/useValidation.ts +0 -15
- package/src/stores/form/useValidationActions.ts +0 -12
|
@@ -1,96 +1,97 @@
|
|
|
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 type {
|
|
7
|
-
import {
|
|
3
|
+
import type { FormType } from '../stores/form/types.js'
|
|
4
|
+
import { isSearchMatch, processTokenBalances } from '../utils/tokenList.js'
|
|
5
|
+
import { useAccountsBalancesData } from './useAccountsBalancesData.js'
|
|
6
|
+
import { useTokenBalancesQueries } from './useTokenBalancesQueries.js'
|
|
8
7
|
import { useTokens } from './useTokens.js'
|
|
9
8
|
|
|
10
|
-
const
|
|
9
|
+
export const useTokenBalances = (
|
|
10
|
+
selectedChainId?: number,
|
|
11
|
+
formType?: FormType,
|
|
12
|
+
isAllNetworks?: boolean,
|
|
13
|
+
search?: string
|
|
14
|
+
) => {
|
|
15
|
+
const {
|
|
16
|
+
allTokens,
|
|
17
|
+
isLoading: isTokensLoading,
|
|
18
|
+
isSearchLoading,
|
|
19
|
+
} = useTokens(formType, search, isAllNetworks ? undefined : selectedChainId)
|
|
11
20
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
useTokens(selectedChainId)
|
|
15
|
-
const { account } = useAccount({ chainType: chain?.chainType })
|
|
16
|
-
const { keyPrefix } = useWidgetConfig()
|
|
21
|
+
const { data: accountsWithAllTokens, isLoading: isAccountsLoading } =
|
|
22
|
+
useAccountsBalancesData(selectedChainId, formType, isAllNetworks, allTokens)
|
|
17
23
|
|
|
18
24
|
const isBalanceLoadingEnabled =
|
|
19
|
-
Boolean(
|
|
20
|
-
Boolean(tokens?.length) &&
|
|
21
|
-
Boolean(selectedChainId)
|
|
25
|
+
Boolean(accountsWithAllTokens) && !isAccountsLoading
|
|
22
26
|
|
|
23
|
-
const {
|
|
24
|
-
|
|
25
|
-
isLoading: isBalanceLoading,
|
|
26
|
-
refetch,
|
|
27
|
-
} = useQuery({
|
|
28
|
-
queryKey: [
|
|
29
|
-
getQueryKey('token-balances', keyPrefix),
|
|
30
|
-
account.address,
|
|
31
|
-
selectedChainId,
|
|
32
|
-
tokens?.length,
|
|
33
|
-
],
|
|
34
|
-
queryFn: async ({ queryKey: [, accountAddress] }) => {
|
|
35
|
-
const tokensWithBalance: TokenAmount[] = await getTokenBalances(
|
|
36
|
-
accountAddress as string,
|
|
37
|
-
tokens!
|
|
38
|
-
)
|
|
27
|
+
const { data: allTokensWithBalances, isLoading: isBalanceQueriesLoading } =
|
|
28
|
+
useTokenBalancesQueries(accountsWithAllTokens, isBalanceLoadingEnabled)
|
|
39
29
|
|
|
40
|
-
|
|
41
|
-
return tokens as TokenAmount[]
|
|
42
|
-
}
|
|
30
|
+
const { tokens: configTokens } = useWidgetConfig()
|
|
43
31
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
Number.parseFloat(formatUnits(a.amount ?? 0n, a.decimals)) *
|
|
48
|
-
Number.parseFloat(a.priceUSD ?? '0')
|
|
32
|
+
const isBalanceLoading =
|
|
33
|
+
(isBalanceQueriesLoading || isAccountsLoading) &&
|
|
34
|
+
!allTokensWithBalances?.length
|
|
49
35
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
const displayedTokensList = useMemo(() => {
|
|
37
|
+
const tokensByChain = isAllNetworks
|
|
38
|
+
? Object.values(allTokens ?? {}).flat()
|
|
39
|
+
: selectedChainId
|
|
40
|
+
? allTokens?.[selectedChainId]
|
|
41
|
+
: undefined
|
|
42
|
+
return tokensByChain?.filter((t) => isSearchMatch(t, search)) ?? []
|
|
43
|
+
}, [allTokens, isAllNetworks, selectedChainId, search])
|
|
54
44
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
45
|
+
const displayedTokensWithBalances = useMemo(() => {
|
|
46
|
+
const balancesByChain = isAllNetworks
|
|
47
|
+
? allTokensWithBalances
|
|
48
|
+
: selectedChainId
|
|
49
|
+
? allTokensWithBalances?.filter((t) => t.chainId === selectedChainId)
|
|
50
|
+
: undefined
|
|
51
|
+
const displayedTokensSet = new Set(
|
|
52
|
+
displayedTokensList?.map(
|
|
53
|
+
(t) => `${t.chainId}-${t.address.toLowerCase()}`
|
|
54
|
+
) || []
|
|
55
|
+
)
|
|
56
|
+
return balancesByChain?.filter((token) => {
|
|
57
|
+
const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`
|
|
58
|
+
// Check if token is in displayed list and has amount
|
|
59
|
+
const isInDisplayedList = displayedTokensSet.has(tokenKey) && token.amount
|
|
60
|
+
// Check if it matches search (for cached appended tokens)
|
|
61
|
+
const matchesSearch = isSearchMatch(token, search)
|
|
62
|
+
return isInDisplayedList || matchesSearch
|
|
63
|
+
})
|
|
64
|
+
}, [
|
|
65
|
+
allTokensWithBalances,
|
|
66
|
+
displayedTokensList,
|
|
67
|
+
search,
|
|
68
|
+
selectedChainId,
|
|
69
|
+
isAllNetworks,
|
|
70
|
+
])
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
const { processedTokens, withCategories } = useMemo(() => {
|
|
73
|
+
return processTokenBalances(
|
|
74
|
+
isBalanceLoading,
|
|
75
|
+
isAllNetworks ?? false,
|
|
76
|
+
configTokens,
|
|
77
|
+
selectedChainId,
|
|
78
|
+
displayedTokensList,
|
|
79
|
+
displayedTokensWithBalances
|
|
80
|
+
)
|
|
81
|
+
}, [
|
|
82
|
+
isBalanceLoading,
|
|
83
|
+
isAllNetworks,
|
|
84
|
+
configTokens,
|
|
85
|
+
selectedChainId,
|
|
86
|
+
displayedTokensList,
|
|
87
|
+
displayedTokensWithBalances,
|
|
88
|
+
])
|
|
85
89
|
|
|
86
90
|
return {
|
|
87
|
-
tokens,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
isLoading,
|
|
93
|
-
isBalanceLoading: isBalanceLoading && isBalanceLoadingEnabled,
|
|
94
|
-
refetch,
|
|
91
|
+
tokens: processedTokens ?? [],
|
|
92
|
+
withCategories,
|
|
93
|
+
isTokensLoading,
|
|
94
|
+
isSearchLoading,
|
|
95
|
+
isBalanceLoading,
|
|
95
96
|
}
|
|
96
97
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { getTokenBalances, type TokenExtended } 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 type { TokenAmount, TokenAmountExtended } from '../types/token.js'
|
|
6
|
+
import { getQueryKey } from '../utils/queries.js'
|
|
7
|
+
|
|
8
|
+
const defaultRefetchInterval = 32_000
|
|
9
|
+
|
|
10
|
+
export const useTokenBalancesQueries = (
|
|
11
|
+
accountsWithTokens?: Record<string, Record<number, TokenExtended[]>>,
|
|
12
|
+
isBalanceLoadingEnabled?: boolean
|
|
13
|
+
) => {
|
|
14
|
+
const { keyPrefix } = useWidgetConfig()
|
|
15
|
+
const firstLoadStartRef = useRef<number | null>(null)
|
|
16
|
+
|
|
17
|
+
const queryConfig = useMemo(() => {
|
|
18
|
+
if (!accountsWithTokens) {
|
|
19
|
+
return []
|
|
20
|
+
}
|
|
21
|
+
return Object.entries(accountsWithTokens).flatMap(
|
|
22
|
+
([accountAddress, chainTokens]) =>
|
|
23
|
+
Object.entries(chainTokens).map(([chainIdStr, tokens]) => {
|
|
24
|
+
const chainId = Number(chainIdStr)
|
|
25
|
+
return {
|
|
26
|
+
queryKey: [
|
|
27
|
+
getQueryKey('token-balances', keyPrefix),
|
|
28
|
+
accountAddress,
|
|
29
|
+
chainId,
|
|
30
|
+
tokens.length,
|
|
31
|
+
],
|
|
32
|
+
queryFn: async (): Promise<TokenAmountExtended[]> => {
|
|
33
|
+
if (!accountAddress || !tokens) {
|
|
34
|
+
return []
|
|
35
|
+
}
|
|
36
|
+
return await getTokenBalances(accountAddress, tokens)
|
|
37
|
+
},
|
|
38
|
+
enabled: isBalanceLoadingEnabled,
|
|
39
|
+
refetchInterval: defaultRefetchInterval,
|
|
40
|
+
staleTime: defaultRefetchInterval,
|
|
41
|
+
keepPreviousData: true,
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
)
|
|
45
|
+
}, [accountsWithTokens, isBalanceLoadingEnabled, keyPrefix])
|
|
46
|
+
|
|
47
|
+
const result = useQueries({
|
|
48
|
+
queries: queryConfig,
|
|
49
|
+
combine: (results) => {
|
|
50
|
+
const now = Date.now()
|
|
51
|
+
|
|
52
|
+
const hasLoadingQueries = results.some((result) => result.isLoading)
|
|
53
|
+
if (hasLoadingQueries && firstLoadStartRef.current === null) {
|
|
54
|
+
firstLoadStartRef.current = now
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const allComplete = results.every(
|
|
58
|
+
(result) => result.isSuccess || result.isError
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
// Reset the start time when all queries complete
|
|
62
|
+
if (allComplete) {
|
|
63
|
+
firstLoadStartRef.current = null
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Calculate time since first load started
|
|
67
|
+
const timeSinceStart = firstLoadStartRef.current
|
|
68
|
+
? now - firstLoadStartRef.current
|
|
69
|
+
: 0
|
|
70
|
+
|
|
71
|
+
// Return results if all complete OR if 500ms have passed since first query started
|
|
72
|
+
const shouldReturnResults = allComplete || timeSinceStart >= 500
|
|
73
|
+
|
|
74
|
+
if (shouldReturnResults) {
|
|
75
|
+
const data: TokenAmount[] = results
|
|
76
|
+
.flatMap((result) => result.data || [])
|
|
77
|
+
.filter((token) => token.amount)
|
|
78
|
+
return {
|
|
79
|
+
data,
|
|
80
|
+
isLoading: !allComplete,
|
|
81
|
+
isError: results.some((result) => result.isError),
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
data: undefined,
|
|
87
|
+
isLoading: true,
|
|
88
|
+
isError: false,
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
return result
|
|
94
|
+
}
|
|
@@ -35,18 +35,15 @@ export const useTokenSearch = (
|
|
|
35
35
|
new Set(
|
|
36
36
|
tokens
|
|
37
37
|
.filter((t) => t.chainId === token.chainId)
|
|
38
|
-
.map((t) => t.address)
|
|
38
|
+
.map((t) => t.address.toLowerCase())
|
|
39
39
|
),
|
|
40
40
|
formType
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
// Return undefined if the token is denied
|
|
44
44
|
if (
|
|
45
|
-
!isFormItemAllowed(
|
|
46
|
-
|
|
47
|
-
filteredConfigTokens,
|
|
48
|
-
formType,
|
|
49
|
-
(t) => t.address
|
|
45
|
+
!isFormItemAllowed(token, filteredConfigTokens, formType, (t) =>
|
|
46
|
+
t.address.toLowerCase()
|
|
50
47
|
)
|
|
51
48
|
) {
|
|
52
49
|
return undefined
|
|
@@ -58,7 +55,7 @@ export const useTokenSearch = (
|
|
|
58
55
|
if (
|
|
59
56
|
data &&
|
|
60
57
|
!data.tokens[chainId as number]?.some(
|
|
61
|
-
(t) => t.address === token.address
|
|
58
|
+
(t) => t.address.toLowerCase() === token.address.toLowerCase()
|
|
62
59
|
)
|
|
63
60
|
) {
|
|
64
61
|
const clonedData = { ...data, tokens: { ...data.tokens } }
|
package/src/hooks/useTokens.ts
CHANGED
|
@@ -1,111 +1,177 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
ChainType,
|
|
3
|
+
getToken,
|
|
4
|
+
getTokens,
|
|
5
|
+
type TokensExtendedResponse,
|
|
6
|
+
} from '@lifi/sdk'
|
|
7
|
+
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
|
3
8
|
import { useMemo } from 'react'
|
|
4
9
|
import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
|
|
5
|
-
import type {
|
|
10
|
+
import type { FormType } from '../stores/form/types.js'
|
|
11
|
+
import {
|
|
12
|
+
defaultChainIdsByType,
|
|
13
|
+
getChainTypeFromAddress,
|
|
14
|
+
} from '../utils/chainType.js'
|
|
15
|
+
import { isItemAllowed } from '../utils/item.js'
|
|
6
16
|
import { getQueryKey } from '../utils/queries.js'
|
|
7
|
-
import {
|
|
17
|
+
import { filterAllowedTokens } from '../utils/token.js'
|
|
18
|
+
|
|
19
|
+
export const useTokens = (
|
|
20
|
+
formType?: FormType,
|
|
21
|
+
search?: string,
|
|
22
|
+
chainId?: number
|
|
23
|
+
) => {
|
|
24
|
+
const {
|
|
25
|
+
tokens: configTokens,
|
|
26
|
+
chains: chainsConfig,
|
|
27
|
+
keyPrefix,
|
|
28
|
+
} = useWidgetConfig()
|
|
29
|
+
|
|
30
|
+
const { isLoading: isSearchLoading } = useBackgroundTokenSearch(
|
|
31
|
+
search,
|
|
32
|
+
chainId
|
|
33
|
+
)
|
|
8
34
|
|
|
9
|
-
export const useTokens = (selectedChainId?: number) => {
|
|
10
|
-
const { tokens: configTokens, keyPrefix } = useWidgetConfig()
|
|
11
35
|
const { data, isLoading } = useQuery({
|
|
12
36
|
queryKey: [getQueryKey('tokens', keyPrefix)],
|
|
13
|
-
queryFn: () =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
queryFn: async ({ signal }) => {
|
|
38
|
+
const chainTypes = [
|
|
39
|
+
ChainType.EVM,
|
|
40
|
+
ChainType.SVM,
|
|
41
|
+
ChainType.UTXO,
|
|
42
|
+
ChainType.MVM,
|
|
43
|
+
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
|
|
44
|
+
const tokensResponse: TokensExtendedResponse = await getTokens(
|
|
45
|
+
{
|
|
46
|
+
chainTypes,
|
|
47
|
+
orderBy: 'volumeUSD24H',
|
|
48
|
+
extended: true,
|
|
49
|
+
limit: 1000,
|
|
50
|
+
},
|
|
51
|
+
{ signal }
|
|
52
|
+
)
|
|
53
|
+
return tokensResponse
|
|
54
|
+
},
|
|
24
55
|
refetchInterval: 300_000,
|
|
25
56
|
staleTime: 300_000,
|
|
26
57
|
})
|
|
27
|
-
const {
|
|
28
|
-
chains,
|
|
29
|
-
isLoading: isSupportedChainsLoading,
|
|
30
|
-
getChainById,
|
|
31
|
-
} = useChains()
|
|
32
|
-
|
|
33
|
-
const filteredData = useMemo(() => {
|
|
34
|
-
if (isSupportedChainsLoading || !data) {
|
|
35
|
-
return
|
|
36
|
-
}
|
|
37
|
-
const chain = getChainById(selectedChainId, chains)
|
|
38
|
-
const chainAllowed = selectedChainId && chain
|
|
39
|
-
if (!chainAllowed) {
|
|
40
|
-
return
|
|
41
|
-
}
|
|
42
|
-
let filteredTokens = data.tokens?.[selectedChainId] || []
|
|
43
|
-
const includedTokens = configTokens?.include?.filter(
|
|
44
|
-
(token) => token.chainId === selectedChainId
|
|
45
|
-
)
|
|
46
|
-
if (includedTokens?.length) {
|
|
47
|
-
filteredTokens = [...includedTokens, ...filteredTokens]
|
|
48
|
-
}
|
|
49
58
|
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
const allTokens = useMemo(() => {
|
|
60
|
+
return filterAllowedTokens(
|
|
61
|
+
data?.tokens,
|
|
62
|
+
configTokens,
|
|
63
|
+
chainsConfig,
|
|
64
|
+
formType
|
|
52
65
|
)
|
|
66
|
+
}, [data?.tokens, configTokens, chainsConfig, formType])
|
|
53
67
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
return {
|
|
69
|
+
allTokens,
|
|
70
|
+
isLoading,
|
|
71
|
+
isSearchLoading,
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// This hook is used to search for tokens in the background.
|
|
76
|
+
// It updates the main tokens cache with the search results,
|
|
77
|
+
// if any of the tokens are not already in the cache.
|
|
78
|
+
const useBackgroundTokenSearch = (search?: string, chainId?: number) => {
|
|
79
|
+
const { chains: chainsConfig, keyPrefix } = useWidgetConfig()
|
|
80
|
+
const queryClient = useQueryClient()
|
|
81
|
+
|
|
82
|
+
const { isLoading: isSearchLoading } = useQuery({
|
|
83
|
+
queryKey: [getQueryKey('tokens-search', keyPrefix), search, chainId],
|
|
84
|
+
queryFn: async ({ queryKey, signal }) => {
|
|
85
|
+
const [, searchQuery, chainId] = queryKey as [string, string, number]
|
|
86
|
+
const chainTypes = [
|
|
87
|
+
ChainType.EVM,
|
|
88
|
+
ChainType.SVM,
|
|
89
|
+
ChainType.UTXO,
|
|
90
|
+
ChainType.MVM,
|
|
91
|
+
].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
|
|
92
|
+
const tokensResponse: TokensExtendedResponse = await getTokens(
|
|
93
|
+
{
|
|
94
|
+
chainTypes,
|
|
95
|
+
orderBy: 'volumeUSD24H',
|
|
96
|
+
extended: true,
|
|
97
|
+
search: searchQuery,
|
|
98
|
+
limit: 1000,
|
|
99
|
+
},
|
|
100
|
+
{ signal }
|
|
59
101
|
)
|
|
60
102
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
;(token as TokenAmount).priceUSD = matchingFilteredToken.priceUSD
|
|
103
|
+
// If the chainId is not provided, try to get it from the search query
|
|
104
|
+
let _chainId = chainId
|
|
105
|
+
if (!_chainId) {
|
|
106
|
+
const chainType = getChainTypeFromAddress(searchQuery)
|
|
107
|
+
if (chainType) {
|
|
108
|
+
_chainId = defaultChainIdsByType[chainType]
|
|
68
109
|
}
|
|
69
|
-
|
|
70
|
-
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Fallback: If the main search returned no tokens for the specific chainId,
|
|
113
|
+
// fetch a single token using the /token endpoint
|
|
114
|
+
if (_chainId && searchQuery) {
|
|
115
|
+
const existingTokens = tokensResponse.tokens[_chainId] || []
|
|
116
|
+
if (!existingTokens.length) {
|
|
117
|
+
const token = await getToken(_chainId, searchQuery, { signal })
|
|
118
|
+
if (token) {
|
|
119
|
+
tokensResponse.tokens[_chainId] = [token]
|
|
120
|
+
}
|
|
71
121
|
}
|
|
72
|
-
|
|
73
|
-
}) as TokenAmount[]
|
|
122
|
+
}
|
|
74
123
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
124
|
+
// Merge search results into main tokens cache
|
|
125
|
+
if (searchQuery) {
|
|
126
|
+
queryClient.setQueriesData<TokensExtendedResponse>(
|
|
127
|
+
{ queryKey: [getQueryKey('tokens', keyPrefix)] },
|
|
128
|
+
(data) => {
|
|
129
|
+
if (!data) {
|
|
130
|
+
return data
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const clonedData = { ...data, tokens: { ...data.tokens } }
|
|
134
|
+
|
|
135
|
+
Object.entries(tokensResponse.tokens).forEach(
|
|
136
|
+
([chainId, searchTokens]) => {
|
|
137
|
+
const chainIdNum = Number(chainId)
|
|
138
|
+
const existingTokens = clonedData.tokens[chainIdNum] || []
|
|
139
|
+
|
|
140
|
+
const existingTokenAddresses = new Set(
|
|
141
|
+
existingTokens.map((token) => token.address.toLowerCase())
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
// Find tokens in search results that don't exist in the main list
|
|
145
|
+
const newTokens = searchTokens.filter(
|
|
146
|
+
(searchToken) =>
|
|
147
|
+
!existingTokenAddresses.has(
|
|
148
|
+
searchToken.address.toLowerCase()
|
|
149
|
+
)
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
// Add new tokens to the main list
|
|
153
|
+
if (newTokens.length > 0) {
|
|
154
|
+
clonedData.tokens[chainIdNum] = [
|
|
155
|
+
...existingTokens,
|
|
156
|
+
...newTokens,
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
return clonedData
|
|
163
|
+
}
|
|
81
164
|
)
|
|
82
|
-
populatedConfigTokens.push(...filteredTokens)
|
|
83
|
-
filteredTokens = populatedConfigTokens
|
|
84
165
|
}
|
|
85
166
|
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
popularTokens,
|
|
93
|
-
chain,
|
|
94
|
-
}
|
|
95
|
-
}, [
|
|
96
|
-
chains,
|
|
97
|
-
configTokens,
|
|
98
|
-
data,
|
|
99
|
-
getChainById,
|
|
100
|
-
isSupportedChainsLoading,
|
|
101
|
-
selectedChainId,
|
|
102
|
-
])
|
|
167
|
+
return tokensResponse
|
|
168
|
+
},
|
|
169
|
+
enabled: !!search,
|
|
170
|
+
refetchInterval: 300_000,
|
|
171
|
+
staleTime: 300_000,
|
|
172
|
+
})
|
|
103
173
|
|
|
104
174
|
return {
|
|
105
|
-
|
|
106
|
-
featuredTokens: filteredData?.featuredTokens,
|
|
107
|
-
popularTokens: filteredData?.popularTokens,
|
|
108
|
-
chain: filteredData?.chain,
|
|
109
|
-
isLoading,
|
|
175
|
+
isLoading: isSearchLoading,
|
|
110
176
|
}
|
|
111
177
|
}
|
package/src/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/src/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/src/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/src/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": "",
|
package/src/i18n/fr.json
CHANGED
|
@@ -212,6 +212,7 @@
|
|
|
212
212
|
"slippage": ""
|
|
213
213
|
},
|
|
214
214
|
"main": {
|
|
215
|
+
"allNetworks": "",
|
|
215
216
|
"allTokens": "Tous les tokens",
|
|
216
217
|
"bridgeStepDetails": "Transférer de {{from}} à {{to}} via {{tool}}",
|
|
217
218
|
"checkoutStepDetails": "Achat via {{tool}}",
|
|
@@ -310,10 +311,9 @@
|
|
|
310
311
|
"tokenOnChainAmount": "",
|
|
311
312
|
"tokenSearch": "",
|
|
312
313
|
"valueLoss": "Perte de valeur",
|
|
313
|
-
"searchChain": "",
|
|
314
|
-
"searchChains": "",
|
|
315
314
|
"searchBridges": "",
|
|
316
|
-
"searchExchanges": ""
|
|
315
|
+
"searchExchanges": "",
|
|
316
|
+
"searchNetwork": ""
|
|
317
317
|
},
|
|
318
318
|
"settings": {
|
|
319
319
|
"appearance": "",
|