@rango-dev/widget-embedded 0.17.1-next.3 → 0.17.1-next.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/dist/QueueManager.d.ts +5 -2
  2. package/dist/QueueManager.d.ts.map +1 -1
  3. package/dist/components/AppRouter.d.ts +0 -2
  4. package/dist/components/AppRouter.d.ts.map +1 -1
  5. package/dist/components/AppRoutes.d.ts +1 -6
  6. package/dist/components/AppRoutes.d.ts.map +1 -1
  7. package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +56 -56
  8. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
  9. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts +0 -2
  10. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts.map +1 -1
  11. package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
  12. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts +1 -4
  13. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts.map +1 -1
  14. package/dist/components/HeaderButtons/HomeButtons.d.ts.map +1 -1
  15. package/dist/components/Layout/Layout.d.ts.map +1 -1
  16. package/dist/components/Layout/Layout.types.d.ts +2 -2
  17. package/dist/components/Layout/Layout.types.d.ts.map +1 -1
  18. package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
  19. package/dist/components/Quote/Quote.d.ts.map +1 -1
  20. package/dist/components/Quote/Quote.styles.d.ts +159 -0
  21. package/dist/components/Quote/Quote.styles.d.ts.map +1 -1
  22. package/dist/components/Quote/Quote.types.d.ts +0 -1
  23. package/dist/components/Quote/Quote.types.d.ts.map +1 -1
  24. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -1
  25. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts.map +1 -1
  26. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts.map +1 -1
  27. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +1 -0
  28. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -1
  29. package/dist/components/Slippage/Slippage.d.ts.map +1 -1
  30. package/dist/components/SwapDetails/SwapDetails.Placeholder.d.ts.map +1 -1
  31. package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
  32. package/dist/components/SwapDetails/SwapDetails.helpers.d.ts +1 -1
  33. package/dist/components/SwapDetails/SwapDetails.helpers.d.ts.map +1 -1
  34. package/dist/components/SwapDetailsModal/SwapDetailsCompleteModal.d.ts.map +1 -1
  35. package/dist/components/SwapDetailsModal/SwapDetailsModal.helpers.d.ts +1 -1
  36. package/dist/components/SwapDetailsModal/SwapDetailsModal.helpers.d.ts.map +1 -1
  37. package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts +1 -1
  38. package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts.map +1 -1
  39. package/dist/components/SwapsGroup/SwapsGroup.d.ts.map +1 -1
  40. package/dist/components/SwapsGroup/SwapsGroup.styles.d.ts.map +1 -1
  41. package/dist/components/TokenList/TokenList.d.ts.map +1 -1
  42. package/dist/components/TokenList/TokenList.helpers.d.ts +2 -2
  43. package/dist/components/TokenList/TokenList.helpers.d.ts.map +1 -1
  44. package/dist/components/TokenList/TokenList.styles.d.ts.map +1 -1
  45. package/dist/components/TokenList/TokenList.types.d.ts +3 -9
  46. package/dist/components/TokenList/TokenList.types.d.ts.map +1 -1
  47. package/dist/components/TokenList/index.d.ts +0 -1
  48. package/dist/components/TokenList/index.d.ts.map +1 -1
  49. package/dist/components/UpdateUrl.d.ts +1 -6
  50. package/dist/components/UpdateUrl.d.ts.map +1 -1
  51. package/dist/components/WidgetEvents.d.ts.map +1 -1
  52. package/dist/constants/errors.d.ts.map +1 -1
  53. package/dist/constants/index.d.ts +1 -0
  54. package/dist/constants/index.d.ts.map +1 -1
  55. package/dist/constants/navigationRoutes.d.ts +1 -2
  56. package/dist/constants/navigationRoutes.d.ts.map +1 -1
  57. package/dist/constants/searchParams.d.ts +2 -1
  58. package/dist/constants/searchParams.d.ts.map +1 -1
  59. package/dist/containers/App/App.d.ts +3 -0
  60. package/dist/containers/App/App.d.ts.map +1 -0
  61. package/dist/containers/App/App.styles.d.ts +158 -0
  62. package/dist/containers/App/App.styles.d.ts.map +1 -0
  63. package/dist/containers/App/index.d.ts +2 -0
  64. package/dist/containers/App/index.d.ts.map +1 -0
  65. package/dist/containers/QuoteInfo/QuoteInfo.d.ts.map +1 -1
  66. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts +316 -0
  67. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts.map +1 -1
  68. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts +3 -0
  69. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts.map +1 -1
  70. package/dist/containers/Wallets/Wallets.d.ts +6 -0
  71. package/dist/containers/Wallets/Wallets.d.ts.map +1 -0
  72. package/dist/containers/Wallets/Wallets.types.d.ts +11 -0
  73. package/dist/containers/Wallets/Wallets.types.d.ts.map +1 -0
  74. package/dist/containers/Wallets/index.d.ts +2 -0
  75. package/dist/containers/Wallets/index.d.ts.map +1 -0
  76. package/dist/containers/Widget/Widget.d.ts +5 -0
  77. package/dist/containers/Widget/Widget.d.ts.map +1 -0
  78. package/dist/containers/Widget/Widget.types.d.ts +5 -0
  79. package/dist/containers/Widget/Widget.types.d.ts.map +1 -0
  80. package/dist/containers/Widget/index.d.ts +3 -0
  81. package/dist/containers/Widget/index.d.ts.map +1 -0
  82. package/dist/containers/WidgetInfo/WidgetInfo.d.ts +6 -0
  83. package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -0
  84. package/dist/containers/WidgetInfo/WidgetInfo.helpers.d.ts +20 -0
  85. package/dist/containers/WidgetInfo/WidgetInfo.helpers.d.ts.map +1 -0
  86. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +21 -0
  87. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -0
  88. package/dist/containers/WidgetInfo/index.d.ts +2 -0
  89. package/dist/containers/WidgetInfo/index.d.ts.map +1 -0
  90. package/dist/containers/WidgetProvider/WidgetProvider.d.ts +5 -0
  91. package/dist/containers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
  92. package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts +7 -0
  93. package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts.map +1 -0
  94. package/dist/containers/WidgetProvider/index.d.ts +2 -0
  95. package/dist/containers/WidgetProvider/index.d.ts.map +1 -0
  96. package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts.map +1 -1
  97. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts +6 -3
  98. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts.map +1 -1
  99. package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts +1 -1
  100. package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts.map +1 -1
  101. package/dist/hooks/useForceAutoConnect.d.ts +2 -0
  102. package/dist/hooks/useForceAutoConnect.d.ts.map +1 -0
  103. package/dist/hooks/useLanguage.d.ts +1 -1
  104. package/dist/hooks/useLanguage.d.ts.map +1 -1
  105. package/dist/hooks/useNavigateBack.d.ts +1 -3
  106. package/dist/hooks/useNavigateBack.d.ts.map +1 -1
  107. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.d.ts +1 -1
  108. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts +2 -2
  109. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts.map +1 -1
  110. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts +3 -5
  111. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts.map +1 -1
  112. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts +1 -0
  113. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts.map +1 -1
  114. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts +5 -1
  115. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts.map +1 -1
  116. package/dist/hooks/useSwapInput.d.ts.map +1 -1
  117. package/dist/hooks/useSyncStoresWithConfig.d.ts +1 -2
  118. package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
  119. package/dist/hooks/useTheme.d.ts +1 -1
  120. package/dist/hooks/useTheme.d.ts.map +1 -1
  121. package/dist/hooks/useWalletList.d.ts.map +1 -1
  122. package/dist/index.d.ts +20 -8
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +1 -1
  125. package/dist/index.js.map +4 -4
  126. package/dist/pages/ConfirmSwapPage.d.ts +1 -6
  127. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  128. package/dist/pages/HistoryPage.d.ts.map +1 -1
  129. package/dist/pages/Home.d.ts.map +1 -1
  130. package/dist/pages/LanguagePage.d.ts.map +1 -1
  131. package/dist/pages/LiquiditySourcePage.d.ts +1 -2
  132. package/dist/pages/LiquiditySourcePage.d.ts.map +1 -1
  133. package/dist/pages/SelectBlockchainPage.d.ts.map +1 -1
  134. package/dist/pages/SelectSwapItemsPage.d.ts.map +1 -1
  135. package/dist/pages/SettingsPage.d.ts +1 -6
  136. package/dist/pages/SettingsPage.d.ts.map +1 -1
  137. package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
  138. package/dist/pages/ThemePage.d.ts.map +1 -1
  139. package/dist/pages/WalletsPage.d.ts +1 -8
  140. package/dist/pages/WalletsPage.d.ts.map +1 -1
  141. package/dist/store/AppStore.d.ts +47 -0
  142. package/dist/store/AppStore.d.ts.map +1 -0
  143. package/dist/store/app.d.ts +41 -22
  144. package/dist/store/app.d.ts.map +1 -1
  145. package/dist/store/notification.d.ts +4 -3
  146. package/dist/store/notification.d.ts.map +1 -1
  147. package/dist/store/quote.d.ts +23 -16
  148. package/dist/store/quote.d.ts.map +1 -1
  149. package/dist/store/slices/config.d.ts +3 -2
  150. package/dist/store/slices/config.d.ts.map +1 -1
  151. package/dist/store/slices/data.d.ts +3 -0
  152. package/dist/store/slices/data.d.ts.map +1 -1
  153. package/dist/store/slices/settings.d.ts +39 -0
  154. package/dist/store/slices/settings.d.ts.map +1 -0
  155. package/dist/store/ui.d.ts +2 -1
  156. package/dist/store/ui.d.ts.map +1 -1
  157. package/dist/store/wallets.d.ts +14 -9
  158. package/dist/store/wallets.d.ts.map +1 -1
  159. package/dist/types/config.d.ts +38 -5
  160. package/dist/types/config.d.ts.map +1 -1
  161. package/dist/types/swap.d.ts +4 -14
  162. package/dist/types/swap.d.ts.map +1 -1
  163. package/dist/types/wallets.d.ts +15 -1
  164. package/dist/types/wallets.d.ts.map +1 -1
  165. package/dist/utils/colors.d.ts.map +1 -1
  166. package/dist/utils/configs.d.ts +1 -0
  167. package/dist/utils/configs.d.ts.map +1 -1
  168. package/dist/utils/meta.d.ts +2 -1
  169. package/dist/utils/meta.d.ts.map +1 -1
  170. package/dist/utils/providers.d.ts +2 -2
  171. package/dist/utils/providers.d.ts.map +1 -1
  172. package/dist/utils/queue.d.ts +2 -2
  173. package/dist/utils/queue.d.ts.map +1 -1
  174. package/dist/utils/quote.d.ts +1 -1
  175. package/dist/utils/quote.d.ts.map +1 -1
  176. package/dist/utils/settings.d.ts +6 -2
  177. package/dist/utils/settings.d.ts.map +1 -1
  178. package/dist/utils/swap.d.ts +16 -7
  179. package/dist/utils/swap.d.ts.map +1 -1
  180. package/dist/utils/time.d.ts +1 -1
  181. package/dist/utils/time.d.ts.map +1 -1
  182. package/dist/utils/wallets.d.ts +7 -9
  183. package/dist/utils/wallets.d.ts.map +1 -1
  184. package/package.json +12 -10
  185. package/src/QueueManager.tsx +18 -17
  186. package/src/components/AppRouter.tsx +8 -32
  187. package/src/components/AppRoutes.tsx +57 -69
  188. package/src/components/BlockchainList/BlockchainList.tsx +4 -4
  189. package/src/components/BlockchainsSection/BlockchainsSection.tsx +4 -4
  190. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +16 -19
  191. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.types.ts +0 -2
  192. package/src/components/ConfirmWalletsModal/WalletList.tsx +6 -5
  193. package/src/components/ConfirmWalletsModal/WalletList.type.ts +1 -4
  194. package/src/components/HeaderButtons/HomeButtons.tsx +28 -18
  195. package/src/components/Layout/Layout.tsx +20 -7
  196. package/src/components/Layout/Layout.types.ts +2 -2
  197. package/src/components/NoResult/NoResult.helpers.ts +12 -12
  198. package/src/components/NoResult/NoResult.tsx +6 -6
  199. package/src/components/NotificationContent/NotificationContent.tsx +5 -3
  200. package/src/components/Quote/Quote.styles.ts +28 -1
  201. package/src/components/Quote/Quote.tsx +100 -34
  202. package/src/components/Quote/Quote.types.ts +0 -1
  203. package/src/components/Quote/QuoteSkeleton.tsx +1 -1
  204. package/src/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.tsx +1 -1
  205. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.ts +11 -4
  206. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.ts +8 -1
  207. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +13 -13
  208. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +1 -0
  209. package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +3 -3
  210. package/src/components/Slippage/Slippage.tsx +3 -5
  211. package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +0 -4
  212. package/src/components/SwapDetails/SwapDetails.helpers.tsx +1 -1
  213. package/src/components/SwapDetails/SwapDetails.tsx +19 -39
  214. package/src/components/SwapDetailsAlerts/SwapDetailsAlerts.Warning.tsx +1 -1
  215. package/src/components/SwapDetailsModal/SwapDetailsCompleteModal.tsx +4 -3
  216. package/src/components/SwapDetailsModal/SwapDetailsModal.Cancel.tsx +2 -2
  217. package/src/components/SwapDetailsModal/SwapDetailsModal.helpers.tsx +1 -1
  218. package/src/components/SwapDetailsModal/SwapDetailsModal.tsx +1 -1
  219. package/src/components/SwapDetailsModal/SwapDetailsModal.types.ts +1 -1
  220. package/src/components/SwapsGroup/SwapsGroup.styles.ts +8 -1
  221. package/src/components/SwapsGroup/SwapsGroup.tsx +0 -2
  222. package/src/components/TokenList/TokenList.helpers.ts +2 -2
  223. package/src/components/TokenList/TokenList.styles.ts +14 -2
  224. package/src/components/TokenList/TokenList.tsx +16 -19
  225. package/src/components/TokenList/TokenList.types.ts +3 -10
  226. package/src/components/TokenList/index.ts +0 -1
  227. package/src/components/UpdateUrl.tsx +23 -18
  228. package/src/components/WidgetEvents.tsx +4 -2
  229. package/src/constants/errors.ts +9 -5
  230. package/src/constants/index.ts +1 -0
  231. package/src/constants/navigationRoutes.ts +7 -8
  232. package/src/constants/searchParams.ts +1 -0
  233. package/src/containers/App/App.styles.ts +18 -0
  234. package/src/containers/App/App.tsx +52 -0
  235. package/src/containers/App/index.ts +1 -0
  236. package/src/containers/QuoteInfo/QuoteInfo.styles.ts +17 -1
  237. package/src/containers/QuoteInfo/QuoteInfo.tsx +44 -43
  238. package/src/containers/QuoteInfo/QuoteInfo.types.ts +3 -0
  239. package/src/{Wallets.tsx → containers/Wallets/Wallets.tsx} +48 -34
  240. package/src/containers/Wallets/Wallets.types.ts +12 -0
  241. package/src/containers/Wallets/index.ts +1 -0
  242. package/src/containers/Widget/Widget.tsx +19 -0
  243. package/src/containers/Widget/Widget.types.ts +5 -0
  244. package/src/containers/Widget/index.ts +2 -0
  245. package/src/containers/WidgetInfo/WidgetInfo.helpers.ts +64 -0
  246. package/src/containers/WidgetInfo/WidgetInfo.tsx +62 -0
  247. package/src/containers/WidgetInfo/WidgetInfo.types.ts +21 -0
  248. package/src/containers/WidgetInfo/index.ts +1 -0
  249. package/src/containers/WidgetProvider/WidgetProvider.tsx +28 -0
  250. package/src/containers/WidgetProvider/WidgetProvider.types.ts +7 -0
  251. package/src/containers/WidgetProvider/index.ts +1 -0
  252. package/src/hooks/useConfirmSwap/useConfirmSwap.helpers.ts +15 -11
  253. package/src/hooks/useConfirmSwap/useConfirmSwap.ts +25 -24
  254. package/src/hooks/useConfirmSwap/useConfirmSwap.types.ts +1 -1
  255. package/src/hooks/useForceAutoConnect.ts +27 -0
  256. package/src/hooks/useLanguage.ts +4 -5
  257. package/src/hooks/useNavigateBack.ts +3 -52
  258. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.ts +1 -1
  259. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.ts +37 -7
  260. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.ts +60 -0
  261. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.test.ts +78 -3
  262. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.ts +15 -6
  263. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.ts +6 -1
  264. package/src/hooks/useSwapInput.ts +89 -30
  265. package/src/hooks/useSyncStoresWithConfig.ts +38 -22
  266. package/src/hooks/useTheme.ts +4 -5
  267. package/src/hooks/useWalletList.ts +3 -5
  268. package/src/index.ts +53 -5
  269. package/src/pages/ConfirmSwapPage.tsx +39 -24
  270. package/src/pages/HistoryPage.tsx +2 -7
  271. package/src/pages/Home.tsx +58 -88
  272. package/src/pages/LanguagePage.tsx +0 -5
  273. package/src/pages/LiquiditySourcePage.tsx +24 -37
  274. package/src/pages/SelectBlockchainPage.tsx +28 -21
  275. package/src/pages/SelectSwapItemsPage.tsx +10 -27
  276. package/src/pages/SettingsPage.tsx +28 -24
  277. package/src/pages/SwapDetailsPage.tsx +6 -7
  278. package/src/pages/ThemePage.tsx +2 -7
  279. package/src/pages/WalletsPage.tsx +4 -15
  280. package/src/services/httpService.ts +1 -1
  281. package/src/store/AppStore.tsx +41 -0
  282. package/src/store/app.ts +44 -6
  283. package/src/store/quote.ts +29 -26
  284. package/src/store/slices/config.ts +25 -15
  285. package/src/store/slices/data.ts +64 -29
  286. package/src/store/slices/settings.ts +168 -0
  287. package/src/store/wallets.ts +68 -37
  288. package/src/types/config.ts +50 -5
  289. package/src/types/swap.ts +4 -13
  290. package/src/types/wallets.ts +18 -1
  291. package/src/utils/colors.ts +2 -1
  292. package/src/utils/configs.ts +2 -1
  293. package/src/utils/date.ts +1 -1
  294. package/src/utils/meta.ts +8 -1
  295. package/src/utils/providers.ts +8 -5
  296. package/src/utils/queue.ts +2 -2
  297. package/src/utils/quote.ts +7 -7
  298. package/src/utils/settings.ts +17 -10
  299. package/src/utils/swap.ts +59 -55
  300. package/src/utils/time.ts +1 -1
  301. package/src/utils/wallets.ts +107 -149
  302. package/dist/Wallets.d.ts +0 -17
  303. package/dist/Wallets.d.ts.map +0 -1
  304. package/dist/Widget.d.ts +0 -9
  305. package/dist/Widget.d.ts.map +0 -1
  306. package/dist/store/meta.d.ts +0 -23
  307. package/dist/store/meta.d.ts.map +0 -1
  308. package/dist/store/settings.d.ts +0 -81
  309. package/dist/store/settings.d.ts.map +0 -1
  310. package/src/Widget.tsx +0 -119
  311. package/src/store/meta.ts +0 -39
  312. package/src/store/settings.ts +0 -158
@@ -18,27 +18,32 @@ import { SettingsContainer } from '../components/SettingsContainer';
18
18
  import { Slippage } from '../components/Slippage';
19
19
  import { SlippageTooltipContainer as TooltipContainer } from '../components/Slippage/Slippage.styles';
20
20
  import { navigationRoutes } from '../constants/navigationRoutes';
21
- import { useNavigateBack } from '../hooks/useNavigateBack';
22
- import { useMetaStore } from '../store/meta';
23
- import { useSettingsStore } from '../store/settings';
21
+ import { useAppStore } from '../store/AppStore';
24
22
  import { getContainer } from '../utils/common';
25
- import { getUniqueSwappersGroups } from '../utils/settings';
23
+ import { getUniqueSwappersGroups, isFeatureHidden } from '../utils/settings';
26
24
 
27
- interface PropTypes {
28
- supportedSwappers?: string[];
29
- singleTheme?: boolean;
30
- }
31
-
32
- export function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {
25
+ export function SettingsPage() {
33
26
  const navigate = useNavigate();
34
- const { navigateBackFrom } = useNavigateBack();
27
+ const { theme } = useAppStore().config;
28
+ const fetchStatus = useAppStore().fetchStatus;
29
+ const swappers = useAppStore().swappers();
30
+ const disabledLiquiditySources = useAppStore().disabledLiquiditySources;
31
+ const {
32
+ config: { features },
33
+ } = useAppStore();
34
+ const isThemeHidden = isFeatureHidden('theme', features);
35
35
 
36
- const infiniteApprove = useSettingsStore.use.infiniteApprove();
37
- const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();
38
- const loadingMetaStatus = useMetaStore.use.loadingStatus();
36
+ const isLiquidityHidden = isFeatureHidden('liquiditySource', features);
39
37
 
40
- const supportedUniqueSwappersGroups =
41
- getUniqueSwappersGroups(supportedSwappers);
38
+ const isLanguageHidden = isFeatureHidden('language', features);
39
+
40
+ const infiniteApprove = useAppStore().infiniteApprove;
41
+ const toggleInfiniteApprove = useAppStore().toggleInfiniteApprove;
42
+
43
+ const supportedUniqueSwappersGroups = getUniqueSwappersGroups(
44
+ swappers,
45
+ disabledLiquiditySources
46
+ );
42
47
 
43
48
  const bridgeSources = supportedUniqueSwappersGroups.filter(
44
49
  (uniqueItem) =>
@@ -58,7 +63,7 @@ export function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {
58
63
  ).length;
59
64
 
60
65
  const handleEndItem = (totalSelected: number, total: number) => {
61
- switch (loadingMetaStatus) {
66
+ switch (fetchStatus) {
62
67
  case 'loading':
63
68
  return <Skeleton variant="text" size="medium" width={50} />;
64
69
  case 'failed':
@@ -162,12 +167,12 @@ export function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {
162
167
  onClick: toggleInfiniteApprove,
163
168
  };
164
169
 
165
- const settingItems = [
166
- bridgeItem,
167
- exchangeItem,
168
- // languageItem
169
- ];
170
- if (!singleTheme) {
170
+ const settingItems = isLiquidityHidden ? [] : [bridgeItem, exchangeItem];
171
+
172
+ if (!isLanguageHidden) {
173
+ // settingItems.push(languageItem);
174
+ }
175
+ if (!theme?.singleTheme && !isThemeHidden) {
171
176
  settingItems.push(themeItem);
172
177
  }
173
178
  settingItems.push(infiniteApprovalItem);
@@ -175,7 +180,6 @@ export function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {
175
180
  return (
176
181
  <Layout
177
182
  header={{
178
- onBack: () => navigateBackFrom(navigationRoutes.settings),
179
183
  title: i18n.t('Setting'),
180
184
  }}>
181
185
  <SettingsContainer>
@@ -4,9 +4,8 @@ import React from 'react';
4
4
 
5
5
  import { SwapDetails } from '../components/SwapDetails';
6
6
  import { SwapDetailsPlaceholder } from '../components/SwapDetails/SwapDetails.Placeholder';
7
- import { navigationRoutes } from '../constants/navigationRoutes';
8
7
  import { useNavigateBack } from '../hooks/useNavigateBack';
9
- import { useMetaStore } from '../store/meta';
8
+ import { useAppStore } from '../store/AppStore';
10
9
  import { useUiStore } from '../store/ui';
11
10
  import { getPendingSwaps } from '../utils/queue';
12
11
 
@@ -15,10 +14,10 @@ export function SwapDetailsPage() {
15
14
  const loading = !state.loadedFromPersistor;
16
15
  const pendingSwaps = getPendingSwaps(manager);
17
16
  const requestId = useUiStore.use.selectedSwapRequestId();
18
- const { navigateBackFrom } = useNavigateBack();
19
- const { loadingStatus } = useMetaStore();
17
+ const navigateBack = useNavigateBack();
18
+ const { fetchStatus: fetchMetaStatus } = useAppStore();
20
19
 
21
- const showSkeleton = loading || loadingStatus === 'loading';
20
+ const showSkeleton = loading || fetchMetaStatus === 'loading';
22
21
 
23
22
  const selectedSwap = pendingSwaps.find(
24
23
  ({ swap }) => swap.requestId === requestId
@@ -36,8 +35,8 @@ export function SwapDetailsPage() {
36
35
  const onDelete = async () => {
37
36
  if (selectedSwap?.id) {
38
37
  try {
39
- await manager?.deleteQueue(selectedSwap.id);
40
- navigateBackFrom(navigationRoutes.swapDetails);
38
+ manager?.deleteQueue(selectedSwap.id);
39
+ navigateBack();
41
40
  } catch (e) {
42
41
  console.log(e);
43
42
  }
@@ -13,9 +13,7 @@ import React from 'react';
13
13
 
14
14
  import { Layout } from '../components/Layout';
15
15
  import { SettingsContainer } from '../components/SettingsContainer';
16
- import { navigationRoutes } from '../constants/navigationRoutes';
17
- import { useNavigateBack } from '../hooks/useNavigateBack';
18
- import { useSettingsStore } from '../store/settings';
16
+ import { useAppStore } from '../store/AppStore';
19
17
 
20
18
  type Theme = 'dark' | 'light' | 'auto';
21
19
 
@@ -26,9 +24,7 @@ enum Mode {
26
24
  }
27
25
 
28
26
  export function ThemePage() {
29
- const { navigateBackFrom } = useNavigateBack();
30
- const theme = useSettingsStore.use.theme();
31
- const setTheme = useSettingsStore.use.setTheme();
27
+ const { setTheme, theme } = useAppStore();
32
28
 
33
29
  const themesList = [
34
30
  {
@@ -72,7 +68,6 @@ export function ThemePage() {
72
68
  return (
73
69
  <Layout
74
70
  header={{
75
- onBack: () => navigateBackFrom(navigationRoutes.settings),
76
71
  title: i18n.t('Theme'),
77
72
  }}>
78
73
  <SettingsContainer>
@@ -1,4 +1,3 @@
1
- import type { WidgetConfig } from '../types';
2
1
  import type { WalletType } from '@rango-dev/wallets-shared';
3
2
 
4
3
  import { i18n } from '@lingui/core';
@@ -7,18 +6,10 @@ import React, { Fragment, useState } from 'react';
7
6
 
8
7
  import { Layout } from '../components/Layout';
9
8
  import { WalletModal } from '../components/WalletModal';
10
- import { navigationRoutes } from '../constants/navigationRoutes';
11
- import { useNavigateBack } from '../hooks/useNavigateBack';
12
9
  import { useWalletList } from '../hooks/useWalletList';
13
- import { useMetaStore } from '../store/meta';
10
+ import { useAppStore } from '../store/AppStore';
14
11
  import { getContainer } from '../utils/common';
15
12
 
16
- interface PropTypes {
17
- supportedWallets: WidgetConfig['wallets'];
18
- multiWallets: boolean;
19
- config?: WidgetConfig;
20
- }
21
-
22
13
  const ListContainer = styled('div', {
23
14
  display: 'grid',
24
15
  gap: '$10',
@@ -35,8 +26,8 @@ const Container = styled('div', {
35
26
  export const TIME_TO_CLOSE_MODAL = 3_000;
36
27
  export const TIME_TO_IGNORE_MODAL = 300;
37
28
 
38
- export function WalletsPage({ config }: PropTypes) {
39
- const { navigateBackFrom } = useNavigateBack();
29
+ export function WalletsPage() {
30
+ const { config, fetchStatus: fetchMetaStatus } = useAppStore();
40
31
  const [openModal, setOpenModal] = useState(false);
41
32
  const [selectedWalletType, setSelectedWalletType] = useState<WalletType>('');
42
33
  let modalTimerId: ReturnType<typeof setTimeout> | null = null;
@@ -59,7 +50,6 @@ export function WalletsPage({ config }: PropTypes) {
59
50
  },
60
51
  });
61
52
 
62
- const loadingMetaStatus = useMetaStore.use.loadingStatus();
63
53
  const selectedWallet = list.find(
64
54
  (wallet) => wallet.type === selectedWalletType
65
55
  );
@@ -71,7 +61,6 @@ export function WalletsPage({ config }: PropTypes) {
71
61
  <Layout
72
62
  header={{
73
63
  title: i18n.t('Connect Wallets'),
74
- onBack: () => navigateBackFrom(navigationRoutes.wallets),
75
64
  }}>
76
65
  <Container>
77
66
  <Typography variant="title" size="xmedium" align="center">
@@ -88,7 +77,7 @@ export function WalletsPage({ config }: PropTypes) {
88
77
  onClick={(type) => {
89
78
  void handleClick(type);
90
79
  }}
91
- isLoading={loadingMetaStatus === 'loading'}
80
+ isLoading={fetchMetaStatus === 'loading'}
92
81
  />
93
82
  </Fragment>
94
83
  );
@@ -8,6 +8,6 @@ export const httpService = () => {
8
8
  if (rango) {
9
9
  return rango;
10
10
  }
11
- rango = new RangoClient(getConfig('API_KEY'));
11
+ rango = new RangoClient(getConfig('API_KEY'), getConfig('BASE_URL'));
12
12
  return rango;
13
13
  };
@@ -0,0 +1,41 @@
1
+ import type { WidgetConfig } from '../types';
2
+ import type { PropsWithChildren } from 'react';
3
+
4
+ import React, { createContext, useContext, useEffect, useRef } from 'react';
5
+
6
+ import { createAppStore } from './app';
7
+
8
+ type AppStore = ReturnType<typeof createAppStore>;
9
+ type AppStoreProviderProps = PropsWithChildren<{ config?: WidgetConfig }>;
10
+
11
+ export const AppStoreContext = createContext<AppStore | null>(null);
12
+
13
+ export function useAppStore() {
14
+ const store = useContext(AppStoreContext);
15
+
16
+ useEffect(() => {
17
+ if (store && !store.persist.hasHydrated()) {
18
+ void store.persist.rehydrate();
19
+ }
20
+ }, []);
21
+
22
+ if (!store) {
23
+ throw new Error('Missing AppStoreContext.Provider in the tree');
24
+ }
25
+
26
+ return store();
27
+ }
28
+
29
+ export function AppStoreProvider(props: AppStoreProviderProps) {
30
+ const appStoreRef = useRef<AppStore>();
31
+
32
+ if (!appStoreRef.current) {
33
+ appStoreRef.current = createAppStore(props.config);
34
+ }
35
+
36
+ return (
37
+ <AppStoreContext.Provider value={appStoreRef.current}>
38
+ {props.children}
39
+ </AppStoreContext.Provider>
40
+ );
41
+ }
package/src/store/app.ts CHANGED
@@ -1,15 +1,53 @@
1
1
  import type { ConfigSlice } from './slices/config';
2
2
  import type { DataSlice } from './slices/data';
3
+ import type { SettingsSlice } from './slices/settings';
4
+ import type { WidgetConfig } from '../types';
5
+ import type { StateCreator } from 'zustand';
3
6
 
4
7
  import { create } from 'zustand';
8
+ import { persist } from 'zustand/middleware';
5
9
 
6
- import createSelectors from './selectors';
7
10
  import { createConfigSlice } from './slices/config';
8
11
  import { createDataSlice } from './slices/data';
12
+ import { createSettingsSlice } from './slices/settings';
9
13
 
10
- const store = create<DataSlice & ConfigSlice>()((...a) => ({
11
- ...createDataSlice(...a),
12
- ...createConfigSlice(...a),
13
- }));
14
+ export type StateCreatorWithInitialData<
15
+ T extends Partial<WidgetConfig>,
16
+ R extends Record<string, unknown>,
17
+ V extends Record<string, unknown>
18
+ > = (
19
+ initialData: T | undefined,
20
+ ...rest: Parameters<StateCreator<R, [], [], V>>
21
+ ) => ReturnType<StateCreator<R, [], [], V>>;
14
22
 
15
- export const useAppStore = createSelectors(store);
23
+ export type AppStoreState = DataSlice & ConfigSlice & SettingsSlice;
24
+
25
+ export function createAppStore(initialData?: WidgetConfig) {
26
+ return create<AppStoreState>()(
27
+ persist(
28
+ (...a) => ({
29
+ ...createDataSlice(...a),
30
+ ...createSettingsSlice(...a),
31
+ ...createConfigSlice(initialData, ...a),
32
+ }),
33
+ {
34
+ name: 'user-settings',
35
+ skipHydration: true,
36
+ partialize: (state) => {
37
+ return {
38
+ theme: state.theme,
39
+ language: state.language,
40
+ affiliatePercent: state.affiliatePercent,
41
+ affiliateRef: state.affiliateRef,
42
+ affiliateWallets: state.affiliateWallets,
43
+ slippage: state.slippage,
44
+ customSlippage: state.customSlippage,
45
+ infiniteApprove: state.infiniteApprove,
46
+ preferredBlockchains: state.preferredBlockchains,
47
+ disabledLiquiditySources: state.disabledLiquiditySources,
48
+ };
49
+ },
50
+ }
51
+ )
52
+ );
53
+ }
@@ -1,7 +1,11 @@
1
- import type { TokenWithBalance } from '../components/TokenList';
2
1
  import type { Wallet } from '../types';
3
- import type { PendingSwap } from '@rango-dev/queue-manager-rango-preset/dist/shared';
4
- import type { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
2
+ import type {
3
+ BestRouteResponse,
4
+ BlockchainMeta,
5
+ MetaResponse,
6
+ Token,
7
+ } from 'rango-sdk';
8
+ import type { PendingSwap } from 'rango-types';
5
9
 
6
10
  import BigNumber from 'bignumber.js';
7
11
  import { create } from 'zustand';
@@ -12,7 +16,6 @@ import { isPositiveNumber } from '../utils/numbers';
12
16
  import { createRetryQuote, getQuoteToTokenUsdPrice } from '../utils/quote';
13
17
  import { calcOutputUsdValue } from '../utils/swap';
14
18
 
15
- import { useMetaStore } from './meta';
16
19
  import createSelectors from './selectors';
17
20
 
18
21
  export const getUsdValue = (
@@ -23,6 +26,10 @@ export const getUsdValue = (
23
26
  ? new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0)
24
27
  : null;
25
28
 
29
+ export type Meta = Pick<MetaResponse, 'blockchains' | 'tokens'>;
30
+
31
+ export type SetTokenParams = { token: Token; meta: Meta } | { token: null };
32
+
26
33
  export interface QuoteState {
27
34
  fromBlockchain: BlockchainMeta | null;
28
35
  toBlockchain: BlockchainMeta | null;
@@ -30,8 +37,8 @@ export interface QuoteState {
30
37
  inputUsdValue: BigNumber | null;
31
38
  outputAmount: BigNumber | null;
32
39
  outputUsdValue: BigNumber | null;
33
- fromToken: TokenWithBalance | null;
34
- toToken: TokenWithBalance | null;
40
+ fromToken: Token | null;
41
+ toToken: Token | null;
35
42
  quoteWalletsConfirmed: boolean;
36
43
  selectedWallets: Wallet[];
37
44
  quoteWarningsConfirmed: boolean;
@@ -41,12 +48,12 @@ export interface QuoteState {
41
48
  setFromBlockchain: (chain: BlockchainMeta | null) => void;
42
49
  setToBlockchain: (chian: BlockchainMeta | null) => void;
43
50
 
44
- setFromToken: (token: Token | null) => void;
45
- setToToken: (token: Token | null) => void;
51
+ setFromToken: (params: SetTokenParams) => void;
52
+ setToToken: (params: SetTokenParams) => void;
46
53
  setInputAmount: (amount: string) => void;
47
54
  quote: BestRouteResponse | null;
48
55
  setQuote: (quote: BestRouteResponse | null) => void;
49
- retry: (pendingSwap: PendingSwap) => void;
56
+ retry: (pendingSwap: PendingSwap, meta: Meta) => void;
50
57
  switchFromAndTo: () => void;
51
58
  setQuoteWalletConfirmed: (flag: boolean) => void;
52
59
  setSelectedWallets: (wallets: Wallet[]) => void;
@@ -119,18 +126,17 @@ export const useQuoteStore = createSelectors(
119
126
  };
120
127
  });
121
128
  },
122
- setFromToken: (token) => {
123
- const { blockchains } = useMetaStore.getState().meta;
129
+ setFromToken: (params) => {
124
130
  return set((state) => ({
125
- fromToken: token,
126
- ...(token && {
131
+ fromToken: params.token,
132
+ ...(params.token && {
127
133
  fromBlockchain:
128
- blockchains.find(
129
- (blockchain) => blockchain.name === token.blockchain
134
+ params.meta.blockchains.find(
135
+ (blockchain) => blockchain.name === params.token.blockchain
130
136
  ) ?? null,
131
137
  }),
132
138
  ...(!!state.inputAmount && {
133
- inputUsdValue: getUsdValue(token, state.inputAmount),
139
+ inputUsdValue: getUsdValue(params.token, state.inputAmount),
134
140
  }),
135
141
  }));
136
142
  },
@@ -151,14 +157,13 @@ export const useQuoteStore = createSelectors(
151
157
  };
152
158
  });
153
159
  },
154
- setToToken: (token) => {
155
- const { blockchains } = useMetaStore.getState().meta;
160
+ setToToken: (params) => {
156
161
  return set(() => ({
157
- toToken: token,
158
- ...(token && {
162
+ toToken: params.token,
163
+ ...(params.token && {
159
164
  toBlockchain:
160
- blockchains.find(
161
- (blockchain) => blockchain.name === token.blockchain
165
+ params.meta.blockchains.find(
166
+ (blockchain) => blockchain.name === params.token.blockchain
162
167
  ) ?? null,
163
168
  }),
164
169
  }));
@@ -176,9 +181,8 @@ export const useQuoteStore = createSelectors(
176
181
  }),
177
182
  }));
178
183
  },
179
- retry: (pendingSwap) => {
180
- const { tokens, blockchains } = useMetaStore.getState().meta;
181
-
184
+ retry: (pendingSwap, meta) => {
185
+ const { tokens, blockchains } = meta;
182
186
  const {
183
187
  fromBlockchain,
184
188
  fromToken,
@@ -186,7 +190,6 @@ export const useQuoteStore = createSelectors(
186
190
  toToken,
187
191
  inputAmount,
188
192
  } = createRetryQuote(pendingSwap, blockchains, tokens);
189
-
190
193
  set({
191
194
  fromBlockchain,
192
195
  fromToken,
@@ -1,7 +1,11 @@
1
1
  import type { WidgetConfig } from '../../types';
2
- import type { StateCreator } from 'zustand';
2
+ import type { StateCreatorWithInitialData } from '../app';
3
3
 
4
- const initConfig: WidgetConfig = { apiKey: '' };
4
+ export const DEFAULT_CONFIG: WidgetConfig = {
5
+ apiKey: '',
6
+ multiWallets: true,
7
+ enableNewLiquiditySources: true,
8
+ };
5
9
 
6
10
  export type ConfigSlice = {
7
11
  config: WidgetConfig;
@@ -9,18 +13,24 @@ export type ConfigSlice = {
9
13
  updateConfig: (config: WidgetConfig) => void;
10
14
  };
11
15
 
12
- export const createConfigSlice: StateCreator<ConfigSlice> = (set, get) => ({
13
- config: initConfig,
16
+ export const createConfigSlice: StateCreatorWithInitialData<
17
+ WidgetConfig,
18
+ ConfigSlice,
19
+ ConfigSlice
20
+ > = (initialData, set, get) => {
21
+ return {
22
+ config: { ...DEFAULT_CONFIG, ...initialData },
14
23
 
15
- // Actions
16
- updateConfig: (nextConfig: WidgetConfig) => {
17
- const currentConfig = get().config;
24
+ // Actions
25
+ updateConfig: (nextConfig: WidgetConfig) => {
26
+ const currentConfig = get().config;
18
27
 
19
- set({
20
- config: {
21
- ...currentConfig,
22
- ...nextConfig,
23
- },
24
- });
25
- },
26
- });
28
+ set({
29
+ config: {
30
+ ...currentConfig,
31
+ ...nextConfig,
32
+ },
33
+ });
34
+ },
35
+ };
36
+ };
@@ -6,6 +6,7 @@ import type { StateCreator } from 'zustand';
6
6
 
7
7
  import { httpService as sdk } from '../../services/httpService';
8
8
  import { containsText } from '../../utils/common';
9
+ import { sortLiquiditySourcesByGroupTitle } from '../../utils/settings';
9
10
  import { tokensAreEqual } from '../../utils/wallets';
10
11
 
11
12
  type BlockchainOptions = {
@@ -18,15 +19,16 @@ type TokenOptions = {
18
19
  blockchain?: string;
19
20
  searchFor?: string;
20
21
  };
21
-
22
+ export type FetchStatus = 'loading' | 'success' | 'failed';
22
23
  export interface DataSlice {
23
24
  _blockchains: BlockchainMeta[];
24
25
  _tokens: Token[];
25
26
  _popularTokens: Token[];
26
27
  _swappers: SwapperMeta[];
27
-
28
+ fetchStatus: FetchStatus;
28
29
  blockchains: (options?: BlockchainOptions) => BlockchainMeta[];
29
30
  tokens: (options?: TokenOptions) => Token[];
31
+ swappers: () => SwapperMeta[];
30
32
  isTokenPinned: (token: Token) => boolean;
31
33
 
32
34
  fetch: () => Promise<void>;
@@ -43,7 +45,7 @@ export const createDataSlice: StateCreator<
43
45
  _tokens: [],
44
46
  _popularTokens: [],
45
47
  _swappers: [],
46
-
48
+ fetchStatus: 'loading',
47
49
  // Selectors
48
50
  blockchains: (options) => {
49
51
  const blockchainsFromState = get()._blockchains;
@@ -163,41 +165,74 @@ export const createDataSlice: StateCreator<
163
165
  );
164
166
  return pinned;
165
167
  },
168
+ swappers: () => {
169
+ const {
170
+ config: { enableNewLiquiditySources, liquiditySources },
171
+ } = get();
172
+
173
+ /*
174
+ * If the enableNewLiquiditySources flag is set to true, we return all swappers that are not included in the config.
175
+ * Otherwise, we return all swappers that are included in the config.
176
+ */
177
+ const swappers = get()._swappers.filter((swapper) => {
178
+ const swapperGroupIncludedInLiquiditySources = liquiditySources?.includes(
179
+ swapper.swapperGroup
180
+ );
181
+
182
+ const shouldExcludeLiquiditySources =
183
+ enableNewLiquiditySources ||
184
+ !liquiditySources ||
185
+ liquiditySources.length === 0;
186
+
187
+ return shouldExcludeLiquiditySources
188
+ ? !swapperGroupIncludedInLiquiditySources
189
+ : swapperGroupIncludedInLiquiditySources;
190
+ });
191
+
192
+ const sortedSwappers = swappers.sort(sortLiquiditySourcesByGroupTitle);
166
193
 
194
+ return sortedSwappers;
195
+ },
167
196
  // Actions
168
197
  fetch: async () => {
169
- const response = await sdk().getAllMetadata();
198
+ try {
199
+ const response = await sdk().getAllMetadata();
170
200
 
171
- const blockchains: BlockchainMeta[] = [];
172
- const tokens: Token[] = [];
173
- const popularTokens: Token[] = response.popularTokens;
174
- const swappers: SwapperMeta[] = response.swappers;
201
+ set({ fetchStatus: 'success' });
202
+ const blockchains: BlockchainMeta[] = [];
203
+ const tokens: Token[] = [];
204
+ const popularTokens: Token[] = response.popularTokens;
205
+ const swappers: SwapperMeta[] = response.swappers;
175
206
 
176
- const blockchainsWithAtLeastOneToken = new Set();
207
+ const blockchainsWithAtLeastOneToken = new Set();
177
208
 
178
- response.tokens.forEach((token) => {
179
- blockchainsWithAtLeastOneToken.add(token.blockchain);
209
+ response.tokens.forEach((token) => {
210
+ blockchainsWithAtLeastOneToken.add(token.blockchain);
180
211
 
181
- tokens.push(token);
182
- });
212
+ tokens.push(token);
213
+ });
183
214
 
184
- response.blockchains.forEach((blockchain) => {
185
- if (
186
- blockchain.enabled &&
187
- blockchainsWithAtLeastOneToken.has(blockchain.name)
188
- ) {
189
- blockchains.push(blockchain);
190
- }
191
- });
215
+ response.blockchains.forEach((blockchain) => {
216
+ if (
217
+ blockchain.enabled &&
218
+ blockchainsWithAtLeastOneToken.has(blockchain.name)
219
+ ) {
220
+ blockchains.push(blockchain);
221
+ }
222
+ });
192
223
 
193
- // Sort
194
- blockchains.sort((a, b) => a.sort - b.sort);
224
+ // Sort
225
+ blockchains.sort((a, b) => a.sort - b.sort);
195
226
 
196
- set({
197
- _blockchains: blockchains,
198
- _tokens: tokens,
199
- _popularTokens: popularTokens,
200
- _swappers: swappers,
201
- });
227
+ set({
228
+ _blockchains: blockchains,
229
+ _tokens: tokens,
230
+ _popularTokens: popularTokens,
231
+ _swappers: swappers,
232
+ });
233
+ } catch (error) {
234
+ set({ fetchStatus: 'failed' });
235
+ throw error;
236
+ }
202
237
  },
203
238
  });