@rango-dev/widget-embedded 0.17.1-next.8 → 0.18.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 +116 -0
- package/dist/QueueManager.d.ts +3 -1
- package/dist/QueueManager.d.ts.map +1 -1
- package/dist/components/AppRouter.d.ts.map +1 -1
- package/dist/components/AppRoutes.d.ts.map +1 -1
- package/dist/components/BlockchainsSection/BlockchainsSection.d.ts.map +1 -1
- package/dist/components/BlockchainsSection/BlockchainsSection.styles.d.ts +1 -1
- package/dist/components/BlockchainsSection/BlockchainsSection.styles.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +690 -61
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
- package/dist/components/HeaderButtons/HomeButtons.d.ts.map +1 -1
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/Layout/Layout.styles.d.ts.map +1 -1
- package/dist/components/Layout/Layout.types.d.ts +2 -2
- package/dist/components/Layout/Layout.types.d.ts.map +1 -1
- package/dist/components/LoadingSwapDetails/LoadingSwapDetails.d.ts.map +1 -1
- package/dist/components/LoadingSwapDetails/LoadingSwapDetails.styles.d.ts +1727 -0
- package/dist/components/LoadingSwapDetails/LoadingSwapDetails.styles.d.ts.map +1 -1
- package/dist/components/NoResult/NoResult.d.ts.map +1 -1
- package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
- package/dist/components/Quote/Quote.d.ts.map +1 -1
- package/dist/components/Quote/Quote.styles.d.ts +793 -5
- package/dist/components/Quote/Quote.styles.d.ts.map +1 -1
- package/dist/components/Quote/Quote.types.d.ts +0 -1
- package/dist/components/Quote/Quote.types.d.ts.map +1 -1
- package/dist/components/Quote/QuoteSummary.styles.d.ts +157 -0
- package/dist/components/Quote/QuoteSummary.styles.d.ts.map +1 -1
- package/dist/components/Quote/index.d.ts +0 -1
- package/dist/components/Quote/index.d.ts.map +1 -1
- package/dist/components/QuoteSkeleton/QuoteSkeleton.d.ts.map +1 -0
- package/dist/components/{Quote → QuoteSkeleton}/QuoteSkeleton.styles.d.ts +314 -0
- package/dist/components/QuoteSkeleton/QuoteSkeleton.styles.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/QuoteSkeleton.types.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.d.ts +4 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.styles.d.ts +1571 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.styles.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.types.d.ts +6 -0
- package/dist/components/QuoteSkeleton/QuoteSummarySkeleton.types.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.d.ts +4 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.styles.d.ts +786 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.styles.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.types.d.ts +4 -0
- package/dist/components/QuoteSkeleton/StepSkeleton.types.d.ts.map +1 -0
- package/dist/components/QuoteSkeleton/index.d.ts +4 -0
- package/dist/components/QuoteSkeleton/index.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -1
- package/dist/components/Slippage/Slippage.d.ts.map +1 -1
- package/dist/components/Slippage/Slippage.styles.d.ts +158 -0
- package/dist/components/Slippage/Slippage.styles.d.ts.map +1 -1
- package/dist/components/SwapDetails/SwapDetails.Placeholder.d.ts.map +1 -1
- package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
- package/dist/components/SwapDetails/SwapDetails.helpers.d.ts +1 -1
- package/dist/components/SwapDetails/SwapDetails.helpers.d.ts.map +1 -1
- package/dist/components/SwapDetails/SwapDetails.styles.d.ts +628 -0
- package/dist/components/SwapDetails/SwapDetails.styles.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsCompleteModal.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.WalletState.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.helpers.d.ts +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.helpers.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts.map +1 -1
- package/dist/components/SwapsGroup/SwapsGroup.d.ts.map +1 -1
- package/dist/components/SwapsGroup/SwapsGroup.styles.d.ts +157 -0
- package/dist/components/SwapsGroup/SwapsGroup.styles.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.helpers.d.ts +2 -2
- package/dist/components/TokenList/TokenList.helpers.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.styles.d.ts +1100 -1
- package/dist/components/TokenList/TokenList.styles.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.types.d.ts +4 -9
- package/dist/components/TokenList/TokenList.types.d.ts.map +1 -1
- package/dist/components/TokenList/index.d.ts +0 -1
- package/dist/components/TokenList/index.d.ts.map +1 -1
- package/dist/components/UpdateUrl.d.ts.map +1 -1
- package/dist/constants/errors.d.ts.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/navigationRoutes.d.ts +1 -2
- package/dist/constants/navigationRoutes.d.ts.map +1 -1
- package/dist/constants/searchParams.d.ts +2 -1
- package/dist/constants/searchParams.d.ts.map +1 -1
- package/dist/containers/App/App.d.ts +3 -0
- package/dist/containers/App/App.d.ts.map +1 -0
- package/dist/containers/App/App.styles.d.ts +158 -0
- package/dist/containers/App/App.styles.d.ts.map +1 -0
- package/dist/containers/App/index.d.ts +2 -0
- package/dist/containers/App/index.d.ts.map +1 -0
- package/dist/containers/QuoteInfo/QuoteInfo.d.ts.map +1 -1
- package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts +316 -0
- package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts.map +1 -1
- package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts +3 -0
- package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts.map +1 -1
- package/dist/containers/Wallets/Wallets.d.ts +6 -0
- package/dist/containers/Wallets/Wallets.d.ts.map +1 -0
- package/dist/containers/Wallets/Wallets.types.d.ts +11 -0
- package/dist/containers/Wallets/Wallets.types.d.ts.map +1 -0
- package/dist/containers/Wallets/index.d.ts +2 -0
- package/dist/containers/Wallets/index.d.ts.map +1 -0
- package/dist/containers/Widget/Widget.d.ts +5 -0
- package/dist/containers/Widget/Widget.d.ts.map +1 -0
- package/dist/containers/Widget/Widget.types.d.ts +5 -0
- package/dist/containers/Widget/Widget.types.d.ts.map +1 -0
- package/dist/containers/Widget/index.d.ts +3 -0
- package/dist/containers/Widget/index.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/WidgetInfo.d.ts +6 -0
- package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/WidgetInfo.helpers.d.ts +20 -0
- package/dist/containers/WidgetInfo/WidgetInfo.helpers.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +21 -0
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/index.d.ts +2 -0
- package/dist/containers/WidgetInfo/index.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/WidgetProvider.d.ts +5 -0
- package/dist/containers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts +7 -0
- package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/index.d.ts +2 -0
- package/dist/containers/WidgetProvider/index.d.ts.map +1 -0
- package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts.map +1 -1
- package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts +6 -3
- package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts.map +1 -1
- package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts +1 -1
- package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts.map +1 -1
- package/dist/hooks/useForceAutoConnect.d.ts +2 -0
- package/dist/hooks/useForceAutoConnect.d.ts.map +1 -0
- package/dist/hooks/useLanguage.d.ts +1 -1
- package/dist/hooks/useLanguage.d.ts.map +1 -1
- package/dist/hooks/useNavigateBack.d.ts +1 -3
- package/dist/hooks/useNavigateBack.d.ts.map +1 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.d.ts +1 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts +2 -2
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts.map +1 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts +3 -5
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts.map +1 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts +1 -0
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts.map +1 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts +5 -1
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts.map +1 -1
- package/dist/hooks/useSwapInput.d.ts.map +1 -1
- package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
- package/dist/hooks/useTheme.d.ts +1 -1
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/index.d.ts +20 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/HistoryPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/pages/LanguagePage.d.ts.map +1 -1
- package/dist/pages/LiquiditySourcePage.d.ts.map +1 -1
- package/dist/pages/SelectBlockchainPage.d.ts.map +1 -1
- package/dist/pages/SelectSwapItemsPage.d.ts.map +1 -1
- package/dist/pages/SettingsPage.d.ts.map +1 -1
- package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
- package/dist/pages/ThemePage.d.ts.map +1 -1
- package/dist/pages/WalletsPage.d.ts.map +1 -1
- package/dist/store/AppStore.d.ts +37 -1
- package/dist/store/AppStore.d.ts.map +1 -1
- package/dist/store/app.d.ts +39 -2
- package/dist/store/app.d.ts.map +1 -1
- package/dist/store/notification.d.ts +4 -3
- package/dist/store/notification.d.ts.map +1 -1
- package/dist/store/quote.d.ts +9 -9
- package/dist/store/quote.d.ts.map +1 -1
- package/dist/store/slices/config.d.ts.map +1 -1
- package/dist/store/slices/data.d.ts +2 -2
- package/dist/store/slices/data.d.ts.map +1 -1
- package/dist/store/slices/settings.d.ts +39 -0
- package/dist/store/slices/settings.d.ts.map +1 -0
- package/dist/store/ui.d.ts +2 -1
- package/dist/store/ui.d.ts.map +1 -1
- package/dist/store/wallets.d.ts +9 -5
- package/dist/store/wallets.d.ts.map +1 -1
- package/dist/types/config.d.ts +36 -3
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/swap.d.ts +4 -14
- package/dist/types/swap.d.ts.map +1 -1
- package/dist/types/wallets.d.ts +15 -1
- package/dist/types/wallets.d.ts.map +1 -1
- package/dist/utils/colors.d.ts.map +1 -1
- package/dist/utils/configs.d.ts +1 -0
- package/dist/utils/configs.d.ts.map +1 -1
- package/dist/utils/meta.d.ts +2 -1
- package/dist/utils/meta.d.ts.map +1 -1
- package/dist/utils/providers.d.ts +2 -2
- package/dist/utils/providers.d.ts.map +1 -1
- package/dist/utils/queue.d.ts +2 -2
- package/dist/utils/queue.d.ts.map +1 -1
- package/dist/utils/quote.d.ts +1 -1
- package/dist/utils/quote.d.ts.map +1 -1
- package/dist/utils/settings.d.ts +4 -1
- package/dist/utils/settings.d.ts.map +1 -1
- package/dist/utils/swap.d.ts +13 -5
- package/dist/utils/swap.d.ts.map +1 -1
- package/dist/utils/time.d.ts +1 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/wallets.d.ts +7 -8
- package/dist/utils/wallets.d.ts.map +1 -1
- package/package.json +12 -10
- package/src/QueueManager.tsx +4 -3
- package/src/components/AppRouter.tsx +5 -27
- package/src/components/AppRoutes.tsx +54 -33
- package/src/components/BlockchainList/BlockchainList.styles.ts +2 -2
- package/src/components/BlockchainsSection/BlockchainsSection.styles.ts +1 -1
- package/src/components/BlockchainsSection/BlockchainsSection.tsx +19 -10
- package/src/components/ConfirmWalletsModal/ConfirmWallets.styles.ts +29 -10
- package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +15 -7
- package/src/components/ConfirmWalletsModal/WalletList.tsx +3 -3
- package/src/components/HeaderButtons/HomeButtons.tsx +28 -18
- package/src/components/Layout/Layout.styles.ts +2 -0
- package/src/components/Layout/Layout.tsx +20 -7
- package/src/components/Layout/Layout.types.ts +2 -2
- package/src/components/LoadingSwapDetails/LoadingSwapDetails.styles.ts +65 -61
- package/src/components/LoadingSwapDetails/LoadingSwapDetails.tsx +28 -34
- package/src/components/NoResult/NoResult.helpers.ts +12 -12
- package/src/components/NoResult/NoResult.tsx +2 -5
- package/src/components/NotificationContent/NotificationContent.tsx +2 -1
- package/src/components/Quote/Quote.styles.ts +49 -12
- package/src/components/Quote/Quote.tsx +107 -38
- package/src/components/Quote/Quote.types.ts +0 -1
- package/src/components/Quote/QuoteSummary.styles.ts +9 -8
- package/src/components/Quote/QuoteSummary.tsx +2 -2
- package/src/components/Quote/index.ts +0 -1
- package/src/components/QuoteSkeleton/QuoteSkeleton.styles.ts +42 -0
- package/src/components/QuoteSkeleton/QuoteSkeleton.tsx +30 -0
- package/src/components/QuoteSkeleton/QuoteSummarySkeleton.styles.ts +57 -0
- package/src/components/QuoteSkeleton/QuoteSummarySkeleton.tsx +76 -0
- package/src/components/QuoteSkeleton/QuoteSummarySkeleton.types.ts +6 -0
- package/src/components/QuoteSkeleton/StepSkeleton.styles.ts +33 -0
- package/src/components/QuoteSkeleton/StepSkeleton.tsx +44 -0
- package/src/components/QuoteSkeleton/StepSkeleton.types.ts +1 -0
- package/src/components/QuoteSkeleton/index.ts +3 -0
- package/src/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.tsx +1 -1
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.ts +11 -4
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.ts +8 -1
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +13 -13
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +1 -0
- package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +3 -3
- package/src/components/Slippage/Slippage.styles.ts +15 -5
- package/src/components/Slippage/Slippage.tsx +11 -10
- package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +5 -8
- package/src/components/SwapDetails/SwapDetails.helpers.tsx +1 -1
- package/src/components/SwapDetails/SwapDetails.styles.ts +36 -33
- package/src/components/SwapDetails/SwapDetails.tsx +28 -39
- package/src/components/SwapDetailsAlerts/SwapDetailsAlerts.Warning.tsx +1 -1
- package/src/components/SwapDetailsModal/SwapDetailsCompleteModal.tsx +4 -3
- package/src/components/SwapDetailsModal/SwapDetailsModal.Cancel.tsx +2 -2
- package/src/components/SwapDetailsModal/SwapDetailsModal.WalletState.tsx +14 -8
- package/src/components/SwapDetailsModal/SwapDetailsModal.helpers.tsx +1 -1
- package/src/components/SwapDetailsModal/SwapDetailsModal.tsx +1 -1
- package/src/components/SwapDetailsModal/SwapDetailsModal.types.ts +1 -1
- package/src/components/SwapsGroup/SwapsGroup.styles.ts +10 -1
- package/src/components/SwapsGroup/SwapsGroup.tsx +3 -5
- package/src/components/TokenList/TokenList.helpers.ts +2 -2
- package/src/components/TokenList/TokenList.styles.ts +74 -38
- package/src/components/TokenList/TokenList.tsx +30 -20
- package/src/components/TokenList/TokenList.types.ts +4 -10
- package/src/components/TokenList/index.ts +0 -1
- package/src/components/UpdateUrl.tsx +4 -5
- package/src/constants/errors.ts +9 -5
- package/src/constants/index.ts +1 -0
- package/src/constants/navigationRoutes.ts +7 -8
- package/src/constants/searchParams.ts +1 -0
- package/src/containers/App/App.styles.ts +18 -0
- package/src/containers/App/App.tsx +52 -0
- package/src/containers/App/index.ts +1 -0
- package/src/containers/QuoteInfo/QuoteInfo.styles.ts +17 -1
- package/src/containers/QuoteInfo/QuoteInfo.tsx +46 -44
- package/src/containers/QuoteInfo/QuoteInfo.types.ts +3 -0
- package/src/{Wallets.tsx → containers/Wallets/Wallets.tsx} +25 -31
- package/src/containers/Wallets/Wallets.types.ts +12 -0
- package/src/containers/Wallets/index.ts +1 -0
- package/src/containers/Widget/Widget.tsx +19 -0
- package/src/containers/Widget/Widget.types.ts +5 -0
- package/src/containers/Widget/index.ts +2 -0
- package/src/containers/WidgetInfo/WidgetInfo.helpers.ts +64 -0
- package/src/containers/WidgetInfo/WidgetInfo.tsx +62 -0
- package/src/containers/WidgetInfo/WidgetInfo.types.ts +21 -0
- package/src/containers/WidgetInfo/index.ts +1 -0
- package/src/containers/WidgetProvider/WidgetProvider.tsx +28 -0
- package/src/containers/WidgetProvider/WidgetProvider.types.ts +7 -0
- package/src/containers/WidgetProvider/index.ts +1 -0
- package/src/hooks/useConfirmSwap/useConfirmSwap.helpers.ts +15 -11
- package/src/hooks/useConfirmSwap/useConfirmSwap.ts +21 -20
- package/src/hooks/useConfirmSwap/useConfirmSwap.types.ts +1 -1
- package/src/hooks/useForceAutoConnect.ts +27 -0
- package/src/hooks/useLanguage.ts +4 -5
- package/src/hooks/useNavigateBack.ts +3 -52
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.ts +1 -1
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.ts +37 -7
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.ts +60 -0
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.test.ts +78 -3
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.ts +15 -6
- package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.ts +6 -1
- package/src/hooks/useSwapInput.ts +86 -28
- package/src/hooks/useSyncStoresWithConfig.ts +18 -5
- package/src/hooks/useTheme.ts +4 -5
- package/src/index.ts +53 -5
- package/src/pages/ConfirmSwapPage.tsx +61 -33
- package/src/pages/HistoryPage.tsx +2 -7
- package/src/pages/Home.tsx +55 -81
- package/src/pages/LanguagePage.tsx +0 -5
- package/src/pages/LiquiditySourcePage.tsx +3 -7
- package/src/pages/SelectBlockchainPage.tsx +26 -18
- package/src/pages/SelectSwapItemsPage.tsx +13 -26
- package/src/pages/SettingsPage.tsx +26 -17
- package/src/pages/SwapDetailsPage.tsx +3 -4
- package/src/pages/ThemePage.tsx +2 -7
- package/src/pages/WalletsPage.tsx +5 -8
- package/src/services/httpService.ts +1 -1
- package/src/store/AppStore.tsx +7 -1
- package/src/store/app.ts +31 -5
- package/src/store/quote.ts +3 -4
- package/src/store/slices/config.ts +1 -0
- package/src/store/slices/data.ts +10 -6
- package/src/store/slices/settings.ts +168 -0
- package/src/store/wallets.ts +57 -29
- package/src/types/config.ts +48 -3
- package/src/types/swap.ts +4 -13
- package/src/types/wallets.ts +18 -1
- package/src/utils/colors.ts +2 -1
- package/src/utils/configs.ts +2 -1
- package/src/utils/date.ts +1 -1
- package/src/utils/meta.ts +8 -1
- package/src/utils/providers.ts +8 -5
- package/src/utils/queue.ts +2 -2
- package/src/utils/quote.ts +7 -7
- package/src/utils/settings.ts +11 -5
- package/src/utils/swap.ts +46 -40
- package/src/utils/time.ts +1 -1
- package/src/utils/wallets.ts +127 -144
- package/dist/Wallets.d.ts +0 -18
- package/dist/Wallets.d.ts.map +0 -1
- package/dist/Widget.d.ts +0 -9
- package/dist/Widget.d.ts.map +0 -1
- package/dist/components/LoadingSwapDetails/LoadingSwapDetailStep.d.ts +0 -4
- package/dist/components/LoadingSwapDetails/LoadingSwapDetailStep.d.ts.map +0 -1
- package/dist/components/LoadingSwapDetails/LoadingSwapDetails.types.d.ts +0 -4
- package/dist/components/LoadingSwapDetails/LoadingSwapDetails.types.d.ts.map +0 -1
- package/dist/components/Quote/QuoteSkeleton.d.ts.map +0 -1
- package/dist/components/Quote/QuoteSkeleton.styles.d.ts.map +0 -1
- package/dist/components/Quote/QuoteSkeleton.types.d.ts.map +0 -1
- package/dist/store/settings.d.ts +0 -82
- package/dist/store/settings.d.ts.map +0 -1
- package/src/Widget.tsx +0 -106
- package/src/components/LoadingSwapDetails/LoadingSwapDetailStep.tsx +0 -41
- package/src/components/LoadingSwapDetails/LoadingSwapDetails.types.ts +0 -3
- package/src/components/Quote/QuoteSkeleton.styles.ts +0 -110
- package/src/components/Quote/QuoteSkeleton.tsx +0 -108
- package/src/store/settings.ts +0 -161
- /package/dist/components/{Quote → QuoteSkeleton}/QuoteSkeleton.d.ts +0 -0
- /package/dist/components/{Quote → QuoteSkeleton}/QuoteSkeleton.types.d.ts +0 -0
- /package/src/components/{Quote → QuoteSkeleton}/QuoteSkeleton.types.ts +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useWallets } from '@rango-dev/wallets-react';
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
|
|
4
|
+
import { SearchParams } from '../constants/searchParams';
|
|
5
|
+
import { useAppStore } from '../store/AppStore';
|
|
6
|
+
|
|
7
|
+
export function useForceAutoConnect(): void {
|
|
8
|
+
const { connect, state } = useWallets();
|
|
9
|
+
const initiated = useRef<{ [key: string]: boolean }>({});
|
|
10
|
+
const { fetchStatus } = useAppStore();
|
|
11
|
+
const walletType =
|
|
12
|
+
new URLSearchParams(location.search).get(SearchParams.AUTO_CONNECT) || '';
|
|
13
|
+
const walletState = state(walletType);
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const shouldTryConnect =
|
|
17
|
+
fetchStatus === 'success' &&
|
|
18
|
+
walletType &&
|
|
19
|
+
walletState.installed &&
|
|
20
|
+
!walletState.connecting &&
|
|
21
|
+
!walletState.connected;
|
|
22
|
+
if (shouldTryConnect && !initiated.current[walletType]) {
|
|
23
|
+
initiated.current[walletType] = true;
|
|
24
|
+
void connect(walletType);
|
|
25
|
+
}
|
|
26
|
+
}, [walletState, fetchStatus]);
|
|
27
|
+
}
|
package/src/hooks/useLanguage.ts
CHANGED
|
@@ -3,18 +3,17 @@ import type { LanguageItem } from '../constants/languages';
|
|
|
3
3
|
import { type Language } from '@rango-dev/ui';
|
|
4
4
|
|
|
5
5
|
import { DEFAULT_LANGUAGE, LANGUAGES } from '../constants/languages';
|
|
6
|
-
import {
|
|
6
|
+
import { useAppStore } from '../store/AppStore';
|
|
7
7
|
|
|
8
8
|
interface UseLanguage {
|
|
9
9
|
languages: LanguageItem[];
|
|
10
10
|
defaultLanguage: Language;
|
|
11
11
|
activeLanguage: Language;
|
|
12
|
-
changeLanguage: (language
|
|
12
|
+
changeLanguage: (language?: Language) => void;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export function useLanguage(): UseLanguage {
|
|
16
|
-
const language =
|
|
17
|
-
const setLanguage = useSettingsStore.use.setLanguage();
|
|
16
|
+
const { setLanguage, language } = useAppStore();
|
|
18
17
|
const languages = LANGUAGES;
|
|
19
18
|
const defaultLanguage = DEFAULT_LANGUAGE;
|
|
20
19
|
|
|
@@ -22,6 +21,6 @@ export function useLanguage(): UseLanguage {
|
|
|
22
21
|
activeLanguage: language,
|
|
23
22
|
languages,
|
|
24
23
|
defaultLanguage,
|
|
25
|
-
changeLanguage: setLanguage,
|
|
24
|
+
changeLanguage: (language) => setLanguage(language || DEFAULT_LANGUAGE),
|
|
26
25
|
};
|
|
27
26
|
}
|
|
@@ -1,55 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useNavigate } from 'react-router-dom';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import { useQuoteStore } from '../store/quote';
|
|
5
|
-
|
|
6
|
-
export function useNavigateBack() {
|
|
7
|
-
const isRouterInContext = useInRouterContext();
|
|
3
|
+
export function useNavigateBack(): () => void {
|
|
8
4
|
const navigate = useNavigate();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
navigationRoutes;
|
|
12
|
-
|
|
13
|
-
const navigateBackFrom = (currentRoute: string) => {
|
|
14
|
-
if (currentRoute === navigationRoutes.swapDetails) {
|
|
15
|
-
return navigate('/' + navigationRoutes.swaps, { replace: true });
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
!isRouterInContext ||
|
|
20
|
-
(window.history.state && window.history.state.idx > 0)
|
|
21
|
-
) {
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
|
23
|
-
navigate(-1);
|
|
24
|
-
} else {
|
|
25
|
-
if (
|
|
26
|
-
[navigationRoutes.settings, navigationRoutes.wallets].includes(
|
|
27
|
-
currentRoute
|
|
28
|
-
) &&
|
|
29
|
-
quoteWalletsConfirmed
|
|
30
|
-
) {
|
|
31
|
-
return navigate('/' + navigationRoutes.confirmSwap, { replace: true });
|
|
32
|
-
}
|
|
33
|
-
if (
|
|
34
|
-
[
|
|
35
|
-
navigationRoutes.fromSwap,
|
|
36
|
-
navigationRoutes.toSwap,
|
|
37
|
-
navigationRoutes.settings,
|
|
38
|
-
navigationRoutes.wallets,
|
|
39
|
-
navigationRoutes.swaps,
|
|
40
|
-
navigationRoutes.confirmSwap,
|
|
41
|
-
].includes(currentRoute)
|
|
42
|
-
) {
|
|
43
|
-
navigate(navigationRoutes.home, { replace: true });
|
|
44
|
-
} else if (currentRoute === navigationRoutes.fromBlockchain) {
|
|
45
|
-
navigate('/' + navigationRoutes.fromSwap, { replace: true });
|
|
46
|
-
} else if (currentRoute === navigationRoutes.toBlockchain) {
|
|
47
|
-
navigate('/' + navigationRoutes.fromSwap, { replace: true });
|
|
48
|
-
} else if (currentRoute === navigationRoutes.liquiditySources) {
|
|
49
|
-
navigate('/' + navigationRoutes.settings, { replace: true });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
return { navigateBackFrom };
|
|
5
|
+
return () => navigate(-1);
|
|
55
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const MOST_USED_BLOCKCHAINS = ['ETH', 'COSMOS', 'OSMOSIS'];
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
PrepareListOptions,
|
|
3
|
+
PrepareOutput,
|
|
4
|
+
} from './usePrepareBlockchainList.types';
|
|
2
5
|
import type { BlockchainMeta } from 'rango-sdk';
|
|
3
6
|
|
|
4
|
-
import {
|
|
7
|
+
import { MOST_USED_BLOCKCHAINS } from './usePrepareBlockchainList.constants';
|
|
5
8
|
|
|
6
9
|
export function prepare(
|
|
7
10
|
blockchains: BlockchainMeta[],
|
|
8
11
|
preferredBlockchains: string[],
|
|
9
12
|
options?: PrepareListOptions
|
|
10
|
-
) {
|
|
13
|
+
): PrepareOutput {
|
|
11
14
|
/*
|
|
12
15
|
* TODO:
|
|
13
16
|
* We copying the `blockchains` which can causes performance penalties but we should because we are mutating the original object.
|
|
@@ -25,17 +28,37 @@ export function prepare(
|
|
|
25
28
|
let preferredBlockchainsWithoutMainList = preferredBlockchains;
|
|
26
29
|
|
|
27
30
|
if (preferredBlockchains.length <= options.limit) {
|
|
28
|
-
|
|
29
|
-
*
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* if we want to show 10 items (aka `options.limit`)
|
|
34
|
+
* and have these items as our preferred list: [x,y,z]
|
|
35
|
+
* and these as our main list: [A, B, C, D, E, F, G, H, I, J]
|
|
36
|
+
* the final list will be like this: [...preferred, ...mainList].
|
|
37
|
+
*
|
|
38
|
+
* Since we have a limit (e.g. 10) on our list (preferred + mainList),
|
|
39
|
+
* we only should check those items from main list that will be in final list.
|
|
40
|
+
*
|
|
41
|
+
* finalListWithoutLimit = [x,y,z, A, B, C, D, E, F, G, H, I, J]
|
|
42
|
+
* finalListWithLimit = [x,y,z, A, B, C, D, E, F, G]
|
|
43
|
+
*
|
|
44
|
+
* As you can see, [H, I, J] will not be in our list.
|
|
45
|
+
*
|
|
46
|
+
* The following code only check preffred blockchain
|
|
47
|
+
* shouldn't be in first 7 of 10 items in main list. (Since, the last 3 items will not be in the final list and we should check those.)
|
|
30
48
|
*/
|
|
31
|
-
|
|
49
|
+
const howManyItemsShouldBeCheckedFromMainList =
|
|
50
|
+
options.limit - preferredBlockchains.length;
|
|
51
|
+
|
|
52
|
+
for (let i = 0; i <= howManyItemsShouldBeCheckedFromMainList; i++) {
|
|
32
53
|
const blockchain = list[i];
|
|
54
|
+
|
|
33
55
|
preferredBlockchainsWithoutMainList =
|
|
34
56
|
preferredBlockchainsWithoutMainList.filter((preferredBlockchain) => {
|
|
35
57
|
return blockchain.name !== preferredBlockchain;
|
|
36
58
|
});
|
|
37
59
|
}
|
|
38
60
|
}
|
|
61
|
+
|
|
39
62
|
list.sort(
|
|
40
63
|
generateSortByPreferredBlockchainsFor(preferredBlockchainsWithoutMainList)
|
|
41
64
|
);
|
|
@@ -57,7 +80,7 @@ export function sortByMostUsedBlockchains(
|
|
|
57
80
|
a: BlockchainMeta,
|
|
58
81
|
b: BlockchainMeta
|
|
59
82
|
) {
|
|
60
|
-
const mostUsed =
|
|
83
|
+
const mostUsed = MOST_USED_BLOCKCHAINS;
|
|
61
84
|
const aIndexInMostUsed = mostUsed.findIndex((token) => token === a.name);
|
|
62
85
|
const bIndexInMostUsed = mostUsed.findIndex((token) => token === b.name);
|
|
63
86
|
const aIsMostUsed = aIndexInMostUsed > -1;
|
|
@@ -106,3 +129,10 @@ export function generateSortByPreferredBlockchainsFor(
|
|
|
106
129
|
return 0;
|
|
107
130
|
};
|
|
108
131
|
}
|
|
132
|
+
|
|
133
|
+
export function isInVisibleList(
|
|
134
|
+
blockchain: string,
|
|
135
|
+
prepareOutput: PrepareOutput
|
|
136
|
+
): boolean {
|
|
137
|
+
return !!prepareOutput.list.find((item) => item.name === blockchain);
|
|
138
|
+
}
|
|
@@ -2,6 +2,66 @@ import type { BlockchainMeta } from 'rango-sdk';
|
|
|
2
2
|
|
|
3
3
|
import { TransactionType } from 'rango-sdk';
|
|
4
4
|
|
|
5
|
+
export const sampleDefaultBlockchainNames = [
|
|
6
|
+
'ETH',
|
|
7
|
+
'COSMOS',
|
|
8
|
+
'OSMOSIS',
|
|
9
|
+
'BSC',
|
|
10
|
+
'ARBITRUM',
|
|
11
|
+
'POLYGON',
|
|
12
|
+
'ZKSYNC',
|
|
13
|
+
'STARKNET',
|
|
14
|
+
'OPTIMISM',
|
|
15
|
+
'AVAX_CCHAIN',
|
|
16
|
+
'POLYGONZK',
|
|
17
|
+
'LINEA',
|
|
18
|
+
'TRON',
|
|
19
|
+
'BTC',
|
|
20
|
+
'NEUTRON',
|
|
21
|
+
'NOBLE',
|
|
22
|
+
'SOLANA',
|
|
23
|
+
'CRONOS',
|
|
24
|
+
'BNB',
|
|
25
|
+
'AURORA',
|
|
26
|
+
'MAYA',
|
|
27
|
+
'THOR',
|
|
28
|
+
'BOBA',
|
|
29
|
+
'MOONBEAM',
|
|
30
|
+
'MOONRIVER',
|
|
31
|
+
'OKC',
|
|
32
|
+
'BOBA_AVALANCHE',
|
|
33
|
+
'LTC',
|
|
34
|
+
'BCH',
|
|
35
|
+
'HECO',
|
|
36
|
+
'STARGAZE',
|
|
37
|
+
'CRYPTO_ORG',
|
|
38
|
+
'CHIHUAHUA',
|
|
39
|
+
'BANDCHAIN',
|
|
40
|
+
'COMDEX',
|
|
41
|
+
'REGEN',
|
|
42
|
+
'IRIS',
|
|
43
|
+
'EMONEY',
|
|
44
|
+
'JUNO',
|
|
45
|
+
'STRIDE',
|
|
46
|
+
'MARS',
|
|
47
|
+
'TERRA',
|
|
48
|
+
'BITSONG',
|
|
49
|
+
'AKASH',
|
|
50
|
+
'KI',
|
|
51
|
+
'PERSISTENCE',
|
|
52
|
+
'MEDIBLOC',
|
|
53
|
+
'KUJIRA',
|
|
54
|
+
'SENTINEL',
|
|
55
|
+
'INJECTIVE',
|
|
56
|
+
'SECRET',
|
|
57
|
+
'KONSTELLATION',
|
|
58
|
+
'STARNAME',
|
|
59
|
+
'BITCANNA',
|
|
60
|
+
'UMEE',
|
|
61
|
+
'DESMOS',
|
|
62
|
+
'LUMNETWORK',
|
|
63
|
+
];
|
|
64
|
+
|
|
5
65
|
export const sampleBlockchains: BlockchainMeta[] = [
|
|
6
66
|
{
|
|
7
67
|
name: 'ETH',
|
|
@@ -2,7 +2,7 @@ import type { BlockchainMeta } from 'rango-sdk';
|
|
|
2
2
|
|
|
3
3
|
import { beforeEach, describe, expect, it } from 'vitest';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { MOST_USED_BLOCKCHAINS } from './usePrepareBlockchainList.constants';
|
|
6
6
|
import {
|
|
7
7
|
generateSortByPreferredBlockchainsFor,
|
|
8
8
|
prepare,
|
|
@@ -20,8 +20,8 @@ describe('usePrepareBlockchainList', () => {
|
|
|
20
20
|
it('should sort blockchains by most used ones.', () => {
|
|
21
21
|
const sortedBlockchainsList = sample.sort(sortByMostUsedBlockchains);
|
|
22
22
|
|
|
23
|
-
const mostUsedCount =
|
|
24
|
-
const expected =
|
|
23
|
+
const mostUsedCount = MOST_USED_BLOCKCHAINS.length;
|
|
24
|
+
const expected = MOST_USED_BLOCKCHAINS;
|
|
25
25
|
const received = sortedBlockchainsList
|
|
26
26
|
.map((blockchain) => blockchain.name)
|
|
27
27
|
.slice(0, mostUsedCount);
|
|
@@ -270,4 +270,79 @@ describe('usePrepareBlockchainList', () => {
|
|
|
270
270
|
...received.more.map((blockchain) => blockchain.name),
|
|
271
271
|
]);
|
|
272
272
|
});
|
|
273
|
+
|
|
274
|
+
it.only('Last item of the main list should be moved to front if it selected again.', () => {
|
|
275
|
+
const listLimit = 10;
|
|
276
|
+
const preferredBlockchains = ['AVAX_CCHAIN', 'BTC'];
|
|
277
|
+
const expected = [
|
|
278
|
+
'AVAX_CCHAIN',
|
|
279
|
+
'BTC',
|
|
280
|
+
'ETH',
|
|
281
|
+
'COSMOS',
|
|
282
|
+
'OSMOSIS',
|
|
283
|
+
'BSC',
|
|
284
|
+
'ARBITRUM',
|
|
285
|
+
'POLYGON',
|
|
286
|
+
'ZKSYNC',
|
|
287
|
+
'STARKNET',
|
|
288
|
+
'OPTIMISM',
|
|
289
|
+
'POLYGONZK',
|
|
290
|
+
'LINEA',
|
|
291
|
+
'TRON',
|
|
292
|
+
'NEUTRON',
|
|
293
|
+
'NOBLE',
|
|
294
|
+
'SOLANA',
|
|
295
|
+
'CRONOS',
|
|
296
|
+
'BNB',
|
|
297
|
+
'AURORA',
|
|
298
|
+
'MAYA',
|
|
299
|
+
'THOR',
|
|
300
|
+
'BOBA',
|
|
301
|
+
'MOONBEAM',
|
|
302
|
+
'MOONRIVER',
|
|
303
|
+
'OKC',
|
|
304
|
+
'BOBA_AVALANCHE',
|
|
305
|
+
'LTC',
|
|
306
|
+
'BCH',
|
|
307
|
+
'HECO',
|
|
308
|
+
'STARGAZE',
|
|
309
|
+
'CRYPTO_ORG',
|
|
310
|
+
'CHIHUAHUA',
|
|
311
|
+
'BANDCHAIN',
|
|
312
|
+
'COMDEX',
|
|
313
|
+
'REGEN',
|
|
314
|
+
'IRIS',
|
|
315
|
+
'EMONEY',
|
|
316
|
+
'JUNO',
|
|
317
|
+
'STRIDE',
|
|
318
|
+
'MARS',
|
|
319
|
+
'TERRA',
|
|
320
|
+
'BITSONG',
|
|
321
|
+
'AKASH',
|
|
322
|
+
'KI',
|
|
323
|
+
'PERSISTENCE',
|
|
324
|
+
'MEDIBLOC',
|
|
325
|
+
'KUJIRA',
|
|
326
|
+
'SENTINEL',
|
|
327
|
+
'INJECTIVE',
|
|
328
|
+
'SECRET',
|
|
329
|
+
'KONSTELLATION',
|
|
330
|
+
'STARNAME',
|
|
331
|
+
'BITCANNA',
|
|
332
|
+
'UMEE',
|
|
333
|
+
'DESMOS',
|
|
334
|
+
'LUMNETWORK',
|
|
335
|
+
];
|
|
336
|
+
|
|
337
|
+
const output = prepare(sample, preferredBlockchains, {
|
|
338
|
+
limit: listLimit,
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
const received = [
|
|
342
|
+
...output.list.map((blockchain) => blockchain.name),
|
|
343
|
+
...output.more.map((blockchain) => blockchain.name),
|
|
344
|
+
];
|
|
345
|
+
|
|
346
|
+
expect(expected).toEqual(received);
|
|
347
|
+
});
|
|
273
348
|
});
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
PrepareListOptions,
|
|
3
|
-
|
|
3
|
+
UsePrepareList,
|
|
4
4
|
} from './usePrepareBlockchainList.types';
|
|
5
5
|
import type { BlockchainMeta } from 'rango-sdk';
|
|
6
6
|
|
|
7
7
|
import { useEffect } from 'react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { useAppStore } from '../../store/AppStore';
|
|
10
10
|
|
|
11
|
-
import { prepare } from './usePrepareBlockchainList.helpers';
|
|
11
|
+
import { isInVisibleList, prepare } from './usePrepareBlockchainList.helpers';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
*
|
|
@@ -19,12 +19,21 @@ import { prepare } from './usePrepareBlockchainList.helpers';
|
|
|
19
19
|
export function usePrepareBlockchainList(
|
|
20
20
|
blockchains: BlockchainMeta[],
|
|
21
21
|
options?: PrepareListOptions
|
|
22
|
-
):
|
|
23
|
-
const { preferredBlockchains, addPreferredBlockchain } =
|
|
22
|
+
): UsePrepareList {
|
|
23
|
+
const { preferredBlockchains, addPreferredBlockchain } = useAppStore();
|
|
24
24
|
|
|
25
25
|
useEffect(() => {
|
|
26
26
|
if (options?.selected) {
|
|
27
|
-
|
|
27
|
+
const output = prepare(blockchains, preferredBlockchains, options);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* We only add a new blockchain to preferred when it's not in the main list
|
|
31
|
+
* In this way we can guarantee we will be able to regenerate the same list always.
|
|
32
|
+
* And also it helps us to avoid jumping for the last item of the main list (e.g. tenth item of our list).
|
|
33
|
+
*/
|
|
34
|
+
if (!isInVisibleList(options.selected, output)) {
|
|
35
|
+
addPreferredBlockchain(options?.selected);
|
|
36
|
+
}
|
|
28
37
|
}
|
|
29
38
|
}, [options?.selected]);
|
|
30
39
|
|
|
@@ -5,8 +5,13 @@ export interface PrepareListOptions {
|
|
|
5
5
|
selected?: string;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
export interface
|
|
8
|
+
export interface PrepareOutput {
|
|
9
9
|
list: BlockchainMeta[];
|
|
10
10
|
more: BlockchainMeta[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface UsePrepareList {
|
|
14
|
+
list: PrepareOutput['list'];
|
|
15
|
+
more: PrepareOutput['more'];
|
|
11
16
|
history: string[];
|
|
12
17
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { QuoteError, QuoteWarning } from '../types';
|
|
2
|
+
import type { Token } from 'rango-sdk';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
4
5
|
|
|
5
6
|
import { useAppStore } from '../store/AppStore';
|
|
6
7
|
import { useQuoteStore } from '../store/quote';
|
|
7
|
-
import { useSettingsStore } from '../store/settings';
|
|
8
8
|
import { QuoteErrorType } from '../types';
|
|
9
9
|
import { debounce } from '../utils/common';
|
|
10
10
|
import { isPositiveNumber } from '../utils/numbers';
|
|
11
11
|
import { generateQuoteWarnings } from '../utils/quote';
|
|
12
|
+
import { isFeatureEnabled } from '../utils/settings';
|
|
12
13
|
import { createQuoteRequestBody } from '../utils/swap';
|
|
13
14
|
import { tokensAreEqual } from '../utils/wallets';
|
|
14
15
|
|
|
@@ -19,6 +20,12 @@ import {
|
|
|
19
20
|
import { useFetchQuote } from './useFetchQuote';
|
|
20
21
|
|
|
21
22
|
const DEBOUNCE_DELAY = 600;
|
|
23
|
+
const FIRST_INDEX = 0;
|
|
24
|
+
|
|
25
|
+
type FetchQuoteParams = Omit<
|
|
26
|
+
Parameters<typeof createQuoteRequestBody>[typeof FIRST_INDEX],
|
|
27
|
+
'fromToken' | 'toToken'
|
|
28
|
+
> & { fromToken: Token | null; toToken: Token | null };
|
|
22
29
|
|
|
23
30
|
type UseSwapInput = {
|
|
24
31
|
fetch: () => void;
|
|
@@ -33,7 +40,8 @@ type UseSwapInput = {
|
|
|
33
40
|
*/
|
|
34
41
|
export function useSwapInput(): UseSwapInput {
|
|
35
42
|
const { fetch: fetchQuote, cancelFetch } = useFetchQuote();
|
|
36
|
-
const { liquiditySources, enableNewLiquiditySources } =
|
|
43
|
+
const { liquiditySources, enableNewLiquiditySources, features } =
|
|
44
|
+
useAppStore().config;
|
|
37
45
|
const tokens = useAppStore().tokens();
|
|
38
46
|
const {
|
|
39
47
|
fromToken,
|
|
@@ -50,11 +58,10 @@ export function useSwapInput(): UseSwapInput {
|
|
|
50
58
|
affiliateRef,
|
|
51
59
|
affiliateWallets,
|
|
52
60
|
disabledLiquiditySources,
|
|
53
|
-
} =
|
|
61
|
+
} = useAppStore();
|
|
54
62
|
const [loading, setLoading] = useState(false);
|
|
55
63
|
const [error, setError] = useState<QuoteError | null>(null);
|
|
56
64
|
const [warning, setWarning] = useState<QuoteWarning | null>(null);
|
|
57
|
-
const prevDisabledLiquiditySources = useRef(disabledLiquiditySources);
|
|
58
65
|
const userSlippage = customSlippage ?? slippage;
|
|
59
66
|
const hasTokensValue = !fromToken || !toToken;
|
|
60
67
|
const shouldSkipRequest =
|
|
@@ -68,24 +75,39 @@ export function useSwapInput(): UseSwapInput {
|
|
|
68
75
|
setWarning(null);
|
|
69
76
|
};
|
|
70
77
|
|
|
71
|
-
const fetch
|
|
78
|
+
const fetch = (params: FetchQuoteParams) => {
|
|
79
|
+
const {
|
|
80
|
+
fromToken,
|
|
81
|
+
toToken,
|
|
82
|
+
inputAmount,
|
|
83
|
+
liquiditySources,
|
|
84
|
+
excludeLiquiditySources,
|
|
85
|
+
disabledLiquiditySources,
|
|
86
|
+
slippage,
|
|
87
|
+
affiliateRef,
|
|
88
|
+
affiliatePercent,
|
|
89
|
+
affiliateWallets,
|
|
90
|
+
} = params;
|
|
72
91
|
if (!loading) {
|
|
73
92
|
resetState(true);
|
|
74
93
|
}
|
|
75
|
-
if (!shouldSkipRequest) {
|
|
94
|
+
if (!shouldSkipRequest && fromToken && toToken) {
|
|
76
95
|
resetQuote();
|
|
77
96
|
const requestBody = createQuoteRequestBody({
|
|
78
97
|
fromToken,
|
|
79
98
|
toToken,
|
|
80
99
|
inputAmount,
|
|
81
100
|
liquiditySources,
|
|
82
|
-
excludeLiquiditySources
|
|
101
|
+
excludeLiquiditySources,
|
|
83
102
|
disabledLiquiditySources,
|
|
84
|
-
slippage
|
|
103
|
+
slippage,
|
|
85
104
|
affiliateRef,
|
|
86
105
|
affiliatePercent,
|
|
87
106
|
affiliateWallets,
|
|
88
107
|
});
|
|
108
|
+
if (isFeatureEnabled('experimentalRoute', features)) {
|
|
109
|
+
requestBody.experimental = true;
|
|
110
|
+
}
|
|
89
111
|
fetchQuote(requestBody)
|
|
90
112
|
.then((res) => {
|
|
91
113
|
setLoading(false);
|
|
@@ -115,11 +137,14 @@ export function useSwapInput(): UseSwapInput {
|
|
|
115
137
|
}
|
|
116
138
|
};
|
|
117
139
|
|
|
118
|
-
const debouncedFetch =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
140
|
+
const debouncedFetch = useCallback(
|
|
141
|
+
debounce((params: FetchQuoteParams) => {
|
|
142
|
+
if (!shouldSkipRequest) {
|
|
143
|
+
fetch(params);
|
|
144
|
+
}
|
|
145
|
+
}, DEBOUNCE_DELAY),
|
|
146
|
+
[shouldSkipRequest]
|
|
147
|
+
);
|
|
123
148
|
|
|
124
149
|
useEffect(() => {
|
|
125
150
|
if (!isPositiveNumber(inputAmount) || inputUsdValue?.eq(0)) {
|
|
@@ -132,20 +157,53 @@ export function useSwapInput(): UseSwapInput {
|
|
|
132
157
|
}
|
|
133
158
|
resetQuote();
|
|
134
159
|
resetState(true);
|
|
135
|
-
debouncedFetch(
|
|
160
|
+
debouncedFetch({
|
|
161
|
+
inputAmount,
|
|
162
|
+
fromToken,
|
|
163
|
+
toToken,
|
|
164
|
+
liquiditySources,
|
|
165
|
+
excludeLiquiditySources: enableNewLiquiditySources,
|
|
166
|
+
disabledLiquiditySources,
|
|
167
|
+
slippage: userSlippage,
|
|
168
|
+
affiliateRef,
|
|
169
|
+
affiliatePercent,
|
|
170
|
+
affiliateWallets,
|
|
171
|
+
});
|
|
136
172
|
return cancelFetch;
|
|
137
|
-
}, [
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
173
|
+
}, [
|
|
174
|
+
inputAmount,
|
|
175
|
+
fromToken?.symbol,
|
|
176
|
+
fromToken?.address,
|
|
177
|
+
fromToken?.blockchain,
|
|
178
|
+
toToken?.symbol,
|
|
179
|
+
toToken?.address,
|
|
180
|
+
toToken?.blockchain,
|
|
181
|
+
shouldSkipRequest,
|
|
182
|
+
liquiditySources?.length,
|
|
183
|
+
enableNewLiquiditySources,
|
|
184
|
+
disabledLiquiditySources.length,
|
|
185
|
+
userSlippage,
|
|
186
|
+
affiliateRef,
|
|
187
|
+
affiliatePercent,
|
|
188
|
+
JSON.stringify(affiliateWallets),
|
|
189
|
+
]);
|
|
149
190
|
|
|
150
|
-
return {
|
|
191
|
+
return {
|
|
192
|
+
fetch: () =>
|
|
193
|
+
fetch({
|
|
194
|
+
inputAmount,
|
|
195
|
+
fromToken,
|
|
196
|
+
toToken,
|
|
197
|
+
liquiditySources,
|
|
198
|
+
excludeLiquiditySources: enableNewLiquiditySources,
|
|
199
|
+
disabledLiquiditySources,
|
|
200
|
+
slippage: userSlippage,
|
|
201
|
+
affiliateRef,
|
|
202
|
+
affiliatePercent,
|
|
203
|
+
affiliateWallets,
|
|
204
|
+
}),
|
|
205
|
+
loading,
|
|
206
|
+
error,
|
|
207
|
+
warning,
|
|
208
|
+
};
|
|
151
209
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Asset } from 'rango-sdk';
|
|
2
2
|
|
|
3
|
-
import { useEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
4
4
|
|
|
5
5
|
import { useAppStore } from '../store/AppStore';
|
|
6
6
|
import { useQuoteStore } from '../store/quote';
|
|
7
|
-
import { useSettingsStore } from '../store/settings';
|
|
8
7
|
import { tokensAreEqual } from '../utils/wallets';
|
|
9
8
|
|
|
10
9
|
export function useSyncStoresWithConfig() {
|
|
@@ -26,7 +25,7 @@ export function useSyncStoresWithConfig() {
|
|
|
26
25
|
const tokens = useAppStore().tokens();
|
|
27
26
|
|
|
28
27
|
const { setAffiliateRef, setAffiliatePercent, setAffiliateWallets } =
|
|
29
|
-
|
|
28
|
+
useAppStore();
|
|
30
29
|
|
|
31
30
|
const fromTokensConfig = useMemo(
|
|
32
31
|
() => config?.from?.tokens,
|
|
@@ -53,7 +52,14 @@ export function useSyncStoresWithConfig() {
|
|
|
53
52
|
setInputAmount(config?.amount?.toString() || '');
|
|
54
53
|
}, [config?.amount]);
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
/*
|
|
56
|
+
* We update quote tokens in two scenarios.
|
|
57
|
+
* If default values exist in widget config or search parameters exist in URL.
|
|
58
|
+
* The logic for updating quote store exists in two useEffect in two locations, and they run in order.If default tokens for quote exist in widget config and also exist in URL, widget config values take precedence over URL values, and URL search parameters don’t affect the widget.
|
|
59
|
+
* Using useLayoutEffect causes widget config values to apply first.
|
|
60
|
+
* We may consider replacing this with a better solution in the future.
|
|
61
|
+
*/
|
|
62
|
+
useLayoutEffect(() => {
|
|
57
63
|
if (fetchMetaStatus === 'success') {
|
|
58
64
|
const chain = blockchains.find(
|
|
59
65
|
(chain) => chain.name === config?.from?.blockchain
|
|
@@ -111,7 +117,14 @@ export function useSyncStoresWithConfig() {
|
|
|
111
117
|
}
|
|
112
118
|
}, [toTokensConfig, toBlockchainsConfig]);
|
|
113
119
|
|
|
114
|
-
|
|
120
|
+
/*
|
|
121
|
+
* We update quote tokens in two scenarios.
|
|
122
|
+
* If default values exist in widget config or search parameters exist in URL.
|
|
123
|
+
* The logic for updating quote store exists in two useEffect in two locations, and they run in order.If default tokens for quote exist in widget config and also exist in URL, widget config values take precedence over URL values, and URL search parameters don’t affect the widget.
|
|
124
|
+
* Using useLayoutEffect causes widget config values to apply first.
|
|
125
|
+
* We may consider replacing this with a better solution in the future.
|
|
126
|
+
*/
|
|
127
|
+
useLayoutEffect(() => {
|
|
115
128
|
if (fetchMetaStatus === 'success') {
|
|
116
129
|
const chain = blockchains.find(
|
|
117
130
|
(chain) => chain.name === config?.to?.blockchain
|