@rango-dev/widget-embedded 0.17.1-next.2 → 0.17.1-next.21

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 (374) 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.helpers.d.ts +1 -3
  8. package/dist/components/ConfirmWalletsModal/ConfirmWallets.helpers.d.ts.map +1 -1
  9. package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +1 -1
  10. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
  11. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts +1 -3
  12. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts.map +1 -1
  13. package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
  14. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts +1 -4
  15. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts.map +1 -1
  16. package/dist/components/Layout/Layout.d.ts.map +1 -1
  17. package/dist/components/Layout/Layout.types.d.ts +2 -2
  18. package/dist/components/Layout/Layout.types.d.ts.map +1 -1
  19. package/dist/components/NoResult/NoResult.d.ts +4 -0
  20. package/dist/components/NoResult/NoResult.d.ts.map +1 -0
  21. package/dist/components/NoResult/NoResult.helpers.d.ts +4 -0
  22. package/dist/components/NoResult/NoResult.helpers.d.ts.map +1 -0
  23. package/dist/components/{NoRoutes/NoRoutes.styles.d.ts → NoResult/NoResult.styles.d.ts} +1 -1
  24. package/dist/components/{NoRoutes/NoRoutes.styles.d.ts.map → NoResult/NoResult.styles.d.ts.map} +1 -1
  25. package/dist/components/{NoRoutes/NoRoutes.types.d.ts → NoResult/NoResult.types.d.ts} +3 -3
  26. package/dist/components/NoResult/NoResult.types.d.ts.map +1 -0
  27. package/dist/components/NoResult/index.d.ts +2 -0
  28. package/dist/components/NoResult/index.d.ts.map +1 -0
  29. package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
  30. package/dist/components/Quote/Quote.d.ts +4 -0
  31. package/dist/components/Quote/Quote.d.ts.map +1 -0
  32. package/dist/components/Quote/Quote.styles.d.ts +1588 -0
  33. package/dist/components/Quote/Quote.styles.d.ts.map +1 -0
  34. package/dist/components/Quote/Quote.types.d.ts +21 -0
  35. package/dist/components/Quote/Quote.types.d.ts.map +1 -0
  36. package/dist/components/Quote/QuoteSkeleton.d.ts +4 -0
  37. package/dist/components/Quote/QuoteSkeleton.d.ts.map +1 -0
  38. package/dist/components/Quote/QuoteSkeleton.styles.d.ts +319 -0
  39. package/dist/components/Quote/QuoteSkeleton.styles.d.ts.map +1 -0
  40. package/dist/components/Quote/QuoteSkeleton.types.d.ts +6 -0
  41. package/dist/components/Quote/QuoteSkeleton.types.d.ts.map +1 -0
  42. package/dist/components/Quote/QuoteSummary.d.ts +11 -0
  43. package/dist/components/Quote/QuoteSummary.d.ts.map +1 -0
  44. package/dist/components/Quote/QuoteSummary.styles.d.ts +158 -0
  45. package/dist/components/Quote/QuoteSummary.styles.d.ts.map +1 -0
  46. package/dist/components/Quote/index.d.ts +4 -0
  47. package/dist/components/Quote/index.d.ts.map +1 -0
  48. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts +11 -0
  49. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts.map +1 -0
  50. package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts +4 -0
  51. package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts.map +1 -0
  52. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts +4 -0
  53. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -0
  54. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts +9 -0
  55. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts.map +1 -0
  56. package/dist/components/{RouteErrors/RouteErrors.styles.d.ts → QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts} +1 -1
  57. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts.map +1 -0
  58. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +23 -0
  59. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -0
  60. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts +11 -0
  61. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts.map +1 -0
  62. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts +11 -0
  63. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts.map +1 -0
  64. package/dist/components/QuoteWarningsAndErrors/index.d.ts +2 -0
  65. package/dist/components/QuoteWarningsAndErrors/index.d.ts.map +1 -0
  66. package/dist/components/SwapDetails/SwapDetails.Placeholder.d.ts.map +1 -1
  67. package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
  68. package/dist/components/SwapDetailsModal/SwapDetailsCompleteModal.d.ts.map +1 -1
  69. package/dist/components/SwapsGroup/SwapsGroup.d.ts.map +1 -1
  70. package/dist/components/SwapsGroup/SwapsGroup.styles.d.ts.map +1 -1
  71. package/dist/components/TokenList/TokenList.d.ts.map +1 -1
  72. package/dist/components/TokenList/TokenList.styles.d.ts.map +1 -1
  73. package/dist/components/UpdateUrl.d.ts +1 -6
  74. package/dist/components/UpdateUrl.d.ts.map +1 -1
  75. package/dist/components/WidgetEvents.d.ts.map +1 -1
  76. package/dist/constants/errors.d.ts +4 -4
  77. package/dist/constants/errors.d.ts.map +1 -1
  78. package/dist/constants/index.d.ts +1 -0
  79. package/dist/constants/index.d.ts.map +1 -1
  80. package/dist/constants/messages.d.ts +1 -1
  81. package/dist/constants/navigationRoutes.d.ts +1 -2
  82. package/dist/constants/navigationRoutes.d.ts.map +1 -1
  83. package/dist/constants/searchParams.d.ts +2 -1
  84. package/dist/constants/searchParams.d.ts.map +1 -1
  85. package/dist/constants/warnings.d.ts +2 -2
  86. package/dist/constants/warnings.d.ts.map +1 -1
  87. package/dist/containers/App/App.d.ts +3 -0
  88. package/dist/containers/App/App.d.ts.map +1 -0
  89. package/dist/containers/App/App.styles.d.ts +158 -0
  90. package/dist/containers/App/App.styles.d.ts.map +1 -0
  91. package/dist/containers/App/index.d.ts +2 -0
  92. package/dist/containers/App/index.d.ts.map +1 -0
  93. package/dist/containers/QuoteInfo/QuoteInfo.d.ts +4 -0
  94. package/dist/containers/QuoteInfo/QuoteInfo.d.ts.map +1 -0
  95. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts +788 -0
  96. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts.map +1 -0
  97. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts +20 -0
  98. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts.map +1 -0
  99. package/dist/containers/QuoteInfo/index.d.ts +2 -0
  100. package/dist/containers/QuoteInfo/index.d.ts.map +1 -0
  101. package/dist/containers/Wallets/Wallets.d.ts +6 -0
  102. package/dist/containers/Wallets/Wallets.d.ts.map +1 -0
  103. package/dist/containers/Wallets/Wallets.types.d.ts +11 -0
  104. package/dist/containers/Wallets/Wallets.types.d.ts.map +1 -0
  105. package/dist/containers/Wallets/index.d.ts +2 -0
  106. package/dist/containers/Wallets/index.d.ts.map +1 -0
  107. package/dist/containers/Widget/Widget.d.ts +5 -0
  108. package/dist/containers/Widget/Widget.d.ts.map +1 -0
  109. package/dist/containers/Widget/Widget.types.d.ts +5 -0
  110. package/dist/containers/Widget/Widget.types.d.ts.map +1 -0
  111. package/dist/containers/Widget/index.d.ts +3 -0
  112. package/dist/containers/Widget/index.d.ts.map +1 -0
  113. package/dist/containers/WidgetInfo/WidgetInfo.d.ts +6 -0
  114. package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -0
  115. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +14 -0
  116. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -0
  117. package/dist/containers/WidgetInfo/index.d.ts +2 -0
  118. package/dist/containers/WidgetInfo/index.d.ts.map +1 -0
  119. package/dist/containers/WidgetProvider/WidgetProvider.d.ts +5 -0
  120. package/dist/containers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
  121. package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts +7 -0
  122. package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts.map +1 -0
  123. package/dist/containers/WidgetProvider/index.d.ts +2 -0
  124. package/dist/containers/WidgetProvider/index.d.ts.map +1 -0
  125. package/dist/hooks/useConfirmSwap/index.d.ts +2 -0
  126. package/dist/hooks/useConfirmSwap/index.d.ts.map +1 -0
  127. package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts +3 -0
  128. package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts.map +1 -0
  129. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts +19 -0
  130. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts.map +1 -0
  131. package/dist/hooks/{useConfirmSwap.d.ts → useConfirmSwap/useConfirmSwap.types.d.ts} +5 -7
  132. package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts.map +1 -0
  133. package/dist/hooks/{useFetchBestRoute.d.ts → useFetchQuote.d.ts} +3 -3
  134. package/dist/hooks/useFetchQuote.d.ts.map +1 -0
  135. package/dist/hooks/useForceAutoConnect.d.ts +2 -0
  136. package/dist/hooks/useForceAutoConnect.d.ts.map +1 -0
  137. package/dist/hooks/useLanguage.d.ts +1 -1
  138. package/dist/hooks/useLanguage.d.ts.map +1 -1
  139. package/dist/hooks/useNavigateBack.d.ts +1 -3
  140. package/dist/hooks/useNavigateBack.d.ts.map +1 -1
  141. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.d.ts +1 -1
  142. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts +2 -2
  143. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.d.ts.map +1 -1
  144. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts +5 -7
  145. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts.map +1 -1
  146. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts +1 -0
  147. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.d.ts.map +1 -1
  148. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts +5 -1
  149. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.d.ts.map +1 -1
  150. package/dist/hooks/useSwapInput.d.ts +4 -2
  151. package/dist/hooks/useSwapInput.d.ts.map +1 -1
  152. package/dist/hooks/useSyncStoresWithConfig.d.ts +1 -2
  153. package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
  154. package/dist/hooks/useWalletList.d.ts.map +1 -1
  155. package/dist/index.d.ts +13 -5
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +1 -1
  158. package/dist/index.js.map +4 -4
  159. package/dist/pages/ConfirmSwapPage.d.ts +1 -6
  160. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  161. package/dist/pages/HistoryPage.d.ts.map +1 -1
  162. package/dist/pages/Home.d.ts.map +1 -1
  163. package/dist/pages/LanguagePage.d.ts.map +1 -1
  164. package/dist/pages/LiquiditySourcePage.d.ts +1 -2
  165. package/dist/pages/LiquiditySourcePage.d.ts.map +1 -1
  166. package/dist/pages/SelectBlockchainPage.d.ts.map +1 -1
  167. package/dist/pages/SelectSwapItemsPage.d.ts.map +1 -1
  168. package/dist/pages/SettingsPage.d.ts +1 -6
  169. package/dist/pages/SettingsPage.d.ts.map +1 -1
  170. package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
  171. package/dist/pages/ThemePage.d.ts.map +1 -1
  172. package/dist/pages/WalletsPage.d.ts +1 -8
  173. package/dist/pages/WalletsPage.d.ts.map +1 -1
  174. package/dist/store/AppStore.d.ts +11 -0
  175. package/dist/store/AppStore.d.ts.map +1 -0
  176. package/dist/store/app.d.ts +5 -23
  177. package/dist/store/app.d.ts.map +1 -1
  178. package/dist/store/{bestRoute.d.ts → quote.d.ts} +39 -27
  179. package/dist/store/quote.d.ts.map +1 -0
  180. package/dist/store/settings.d.ts +3 -2
  181. package/dist/store/settings.d.ts.map +1 -1
  182. package/dist/store/slices/config.d.ts +3 -2
  183. package/dist/store/slices/config.d.ts.map +1 -1
  184. package/dist/store/slices/data.d.ts +3 -0
  185. package/dist/store/slices/data.d.ts.map +1 -1
  186. package/dist/store/wallets.d.ts +5 -4
  187. package/dist/store/wallets.d.ts.map +1 -1
  188. package/dist/types/config.d.ts +19 -5
  189. package/dist/types/config.d.ts.map +1 -1
  190. package/dist/types/index.d.ts +1 -1
  191. package/dist/types/index.d.ts.map +1 -1
  192. package/dist/types/quote.d.ts +82 -0
  193. package/dist/types/quote.d.ts.map +1 -0
  194. package/dist/types/swap.d.ts +3 -13
  195. package/dist/types/swap.d.ts.map +1 -1
  196. package/dist/utils/colors.d.ts.map +1 -1
  197. package/dist/utils/configs.d.ts +1 -0
  198. package/dist/utils/configs.d.ts.map +1 -1
  199. package/dist/utils/meta.d.ts +2 -1
  200. package/dist/utils/meta.d.ts.map +1 -1
  201. package/dist/utils/numbers.d.ts +1 -1
  202. package/dist/utils/numbers.d.ts.map +1 -1
  203. package/dist/utils/{routing.d.ts → quote.d.ts} +16 -12
  204. package/dist/utils/quote.d.ts.map +1 -0
  205. package/dist/utils/settings.d.ts +3 -2
  206. package/dist/utils/settings.d.ts.map +1 -1
  207. package/dist/utils/swap.d.ts +34 -23
  208. package/dist/utils/swap.d.ts.map +1 -1
  209. package/dist/utils/wallets.d.ts +2 -2
  210. package/dist/utils/wallets.d.ts.map +1 -1
  211. package/package.json +6 -6
  212. package/src/QueueManager.tsx +18 -17
  213. package/src/components/AppRouter.tsx +8 -32
  214. package/src/components/AppRoutes.tsx +57 -69
  215. package/src/components/BlockchainList/BlockchainList.tsx +4 -4
  216. package/src/components/BlockchainsSection/BlockchainsSection.tsx +7 -7
  217. package/src/components/ConfirmWalletsModal/ConfirmWallets.helpers.ts +2 -64
  218. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +39 -45
  219. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.types.ts +1 -3
  220. package/src/components/ConfirmWalletsModal/WalletList.tsx +6 -5
  221. package/src/components/ConfirmWalletsModal/WalletList.type.ts +1 -4
  222. package/src/components/Layout/Layout.tsx +10 -7
  223. package/src/components/Layout/Layout.types.ts +2 -2
  224. package/src/components/LoadingSwapDetails/LoadingSwapDetails.styles.ts +3 -3
  225. package/src/components/LoadingSwapDetails/LoadingSwapDetails.tsx +6 -6
  226. package/src/components/{NoRoutes/NoRoutes.helper.ts → NoResult/NoResult.helpers.ts} +23 -16
  227. package/src/components/{NoRoutes/NoRoutes.styles.ts → NoResult/NoResult.styles.ts} +2 -0
  228. package/src/components/{NoRoutes/NoRoutes.tsx → NoResult/NoResult.tsx} +10 -12
  229. package/src/components/{NoRoutes/NoRoutes.types.ts → NoResult/NoResult.types.ts} +3 -2
  230. package/src/components/NoResult/index.ts +1 -0
  231. package/src/components/NotificationContent/NotificationContent.tsx +5 -3
  232. package/src/components/Quote/Quote.styles.ts +239 -0
  233. package/src/components/Quote/Quote.tsx +413 -0
  234. package/src/components/Quote/Quote.types.ts +15 -0
  235. package/src/components/Quote/QuoteSkeleton.styles.ts +110 -0
  236. package/src/components/Quote/QuoteSkeleton.tsx +108 -0
  237. package/src/components/Quote/QuoteSkeleton.types.ts +5 -0
  238. package/src/components/Quote/QuoteSummary.styles.ts +15 -0
  239. package/src/components/Quote/QuoteSummary.tsx +46 -0
  240. package/src/components/Quote/index.ts +3 -0
  241. package/src/components/QuoteWarningsAndErrors/HighValueLossWarningModal.tsx +107 -0
  242. package/src/components/{RouteErrors/RouteErrorsModalItem.tsx → QuoteWarningsAndErrors/QuoteErrorsModalItem.tsx} +4 -4
  243. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.ts +74 -0
  244. package/src/components/{RouteErrors/RouteErrors.styles.ts → QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.ts} +8 -1
  245. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +103 -0
  246. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +25 -0
  247. package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +77 -0
  248. package/src/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.tsx +38 -0
  249. package/src/components/QuoteWarningsAndErrors/index.ts +1 -0
  250. package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +0 -4
  251. package/src/components/SwapDetails/SwapDetails.tsx +17 -24
  252. package/src/components/SwapDetailsModal/SwapDetailsCompleteModal.tsx +4 -3
  253. package/src/components/SwapDetailsModal/SwapDetailsModal.Cancel.tsx +2 -2
  254. package/src/components/SwapsGroup/SwapsGroup.styles.ts +8 -1
  255. package/src/components/SwapsGroup/SwapsGroup.tsx +0 -2
  256. package/src/components/SwitchFromAndTo.tsx +2 -2
  257. package/src/components/TokenList/TokenList.styles.ts +14 -2
  258. package/src/components/TokenList/TokenList.tsx +6 -7
  259. package/src/components/UpdateUrl.tsx +36 -29
  260. package/src/components/WidgetEvents.tsx +4 -2
  261. package/src/constants/errors.ts +17 -15
  262. package/src/constants/index.ts +1 -0
  263. package/src/constants/messages.ts +1 -1
  264. package/src/constants/navigationRoutes.ts +7 -8
  265. package/src/constants/searchParams.ts +1 -0
  266. package/src/constants/warnings.ts +7 -7
  267. package/src/containers/App/App.styles.ts +18 -0
  268. package/src/containers/App/App.tsx +55 -0
  269. package/src/containers/App/index.ts +1 -0
  270. package/src/containers/QuoteInfo/QuoteInfo.styles.ts +31 -0
  271. package/src/containers/QuoteInfo/QuoteInfo.tsx +98 -0
  272. package/src/containers/QuoteInfo/QuoteInfo.types.ts +20 -0
  273. package/src/containers/QuoteInfo/index.ts +1 -0
  274. package/src/{Wallets.tsx → containers/Wallets/Wallets.tsx} +40 -32
  275. package/src/containers/Wallets/Wallets.types.ts +12 -0
  276. package/src/containers/Wallets/index.ts +1 -0
  277. package/src/containers/Widget/Widget.tsx +19 -0
  278. package/src/containers/Widget/Widget.types.ts +5 -0
  279. package/src/containers/Widget/index.ts +2 -0
  280. package/src/containers/WidgetInfo/WidgetInfo.tsx +47 -0
  281. package/src/containers/WidgetInfo/WidgetInfo.types.ts +14 -0
  282. package/src/containers/WidgetInfo/index.ts +1 -0
  283. package/src/containers/WidgetProvider/WidgetProvider.tsx +28 -0
  284. package/src/containers/WidgetProvider/WidgetProvider.types.ts +7 -0
  285. package/src/containers/WidgetProvider/index.ts +1 -0
  286. package/src/hooks/useConfirmSwap/index.ts +1 -0
  287. package/src/hooks/useConfirmSwap/useConfirmSwap.helpers.ts +172 -0
  288. package/src/hooks/useConfirmSwap/useConfirmSwap.ts +137 -0
  289. package/src/hooks/useConfirmSwap/useConfirmSwap.types.ts +19 -0
  290. package/src/hooks/{useFetchBestRoute.ts → useFetchQuote.ts} +3 -3
  291. package/src/hooks/useForceAutoConnect.ts +27 -0
  292. package/src/hooks/useLanguage.ts +2 -2
  293. package/src/hooks/useNavigateBack.ts +3 -52
  294. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.constants.ts +1 -1
  295. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.ts +37 -7
  296. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.mock.ts +60 -0
  297. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.test.ts +78 -3
  298. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.ts +13 -4
  299. package/src/hooks/usePrepareBlockchainList/usePrepareBlockchainList.types.ts +6 -1
  300. package/src/hooks/useSwapInput.ts +139 -46
  301. package/src/hooks/useSyncStoresWithConfig.ts +22 -19
  302. package/src/hooks/useWalletList.ts +3 -5
  303. package/src/index.ts +14 -3
  304. package/src/pages/ConfirmSwapPage.tsx +95 -248
  305. package/src/pages/HistoryPage.tsx +1 -5
  306. package/src/pages/Home.tsx +75 -270
  307. package/src/pages/LanguagePage.tsx +0 -5
  308. package/src/pages/LiquiditySourcePage.tsx +22 -35
  309. package/src/pages/SelectBlockchainPage.tsx +31 -24
  310. package/src/pages/SelectSwapItemsPage.tsx +9 -23
  311. package/src/pages/SettingsPage.tsx +8 -15
  312. package/src/pages/SwapDetailsPage.tsx +6 -7
  313. package/src/pages/ThemePage.tsx +0 -4
  314. package/src/pages/WalletsPage.tsx +4 -15
  315. package/src/services/httpService.ts +1 -1
  316. package/src/store/AppStore.tsx +35 -0
  317. package/src/store/app.ts +18 -6
  318. package/src/store/{bestRoute.ts → quote.ts} +68 -60
  319. package/src/store/settings.ts +7 -4
  320. package/src/store/slices/config.ts +25 -15
  321. package/src/store/slices/data.ts +64 -29
  322. package/src/store/wallets.ts +12 -8
  323. package/src/types/config.ts +20 -5
  324. package/src/types/index.ts +1 -1
  325. package/src/types/quote.ts +107 -0
  326. package/src/types/swap.ts +3 -12
  327. package/src/utils/colors.ts +2 -1
  328. package/src/utils/configs.ts +2 -1
  329. package/src/utils/meta.ts +8 -1
  330. package/src/utils/numbers.ts +1 -1
  331. package/src/utils/quote.ts +338 -0
  332. package/src/utils/settings.ts +8 -7
  333. package/src/utils/swap.ts +153 -116
  334. package/src/utils/wallets.ts +29 -17
  335. package/dist/Wallets.d.ts +0 -17
  336. package/dist/Wallets.d.ts.map +0 -1
  337. package/dist/Widget.d.ts +0 -9
  338. package/dist/Widget.d.ts.map +0 -1
  339. package/dist/components/NoRoutes/NoRoutes.d.ts +0 -4
  340. package/dist/components/NoRoutes/NoRoutes.d.ts.map +0 -1
  341. package/dist/components/NoRoutes/NoRoutes.helper.d.ts +0 -3
  342. package/dist/components/NoRoutes/NoRoutes.helper.d.ts.map +0 -1
  343. package/dist/components/NoRoutes/NoRoutes.types.d.ts.map +0 -1
  344. package/dist/components/NoRoutes/index.d.ts +0 -2
  345. package/dist/components/NoRoutes/index.d.ts.map +0 -1
  346. package/dist/components/RouteErrors/RouteErrors.d.ts +0 -4
  347. package/dist/components/RouteErrors/RouteErrors.d.ts.map +0 -1
  348. package/dist/components/RouteErrors/RouteErrors.styles.d.ts.map +0 -1
  349. package/dist/components/RouteErrors/RouteErrors.types.d.ts +0 -24
  350. package/dist/components/RouteErrors/RouteErrors.types.d.ts.map +0 -1
  351. package/dist/components/RouteErrors/RouteErrorsModal.d.ts +0 -4
  352. package/dist/components/RouteErrors/RouteErrorsModal.d.ts.map +0 -1
  353. package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts +0 -4
  354. package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts.map +0 -1
  355. package/dist/components/RouteErrors/index.d.ts +0 -2
  356. package/dist/components/RouteErrors/index.d.ts.map +0 -1
  357. package/dist/hooks/useConfirmSwap.d.ts.map +0 -1
  358. package/dist/hooks/useFetchBestRoute.d.ts.map +0 -1
  359. package/dist/store/bestRoute.d.ts.map +0 -1
  360. package/dist/store/meta.d.ts +0 -23
  361. package/dist/store/meta.d.ts.map +0 -1
  362. package/dist/types/routing.d.ts +0 -65
  363. package/dist/types/routing.d.ts.map +0 -1
  364. package/dist/utils/routing.d.ts.map +0 -1
  365. package/src/Widget.tsx +0 -119
  366. package/src/components/NoRoutes/index.ts +0 -1
  367. package/src/components/RouteErrors/RouteErrors.tsx +0 -79
  368. package/src/components/RouteErrors/RouteErrors.types.ts +0 -29
  369. package/src/components/RouteErrors/RouteErrorsModal.tsx +0 -129
  370. package/src/components/RouteErrors/index.ts +0 -1
  371. package/src/hooks/useConfirmSwap.ts +0 -303
  372. package/src/store/meta.ts +0 -39
  373. package/src/types/routing.ts +0 -77
  374. package/src/utils/routing.ts +0 -321
@@ -0,0 +1,15 @@
1
+ import type { QuoteError, QuoteWarning } from '../../types';
2
+ import type { BestRouteResponse } from 'rango-sdk';
3
+ import type { ReactNode } from 'react';
4
+
5
+ export type QuoteProps = {
6
+ type: 'basic' | 'list-item' | 'swap-preview';
7
+ error: QuoteError | null;
8
+ warning: QuoteWarning | null;
9
+ recommended: boolean;
10
+ tag?: ReactNode;
11
+ quote: BestRouteResponse;
12
+ input: { value: string; usdValue: string };
13
+ output: { value: string; usdValue?: string };
14
+ expanded?: boolean;
15
+ };
@@ -0,0 +1,110 @@
1
+ import { darkTheme, styled } from '@rango-dev/ui';
2
+
3
+ export const Container = styled('div', {
4
+ $$color: '$colors$neutral100',
5
+ [`.${darkTheme} &`]: {
6
+ $$color: '$colors$neutral300',
7
+ },
8
+ backgroundColor: '$$color',
9
+ borderBottomLeftRadius: '$xm',
10
+ borderBottomRightRadius: '$xm',
11
+ padding: '$15 ',
12
+ '& .cost-and-tag': {
13
+ display: 'flex',
14
+ justifyContent: 'space-between',
15
+ alignItems: 'center',
16
+ height: '22px',
17
+ },
18
+ variants: {
19
+ rounded: {
20
+ true: {
21
+ borderRadius: '$xm',
22
+ },
23
+ },
24
+ },
25
+ '& .cost': {
26
+ display: 'flex',
27
+ },
28
+ '& .basic-summary': {
29
+ padding: '$15 $0 14px $0',
30
+ },
31
+ '& .output': {
32
+ padding: '$6 $0 $15 $0',
33
+ display: 'flex',
34
+ flexDirection: 'column',
35
+ },
36
+ '& .output__token-info': {
37
+ display: 'flex',
38
+ justifyContent: 'start',
39
+ alignItems: 'center',
40
+ paddingBottom: '$5',
41
+ },
42
+ '& .quote-summary': {
43
+ display: 'flex',
44
+ justifyContent: 'space-between',
45
+ alignItems: 'end',
46
+ },
47
+ '& .quote-summary__separator': {
48
+ height: '$28',
49
+ marginLeft: '13px',
50
+ borderLeft: '1px solid $neutral700',
51
+ },
52
+ '& .token-amount': {
53
+ display: 'flex',
54
+ justifyContent: 'space-between',
55
+ },
56
+ '& .token-amount__label': {
57
+ display: 'flex',
58
+ flexDirection: 'column',
59
+ alignItems: 'start',
60
+ },
61
+ '& .chains': {
62
+ paddingTop: '$2',
63
+ },
64
+ '& .swap-preview': {
65
+ padding: '$15 $0 $15 $0',
66
+ },
67
+ '& .steps': {
68
+ paddingLeft: '$8',
69
+ },
70
+ '& .step__title': {
71
+ display: 'flex',
72
+ alignItems: 'center',
73
+ },
74
+ '& .step__content': {
75
+ display: 'flex',
76
+ alignItems: 'start',
77
+ },
78
+ '& .step__tokens': {
79
+ paddingTop: '$5',
80
+ paddingBottom: '$10',
81
+ display: 'flex',
82
+ alignItems: 'center',
83
+ },
84
+ '& .step__token-info': {
85
+ display: 'flex',
86
+ alignItems: 'center',
87
+ },
88
+ '& .step__icon-container': {
89
+ margin: '$0 $2',
90
+ padding: '$4',
91
+ display: 'flex',
92
+ justifyContent: 'center',
93
+ alignItems: 'center',
94
+ },
95
+ });
96
+
97
+ export const StepSeparator = styled('div', {
98
+ borderLeft: '1px dashed black',
99
+ minHeight: ' 64px',
100
+ margin: '0px 11.5px',
101
+ alignSelf: 'stretch',
102
+ variants: {
103
+ hideSeparator: {
104
+ true: {
105
+ minHeight: 'unset',
106
+ height: '0',
107
+ },
108
+ },
109
+ },
110
+ });
@@ -0,0 +1,108 @@
1
+ import type { PropTypes } from './QuoteSkeleton.types';
2
+
3
+ import { ChainToken, Divider, NextIcon, Skeleton } from '@rango-dev/ui';
4
+ import React from 'react';
5
+
6
+ import { Container, StepSeparator } from './QuoteSkeleton.styles';
7
+
8
+ function StepSkeleton(props: { separator?: boolean }) {
9
+ const { separator = true } = props;
10
+ return (
11
+ <>
12
+ <div className="step__title">
13
+ <Skeleton height={22} width={22} variant="circular" />
14
+ <Divider direction="horizontal" size={8} />
15
+ <Skeleton height={15} width={148} variant="rounded" />
16
+ </div>
17
+ <div className="step__content">
18
+ <StepSeparator hideSeparator={!separator} />
19
+ <div className="step__tokens">
20
+ <div className="step__token-info">
21
+ <ChainToken size="small" loading chainImage="" tokenImage="" />
22
+ <Divider direction="horizontal" size={8} />
23
+ <Skeleton height={12} width={76} variant="rounded" />
24
+ </div>
25
+ <div className="step__icon-container">
26
+ <NextIcon color="gray" size={16} />
27
+ </div>
28
+ <div className="step__token-info">
29
+ <ChainToken size="small" loading chainImage="" tokenImage="" />
30
+ <Divider direction="horizontal" size={8} />
31
+ <Skeleton height={12} width={76} variant="rounded" />
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </>
36
+ );
37
+ }
38
+
39
+ export function QuoteSkeleton(props: PropTypes) {
40
+ const { type, expanded, tag = false } = props;
41
+ const quoteSummary = (
42
+ <div className="quote-summary">
43
+ <div className="token-amount">
44
+ <ChainToken loading size="medium" chainImage="" tokenImage="" />
45
+ <Divider size={8} direction="horizontal" />
46
+ <div className="token-amount__label">
47
+ <Skeleton height={10} width={60} variant="rounded" />
48
+ <Divider size={4} />
49
+ <Skeleton height={15} width={148} variant="rounded" />
50
+ </div>
51
+ </div>
52
+ <Skeleton height={12} width={64} variant="rounded" />
53
+ </div>
54
+ );
55
+
56
+ return (
57
+ <Container rounded={type !== 'basic'}>
58
+ <div className="cost-and-tag">
59
+ <div className="cost">
60
+ <Skeleton width={60} height={10} variant="rounded" />
61
+ <Divider size={4} direction="horizontal" />
62
+ <Skeleton width={60} height={10} variant="rounded" />
63
+ <Divider size={4} direction="horizontal" />
64
+ <Skeleton width={60} height={10} variant="rounded" />
65
+ </div>
66
+ {tag && <Skeleton height={22} width={100} variant="rounded" />}
67
+ </div>
68
+ {type === 'basic' && (
69
+ <div className="basic-summary">
70
+ <Skeleton height={15} width={148} variant="rounded" />
71
+ </div>
72
+ )}
73
+ {type === 'list-item' && (
74
+ <div className="output">
75
+ <div className="output__token-info">
76
+ <ChainToken loading size="medium" chainImage="" tokenImage="" />
77
+ <Divider direction="horizontal" size={4} />
78
+ <Skeleton height={15} width={150} variant="rounded" />
79
+ </div>
80
+ <Divider size={4} />
81
+ <Skeleton height={10} width={184} variant="rounded" />
82
+ </div>
83
+ )}
84
+ {type === 'swap-preview' && (
85
+ <>
86
+ <Divider size={4} />
87
+ <div className="swap-preview">
88
+ {quoteSummary}
89
+ <div className="quote-summary__separator" />
90
+ {quoteSummary}
91
+ </div>
92
+ </>
93
+ )}
94
+ <div className="chains">
95
+ <Skeleton height={15} width={321} variant="rounded" />
96
+ </div>
97
+
98
+ {expanded && (
99
+ <div className="steps">
100
+ <Divider size={20} />
101
+ <StepSkeleton />
102
+ <StepSkeleton />
103
+ <StepSkeleton separator={false} />
104
+ </div>
105
+ )}
106
+ </Container>
107
+ );
108
+ }
@@ -0,0 +1,5 @@
1
+ export type PropTypes = {
2
+ type: 'basic' | 'list-item' | 'swap-preview';
3
+ expanded?: boolean;
4
+ tag?: boolean;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { styled } from '@rango-dev/ui';
2
+
3
+ export const Container = styled('div', {
4
+ position: 'relative',
5
+ display: 'flex',
6
+ flexDirection: 'column',
7
+ width: '100%',
8
+ '& .separator': {
9
+ height: '14px',
10
+ marginLeft: '14px',
11
+ position: 'absolute',
12
+ borderLeft: '1px solid $foreground',
13
+ top: '42%',
14
+ },
15
+ });
@@ -0,0 +1,46 @@
1
+ import type { PriceImpactWarningLevel, Step } from '@rango-dev/ui';
2
+
3
+ import { TokenAmount } from '@rango-dev/ui';
4
+ import React from 'react';
5
+
6
+ import { Container } from './QuoteSummary.styles';
7
+
8
+ type PropTypes = {
9
+ from: Step['from'];
10
+ to: Step['to'];
11
+ percentageChange?: string | null;
12
+ warningLevel: PriceImpactWarningLevel;
13
+ };
14
+
15
+ export function QuoteSummary(props: PropTypes) {
16
+ const { from, to, percentageChange, warningLevel } = props;
17
+ return (
18
+ <Container>
19
+ <TokenAmount
20
+ direction="horizontal"
21
+ label="Swap input"
22
+ type="input"
23
+ price={{ value: from.price.value, usdValue: from.price.usdValue }}
24
+ token={{
25
+ displayName: from.token.displayName,
26
+ image: from.token.image,
27
+ }}
28
+ chain={{ image: from.chain.image }}
29
+ />
30
+ <div className="separator" />
31
+ <TokenAmount
32
+ direction="horizontal"
33
+ label="Estimated output"
34
+ type="output"
35
+ price={{ value: to.price.value, usdValue: to.price.usdValue }}
36
+ token={{
37
+ displayName: to.token.displayName,
38
+ image: to.token.image,
39
+ }}
40
+ chain={{ image: to.chain.image }}
41
+ percentageChange={percentageChange}
42
+ warningLevel={warningLevel}
43
+ />
44
+ </Container>
45
+ );
46
+ }
@@ -0,0 +1,3 @@
1
+ export { Quote } from './Quote';
2
+ export { QuoteSkeleton } from './QuoteSkeleton';
3
+ export { QuoteSummary } from './QuoteSummary';
@@ -0,0 +1,107 @@
1
+ import type { HighValueLossWarning } from '../../types';
2
+
3
+ import { i18n } from '@lingui/core';
4
+ import {
5
+ Button,
6
+ Divider,
7
+ MessageBox,
8
+ Modal,
9
+ Typography,
10
+ WarningIcon,
11
+ } from '@rango-dev/ui';
12
+ import React from 'react';
13
+
14
+ import { errorMessages } from '../../constants/errors';
15
+ import {
16
+ GAS_FEE_MAX_DECIMALS,
17
+ GAS_FEE_MIN_DECIMALS,
18
+ PERCENTAGE_CHANGE_MAX_DECIMALS,
19
+ PERCENTAGE_CHANGE_MIN_DECIMALS,
20
+ USD_VALUE_MAX_DECIMALS,
21
+ USD_VALUE_MIN_DECIMALS,
22
+ } from '../../constants/routing';
23
+ import { getContainer } from '../../utils/common';
24
+ import { numberToString } from '../../utils/numbers';
25
+
26
+ import { QuoteErrorsModalItem } from './QuoteErrorsModalItem';
27
+ import { Flex } from './QuoteWarningsAndErrors.styles';
28
+
29
+ type Props = {
30
+ open: boolean;
31
+ onClose: () => void;
32
+ onConfirm: () => void;
33
+ warning: HighValueLossWarning;
34
+ };
35
+
36
+ export function HighValueLossWarningModal(props: Props) {
37
+ const { open, onClose, onConfirm, warning } = props;
38
+ const type = warning.warningLevel === 'high' ? 'error' : 'warning';
39
+ const highValueLossData = [
40
+ {
41
+ title: i18n.t('Swapping'),
42
+ value: numberToString(
43
+ warning.inputUsdValue,
44
+ USD_VALUE_MIN_DECIMALS,
45
+ USD_VALUE_MAX_DECIMALS
46
+ ),
47
+ },
48
+ {
49
+ title: i18n.t('Gas cost'),
50
+ value: numberToString(
51
+ warning.totalFee,
52
+ GAS_FEE_MIN_DECIMALS,
53
+ GAS_FEE_MAX_DECIMALS
54
+ ),
55
+ },
56
+ {
57
+ title: i18n.t('Receiving'),
58
+ value: numberToString(
59
+ warning.outputUsdValue,
60
+ USD_VALUE_MIN_DECIMALS,
61
+ USD_VALUE_MAX_DECIMALS
62
+ ),
63
+ },
64
+ {
65
+ title: i18n.t('Price impact'),
66
+ value: numberToString(
67
+ warning.priceImpact,
68
+ PERCENTAGE_CHANGE_MIN_DECIMALS,
69
+ PERCENTAGE_CHANGE_MAX_DECIMALS
70
+ ),
71
+ valueColor: `${type}500`,
72
+ },
73
+ ];
74
+
75
+ return (
76
+ <Modal open={open} onClose={onClose} container={getContainer()}>
77
+ <MessageBox
78
+ type={type}
79
+ title={errorMessages().highValueLossError.impactTitle}
80
+ description={errorMessages().highValueLossError.description}
81
+ />
82
+
83
+ <Flex>
84
+ <Divider size={20} />
85
+ <Typography size="small" variant="title">
86
+ {i18n.t('Details')}
87
+ </Typography>
88
+ <Flex>
89
+ {highValueLossData.map((item, index) => {
90
+ const key = index;
91
+ return <QuoteErrorsModalItem key={key} {...item} />;
92
+ })}
93
+ </Flex>
94
+ </Flex>
95
+
96
+ <Divider size={32} />
97
+ <Button
98
+ type="primary"
99
+ size="large"
100
+ prefix={<WarningIcon />}
101
+ fullWidth
102
+ onClick={onConfirm}>
103
+ {errorMessages().highValueLossError.confirmMessage}
104
+ </Button>
105
+ </Modal>
106
+ );
107
+ }
@@ -1,16 +1,16 @@
1
- import type { ModalContentData } from './RouteErrors.types';
1
+ import type { ModalContentData } from './QuoteWarningsAndErrors.types';
2
2
 
3
3
  import { Typography } from '@rango-dev/ui';
4
4
  import React from 'react';
5
5
 
6
- import { Item } from './RouteErrors.styles';
6
+ import { Item } from './QuoteWarningsAndErrors.styles';
7
7
 
8
- export function RouteErrorsModalItem(props: ModalContentData) {
8
+ export function QuoteErrorsModalItem(props: ModalContentData) {
9
9
  const { title, value, valueColor } = props;
10
10
 
11
11
  return (
12
12
  <Item>
13
- <Typography size="medium" variant="label" color="neutral600">
13
+ <Typography size="medium" variant="label" className="_title">
14
14
  {title}
15
15
  </Typography>
16
16
  <Typography
@@ -0,0 +1,74 @@
1
+ import type {
2
+ BridgeLimitError,
3
+ InsufficientSlippageError,
4
+ QuoteWarning,
5
+ } from '../../types';
6
+
7
+ import { i18n } from '@lingui/core';
8
+
9
+ import { errorMessages } from '../../constants/errors';
10
+ import { QuoteErrorType, QuoteWarningType } from '../../types';
11
+ import { getPriceImpactLevel } from '../../utils/quote';
12
+
13
+ type AlertInfo = {
14
+ alertType: 'error' | 'warning';
15
+ title: string;
16
+ action: 'show-info' | 'change-settings' | null;
17
+ };
18
+
19
+ export function makeAlerts(
20
+ warning: QuoteWarning | null,
21
+ error: BridgeLimitError | InsufficientSlippageError | null
22
+ ): AlertInfo | null {
23
+ const alertInfo: AlertInfo = {
24
+ alertType: 'warning',
25
+ title: '',
26
+ action: 'show-info',
27
+ };
28
+ if (warning) {
29
+ if (warning.type === QuoteWarningType.HIGH_VALUE_LOSS) {
30
+ const warningLevel = getPriceImpactLevel(warning.priceImpact);
31
+ if (warningLevel === 'high') {
32
+ alertInfo.alertType = 'error';
33
+ }
34
+ alertInfo.action = null;
35
+ alertInfo.title = errorMessages().highValueLossError.title;
36
+ }
37
+ if (warning.type === QuoteWarningType.UNKNOWN_PRICE) {
38
+ alertInfo.title = errorMessages().unknownPriceError.title;
39
+ }
40
+ if (warning.type === QuoteWarningType.INSUFFICIENT_SLIPPAGE) {
41
+ alertInfo.title = i18n.t({
42
+ id: 'We recommend you to increase slippage to at least {minRequiredSlippage} for this route.',
43
+ values: {
44
+ minRequiredSlippage: warning.minRequiredSlippage,
45
+ },
46
+ });
47
+ alertInfo.action = 'change-settings';
48
+ }
49
+ if (warning.type === QuoteWarningType.HIGH_SLIPPAGE) {
50
+ alertInfo.title = i18n.t('Caution, your slippage is high.');
51
+ }
52
+ return alertInfo;
53
+ }
54
+ if (error) {
55
+ alertInfo.alertType = 'error';
56
+ if (error.type === QuoteErrorType.BRIDGE_LIMIT) {
57
+ alertInfo.title = error.recommendation;
58
+ alertInfo.action = 'show-info';
59
+ }
60
+
61
+ if (error.type === QuoteErrorType.INSUFFICIENT_SLIPPAGE) {
62
+ alertInfo.title = i18n.t({
63
+ id: 'You need to increase slippage to at least {minRequiredSlippage} for this route.',
64
+ values: {
65
+ minRequiredSlippage: error.minRequiredSlippage,
66
+ },
67
+ });
68
+ alertInfo.action = 'change-settings';
69
+ }
70
+
71
+ return alertInfo;
72
+ }
73
+ return null;
74
+ }
@@ -1,4 +1,4 @@
1
- import { styled } from '@rango-dev/ui';
1
+ import { darkTheme, styled } from '@rango-dev/ui';
2
2
 
3
3
  export const Alerts = styled('div', {
4
4
  width: '100%',
@@ -19,6 +19,13 @@ export const Item = styled('div', {
19
19
  justifyContent: 'space-between',
20
20
  alignItems: 'center',
21
21
  width: '100%',
22
+ '._title': {
23
+ $$color: '$colors$neutral600',
24
+ [`.${darkTheme} &`]: {
25
+ $$color: '$colors$neutral700',
26
+ },
27
+ color: '$$color',
28
+ },
22
29
  });
23
30
 
24
31
  export const Action = styled('div', {
@@ -0,0 +1,103 @@
1
+ import type { PropTypes } from './QuoteWarningsAndErrors.types';
2
+
3
+ import { i18n } from '@lingui/core';
4
+ import { Alert, Button, InfoIcon } from '@rango-dev/ui';
5
+ import React from 'react';
6
+
7
+ import { QuoteErrorType, QuoteWarningType } from '../../types';
8
+ import { NoResult } from '../NoResult';
9
+
10
+ import { HighValueLossWarningModal } from './HighValueLossWarningModal';
11
+ import { makeAlerts } from './QuoteWarningsAndErrors.helpers';
12
+ import { Action, Alerts } from './QuoteWarningsAndErrors.styles';
13
+ import { SlippageWarningModal } from './SlippageWariningModal';
14
+ import { UnknownPriceWarningModal } from './UnknownPriceWarningModal';
15
+
16
+ export function QuoteWarningsAndErrors(props: PropTypes) {
17
+ const {
18
+ warning,
19
+ error,
20
+ refetchQuote,
21
+ showWarningModal,
22
+ onOpenWarningModal,
23
+ onCloseWarningModal,
24
+ onConfirmWarningModal,
25
+ onChangeSettings,
26
+ } = props;
27
+
28
+ const warningModalHandlers = {
29
+ open: showWarningModal,
30
+ onClose: onCloseWarningModal,
31
+ onConfirm: onConfirmWarningModal,
32
+ };
33
+
34
+ const showNoResultMessage =
35
+ error?.type === QuoteErrorType.NO_RESULT ||
36
+ error?.type === QuoteErrorType.REQUEST_FAILED;
37
+
38
+ const alertInfo = makeAlerts(
39
+ warning,
40
+ error?.type === QuoteErrorType.BRIDGE_LIMIT ||
41
+ error?.type === QuoteErrorType.INSUFFICIENT_SLIPPAGE
42
+ ? error
43
+ : null
44
+ );
45
+
46
+ const showAlerts = !!alertInfo;
47
+
48
+ return (
49
+ <>
50
+ {showNoResultMessage && <NoResult error={error} fetch={refetchQuote} />}
51
+
52
+ {showAlerts && (
53
+ <Alerts>
54
+ <Alert
55
+ title={alertInfo.title}
56
+ type={alertInfo.alertType}
57
+ variant="alarm"
58
+ {...(alertInfo.action === 'show-info' && {
59
+ action: (
60
+ <Action onClick={onOpenWarningModal}>
61
+ <InfoIcon size={12} color="gray" />
62
+ </Action>
63
+ ),
64
+ })}
65
+ {...(alertInfo.action === 'change-settings' && {
66
+ action: (
67
+ <Button
68
+ size="xxsmall"
69
+ type={alertInfo.alertType}
70
+ onClick={onChangeSettings}>
71
+ {i18n.t('Change')}
72
+ </Button>
73
+ ),
74
+ })}
75
+ />
76
+ </Alerts>
77
+ )}
78
+
79
+ {warning && (
80
+ <>
81
+ {warning.type === QuoteWarningType.HIGH_VALUE_LOSS && (
82
+ <HighValueLossWarningModal
83
+ {...warningModalHandlers}
84
+ warning={warning}
85
+ />
86
+ )}
87
+
88
+ {(warning.type === QuoteWarningType.HIGH_SLIPPAGE ||
89
+ warning.type === QuoteWarningType.INSUFFICIENT_SLIPPAGE) && (
90
+ <SlippageWarningModal {...warningModalHandlers} warning={warning} />
91
+ )}
92
+
93
+ {warning.type === QuoteWarningType.UNKNOWN_PRICE && (
94
+ <UnknownPriceWarningModal
95
+ {...warningModalHandlers}
96
+ warning={warning}
97
+ />
98
+ )}
99
+ </>
100
+ )}
101
+ </>
102
+ );
103
+ }
@@ -0,0 +1,25 @@
1
+ import type { QuoteError, QuoteWarning } from '../../types';
2
+
3
+ export interface PropTypes {
4
+ loading: boolean;
5
+ error: QuoteError | null;
6
+ warning: QuoteWarning | null;
7
+ showWarningModal: boolean;
8
+ refetchQuote: () => void;
9
+ onOpenWarningModal: () => void;
10
+ onCloseWarningModal: () => void;
11
+ onConfirmWarningModal: () => void;
12
+ onChangeSettings: () => void;
13
+ }
14
+
15
+ type ModalPropTypesKeys = keyof Omit<PropTypes, 'extraSpace' | 'loading'>;
16
+
17
+ export type ModalPropTypes = Pick<PropTypes, ModalPropTypesKeys> & {
18
+ open: boolean;
19
+ };
20
+
21
+ export interface ModalContentData {
22
+ title: string;
23
+ value: string;
24
+ valueColor?: string;
25
+ }