@rango-dev/widget-embedded 0.1.11-next.11 → 0.1.11-next.14

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 (40) hide show
  1. package/dist/components/ConfirmSwapErrors.d.ts +1 -1
  2. package/dist/components/ConfirmSwapErrors.d.ts.map +1 -1
  3. package/dist/components/ConfirmSwapWarnings.d.ts +1 -2
  4. package/dist/components/ConfirmSwapWarnings.d.ts.map +1 -1
  5. package/dist/components/warnings/BalanceErrors.d.ts +7 -0
  6. package/dist/components/warnings/BalanceErrors.d.ts.map +1 -0
  7. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  8. package/dist/pages/Home.d.ts.map +1 -1
  9. package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
  10. package/dist/store/bestRoute.d.ts.map +1 -1
  11. package/dist/types/routing.d.ts +8 -8
  12. package/dist/types/routing.d.ts.map +1 -1
  13. package/dist/utils/numbers.d.ts +1 -0
  14. package/dist/utils/numbers.d.ts.map +1 -1
  15. package/dist/utils/routing.d.ts +4 -4
  16. package/dist/utils/routing.d.ts.map +1 -1
  17. package/dist/utils/time.d.ts.map +1 -1
  18. package/dist/widget-embedded.cjs.development.js +283 -261
  19. package/dist/widget-embedded.cjs.development.js.map +1 -1
  20. package/dist/widget-embedded.cjs.production.min.js +283 -261
  21. package/dist/widget-embedded.cjs.production.min.js.map +1 -1
  22. package/dist/widget-embedded.esm.js +283 -261
  23. package/dist/widget-embedded.esm.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/components/ConfirmSwapErrors.tsx +8 -16
  26. package/src/components/ConfirmSwapWarnings.tsx +5 -15
  27. package/src/components/warnings/BalanceErrors.tsx +45 -0
  28. package/src/hooks/useConfirmSwap.ts +2 -2
  29. package/src/pages/ConfirmSwapPage.tsx +3 -1
  30. package/src/pages/Home.tsx +6 -8
  31. package/src/pages/SwapDetailsPage.tsx +7 -13
  32. package/src/pages/WalletsPage.tsx +1 -1
  33. package/src/store/bestRoute.ts +5 -3
  34. package/src/types/routing.ts +4 -4
  35. package/src/utils/numbers.ts +4 -0
  36. package/src/utils/routing.ts +31 -11
  37. package/src/utils/time.ts +2 -8
  38. package/dist/components/warnings/BalanceWarnings.d.ts +0 -7
  39. package/dist/components/warnings/BalanceWarnings.d.ts.map +0 -1
  40. package/src/components/warnings/BalanceWarnings.tsx +0 -40
@@ -14,10 +14,10 @@ var reactRouterDom = require('react-router-dom');
14
14
  var zustand = require('zustand');
15
15
  var BigNumber = require('bignumber.js');
16
16
  var BigNumber__default = _interopDefault(BigNumber);
17
- var walletsShared = require('@rango-dev/wallets-shared');
18
- var walletsCore = require('@rango-dev/wallets-core');
19
17
  var middleware = require('zustand/middleware');
20
18
  var rangoSdk = require('rango-sdk');
19
+ var walletsShared = require('@rango-dev/wallets-shared');
20
+ var walletsCore = require('@rango-dev/wallets-core');
21
21
  var shallow = require('zustand/shallow');
22
22
  var reactI18next = require('react-i18next');
23
23
  var theme = require('@rango-dev/ui/src/theme');
@@ -126,6 +126,196 @@ const decimalNumber = function (number, toFixed) {
126
126
  }
127
127
  return parseFloat(number).toFixed(toFixed);
128
128
  };
129
+ const isPositiveNumber = text => !!text && parseFloat(text) > 0;
130
+
131
+ function searchParamsToToken(tokens, searchParams, chain) {
132
+ if (!chain) return null;
133
+ return tokens.find(token => {
134
+ const symbolAndAddress = searchParams?.split('--');
135
+ if (symbolAndAddress?.length === 1) return token.symbol === symbolAndAddress[0] && token.address === null && token.blockchain === chain.name;
136
+ return token.symbol === symbolAndAddress?.[0] && token.address === symbolAndAddress?.[1] && token.blockchain === chain.name;
137
+ }) || null;
138
+ }
139
+ function getBestRouteToTokenUsdPrice(bestRoute) {
140
+ return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to.usdPrice;
141
+ }
142
+ function isNumberOfSwapsChanged(route1, route2) {
143
+ const route1Swaps = route1.result?.swaps || [];
144
+ const route2Swaps = route2.result?.swaps || [];
145
+ return route1Swaps.length !== route2Swaps.length;
146
+ }
147
+ function isRouteSwappersUpdated(route1, route2) {
148
+ const route1Swappers = route1.result?.swaps.map(swap => swap.swapperId) || [];
149
+ const route2Swappers = route2.result?.swaps.map(swap => swap.swapperId) || [];
150
+ return !areEqual(route1Swappers, route2Swappers);
151
+ }
152
+ function isRouteInternalCoinsUpdated(route1, route2) {
153
+ const route1InternalCoins = route1.result?.swaps.map(swap => swap.to.symbol) || [];
154
+ const route2InternalCoins = route2.result?.swaps.map(swap => swap.to.symbol) || [];
155
+ return !areEqual(route1InternalCoins, route2InternalCoins);
156
+ }
157
+ function isRouteChanged(route1, route2) {
158
+ return isNumberOfSwapsChanged(route1, route2) || isRouteSwappersUpdated(route1, route2) || isRouteInternalCoinsUpdated(route1, route2);
159
+ }
160
+ function getRequiredBalanceOfWallet(selectedWallet, fee) {
161
+ if (fee === null) return null;
162
+ const relatedFeeStatus = fee?.find(item => item.blockchain === selectedWallet.chain)?.wallets.find(wallet => wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase());
163
+ if (!relatedFeeStatus) return null;
164
+ return relatedFeeStatus.requiredAssets;
165
+ }
166
+ function isRouteParametersChanged(params) {
167
+ if (params.store === 'bestRoute') {
168
+ const {
169
+ prevState,
170
+ currentState
171
+ } = params;
172
+ return !!currentState.fromToken && !!currentState.toToken && (prevState.fromChain?.name !== currentState.fromChain?.name || prevState.toChain?.name !== currentState.toChain?.name || prevState.fromToken?.symbol !== currentState.fromToken?.symbol || prevState.toToken?.symbol !== currentState.toToken?.symbol || prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain || prevState.toToken?.blockchain !== currentState.toToken?.blockchain || prevState.fromToken?.address !== currentState.fromToken?.address || prevState.toToken?.address !== currentState.toToken?.address || prevState.inputAmount !== currentState.inputAmount);
173
+ } else if (params.store === 'settings') {
174
+ const {
175
+ prevState,
176
+ currentState
177
+ } = params;
178
+ return prevState.slippage !== currentState.slippage || prevState.customSlippage !== currentState.customSlippage || prevState.disabledLiquiditySources?.length !== currentState.disabledLiquiditySources?.length || prevState.infiniteApprove || currentState.infiniteApprove;
179
+ }
180
+ return false;
181
+ }
182
+ function getFormatedBestRoute(bestRoute) {
183
+ if (!bestRoute) return null;
184
+ const formatedSwaps = (bestRoute.result?.swaps || []).map(swap => ({
185
+ ...swap,
186
+ fromAmount: numberToString(swap.fromAmount, 6, 6),
187
+ toAmount: numberToString(swap.toAmount, 6, 6)
188
+ }));
189
+ return {
190
+ ...bestRoute,
191
+ ...(bestRoute.result && {
192
+ result: {
193
+ ...bestRoute.result,
194
+ swaps: formatedSwaps
195
+ }
196
+ })
197
+ };
198
+ }
199
+ function getFormatedPendingSwap(pendingSwap) {
200
+ const formatedSteps = pendingSwap.steps.map(step => ({
201
+ ...step,
202
+ feeInUsd: numberToString(step.feeInUsd, 4, 4),
203
+ outputAmount: numberToString(step.outputAmount, 6, 6),
204
+ expectedOutputAmountHumanReadable: numberToString(step.expectedOutputAmountHumanReadable, 6, 6)
205
+ }));
206
+ return {
207
+ ...pendingSwap,
208
+ inputAmount: numberToString(pendingSwap.inputAmount, 6, 6),
209
+ steps: formatedSteps
210
+ };
211
+ }
212
+ //todo: refactor bestRoute store and add loadingStatus
213
+ const getBestRouteStatus = (loading, error) => {
214
+ if (loading) return 'loading';
215
+ if (error) return 'failed';else return 'success';
216
+ };
217
+
218
+ const createSelectors = _store => {
219
+ let store = _store;
220
+ store.use = {};
221
+ for (let k of Object.keys(store.getState())) {
222
+ store.use[k] = () => store(s => s[k]);
223
+ }
224
+ return store;
225
+ };
226
+
227
+ const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';
228
+ let configs = {
229
+ API_KEY: RANGO_PUBLIC_API_KEY
230
+ };
231
+ function getConfig(name) {
232
+ return configs[name];
233
+ }
234
+
235
+ let rango = undefined;
236
+ const httpService = () => {
237
+ if (rango) return rango;
238
+ rango = new rangoSdk.RangoClient(getConfig('API_KEY'));
239
+ return rango;
240
+ };
241
+
242
+ const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];
243
+ const DEFAULT_SLIPPAGE = 1;
244
+ const HIGH_SLIPPAGE = 5;
245
+ const MAX_SLIPPAGE = 100;
246
+ const MIN_SLIPPGAE = 0;
247
+
248
+ const useMetaStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()(set => ({
249
+ meta: {
250
+ blockchains: [],
251
+ popularTokens: [],
252
+ swappers: [],
253
+ tokens: []
254
+ },
255
+ loadingStatus: 'loading',
256
+ fetchMeta: async () => {
257
+ try {
258
+ const response = await httpService().getAllMetadata();
259
+ const chainThatHasTokenInMetaResponse = removeDuplicateFrom(response.tokens.map(t => t.blockchain));
260
+ const enabledChains = response.blockchains.filter(chain => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name));
261
+ response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);
262
+ set({
263
+ meta: response,
264
+ loadingStatus: 'success'
265
+ });
266
+ } catch (error) {
267
+ set({
268
+ loadingStatus: 'failed'
269
+ });
270
+ }
271
+ }
272
+ })));
273
+
274
+ const useSettingsStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()( /*#__PURE__*/middleware.persist( /*#__PURE__*/middleware.subscribeWithSelector(set => ({
275
+ slippage: DEFAULT_SLIPPAGE,
276
+ customSlippage: null,
277
+ infiniteApprove: false,
278
+ affiliateRef: null,
279
+ disabledLiquiditySources: [],
280
+ theme: 'auto',
281
+ setSlippage: slippage => set(() => ({
282
+ slippage: slippage
283
+ })),
284
+ setCustomSlippage: customSlippage => set(() => ({
285
+ customSlippage: customSlippage
286
+ })),
287
+ setAffiliateRef: affiliateRef => set(() => ({
288
+ affiliateRef
289
+ })),
290
+ toggleAllLiquiditySources: () => set(state => {
291
+ const {
292
+ swappers
293
+ } = useMetaStore.getState().meta;
294
+ const swappersGroup = removeDuplicateFrom(swappers.map(swapper => swapper.swapperGroup));
295
+ if (swappersGroup.length === state.disabledLiquiditySources.length) return {
296
+ disabledLiquiditySources: []
297
+ };else {
298
+ return {
299
+ disabledLiquiditySources: swappersGroup
300
+ };
301
+ }
302
+ }),
303
+ toggleInfiniteApprove: () => set(state => ({
304
+ infiniteApprove: !state.infiniteApprove
305
+ })),
306
+ toggleLiquiditySource: name => set(state => {
307
+ if (state.disabledLiquiditySources.includes(name)) return {
308
+ disabledLiquiditySources: state.disabledLiquiditySources.filter(liquiditySource => liquiditySource != name)
309
+ };else return {
310
+ disabledLiquiditySources: state.disabledLiquiditySources.concat(name)
311
+ };
312
+ }),
313
+ setTheme: theme => set(() => ({
314
+ theme
315
+ }))
316
+ })), {
317
+ name: 'user-settings'
318
+ })));
129
319
 
130
320
  function getStateWallet(state) {
131
321
  switch (true) {
@@ -646,165 +836,6 @@ function shouldRetrySwap(pendingSwap) {
646
836
  return pendingSwap.status === 'failed' && !!pendingSwap.finishTime && new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000;
647
837
  }
648
838
 
649
- function searchParamsToToken(tokens, searchParams, chain) {
650
- if (!chain) return null;
651
- return tokens.find(token => {
652
- const symbolAndAddress = searchParams?.split('--');
653
- if (symbolAndAddress?.length === 1) return token.symbol === symbolAndAddress[0] && token.address === null && token.blockchain === chain.name;
654
- return token.symbol === symbolAndAddress?.[0] && token.address === symbolAndAddress?.[1] && token.blockchain === chain.name;
655
- }) || null;
656
- }
657
- function getBestRouteToTokenUsdPrice(bestRoute) {
658
- return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to.usdPrice;
659
- }
660
- function isNumberOfSwapsChanged(route1, route2) {
661
- const route1Swaps = route1.result?.swaps || [];
662
- const route2Swaps = route2.result?.swaps || [];
663
- return route1Swaps.length !== route2Swaps.length;
664
- }
665
- function isRouteSwappersUpdated(route1, route2) {
666
- const route1Swappers = route1.result?.swaps.map(swap => swap.swapperId) || [];
667
- const route2Swappers = route2.result?.swaps.map(swap => swap.swapperId) || [];
668
- return !areEqual(route1Swappers, route2Swappers);
669
- }
670
- function isRouteInternalCoinsUpdated(route1, route2) {
671
- const route1InternalCoins = route1.result?.swaps.map(swap => swap.to.symbol) || [];
672
- const route2InternalCoins = route2.result?.swaps.map(swap => swap.to.symbol) || [];
673
- return !areEqual(route1InternalCoins, route2InternalCoins);
674
- }
675
- function isRouteChanged(route1, route2) {
676
- return isNumberOfSwapsChanged(route1, route2) || isRouteSwappersUpdated(route1, route2) || isRouteInternalCoinsUpdated(route1, route2);
677
- }
678
- function getRequiredBalanceOfWallet(selectedWallet, fee) {
679
- if (fee === null) return null;
680
- const relatedFeeStatus = fee?.find(item => item.blockchain === selectedWallet.chain)?.wallets.find(wallet => wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase());
681
- if (!relatedFeeStatus) return null;
682
- return relatedFeeStatus.requiredAssets;
683
- }
684
- function isRouteParametersChanged(params) {
685
- if (params.store === 'bestRoute') {
686
- const {
687
- prevState,
688
- currentState
689
- } = params;
690
- return !!currentState.fromToken && !!currentState.toToken && (prevState.fromChain?.name !== currentState.fromChain?.name || prevState.toChain?.name !== currentState.toChain?.name || prevState.fromToken?.symbol !== currentState.fromToken?.symbol || prevState.toToken?.symbol !== currentState.toToken?.symbol || prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain || prevState.toToken?.blockchain !== currentState.toToken?.blockchain || prevState.fromToken?.address !== currentState.fromToken?.address || prevState.toToken?.address !== currentState.toToken?.address || prevState.inputAmount !== currentState.inputAmount);
691
- } else if (params.store === 'settings') {
692
- const {
693
- prevState,
694
- currentState
695
- } = params;
696
- return prevState.slippage !== currentState.slippage || prevState.customSlippage !== currentState.customSlippage || prevState.disabledLiquiditySources?.length !== currentState.disabledLiquiditySources?.length || prevState.infiniteApprove || currentState.infiniteApprove;
697
- }
698
- return false;
699
- }
700
- //todo: refactor bestRoute store and add loadingStatus
701
- const getBestRouteStatus = (loading, error) => {
702
- if (loading) return 'loading';
703
- if (error) return 'failed';else return 'success';
704
- };
705
-
706
- const createSelectors = _store => {
707
- let store = _store;
708
- store.use = {};
709
- for (let k of Object.keys(store.getState())) {
710
- store.use[k] = () => store(s => s[k]);
711
- }
712
- return store;
713
- };
714
-
715
- const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';
716
- let configs = {
717
- API_KEY: RANGO_PUBLIC_API_KEY
718
- };
719
- function getConfig(name) {
720
- return configs[name];
721
- }
722
-
723
- let rango = undefined;
724
- const httpService = () => {
725
- if (rango) return rango;
726
- rango = new rangoSdk.RangoClient(getConfig('API_KEY'));
727
- return rango;
728
- };
729
-
730
- const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];
731
- const DEFAULT_SLIPPAGE = 1;
732
- const HIGH_SLIPPAGE = 5;
733
- const MAX_SLIPPAGE = 100;
734
- const MIN_SLIPPGAE = 0;
735
-
736
- const useMetaStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()(set => ({
737
- meta: {
738
- blockchains: [],
739
- popularTokens: [],
740
- swappers: [],
741
- tokens: []
742
- },
743
- loadingStatus: 'loading',
744
- fetchMeta: async () => {
745
- try {
746
- const response = await httpService().getAllMetadata();
747
- const chainThatHasTokenInMetaResponse = removeDuplicateFrom(response.tokens.map(t => t.blockchain));
748
- const enabledChains = response.blockchains.filter(chain => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name));
749
- response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);
750
- set({
751
- meta: response,
752
- loadingStatus: 'success'
753
- });
754
- } catch (error) {
755
- set({
756
- loadingStatus: 'failed'
757
- });
758
- }
759
- }
760
- })));
761
-
762
- const useSettingsStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()( /*#__PURE__*/middleware.persist( /*#__PURE__*/middleware.subscribeWithSelector(set => ({
763
- slippage: DEFAULT_SLIPPAGE,
764
- customSlippage: null,
765
- infiniteApprove: false,
766
- affiliateRef: null,
767
- disabledLiquiditySources: [],
768
- theme: 'auto',
769
- setSlippage: slippage => set(() => ({
770
- slippage: slippage
771
- })),
772
- setCustomSlippage: customSlippage => set(() => ({
773
- customSlippage: customSlippage
774
- })),
775
- setAffiliateRef: affiliateRef => set(() => ({
776
- affiliateRef
777
- })),
778
- toggleAllLiquiditySources: () => set(state => {
779
- const {
780
- swappers
781
- } = useMetaStore.getState().meta;
782
- const swappersGroup = removeDuplicateFrom(swappers.map(swapper => swapper.swapperGroup));
783
- if (swappersGroup.length === state.disabledLiquiditySources.length) return {
784
- disabledLiquiditySources: []
785
- };else {
786
- return {
787
- disabledLiquiditySources: swappersGroup
788
- };
789
- }
790
- }),
791
- toggleInfiniteApprove: () => set(state => ({
792
- infiniteApprove: !state.infiniteApprove
793
- })),
794
- toggleLiquiditySource: name => set(state => {
795
- if (state.disabledLiquiditySources.includes(name)) return {
796
- disabledLiquiditySources: state.disabledLiquiditySources.filter(liquiditySource => liquiditySource != name)
797
- };else return {
798
- disabledLiquiditySources: state.disabledLiquiditySources.concat(name)
799
- };
800
- }),
801
- setTheme: theme => set(() => ({
802
- theme
803
- }))
804
- })), {
805
- name: 'user-settings'
806
- })));
807
-
808
839
  const useWalletsStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()( /*#__PURE__*/middleware.subscribeWithSelector(set => ({
809
840
  accounts: [],
810
841
  balances: [],
@@ -921,7 +952,7 @@ const useBestRouteStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.cre
921
952
  setBestRoute: bestRoute => set(state => {
922
953
  let outputAmount = null;
923
954
  let outputUsdValue = ZERO;
924
- if (!state.inputAmount || state.inputAmount === '0') return {};
955
+ if (!isPositiveNumber(state.inputAmount)) return {};
925
956
  if (!!bestRoute) {
926
957
  outputAmount = !!bestRoute.result?.outputAmount ? new BigNumber__default(bestRoute.result?.outputAmount) : null;
927
958
  outputUsdValue = calcOutputUsdValue(bestRoute.result?.outputAmount, getBestRouteToTokenUsdPrice(bestRoute) || state.toToken?.usdPrice);
@@ -1056,7 +1087,7 @@ const bestRoute = (bestRouteStore, settingsStore) => {
1056
1087
  disabledLiquiditySources,
1057
1088
  affiliateRef
1058
1089
  } = settingsStore.getState();
1059
- if (!fromToken || !toToken || !inputAmount || inputAmount === '0') return;
1090
+ if (!fromToken || !toToken || !isPositiveNumber(inputAmount)) return;
1060
1091
  abortController?.abort();
1061
1092
  abortController = new AbortController();
1062
1093
  const userSlippage = !!customSlippage ? customSlippage : slippage;
@@ -1094,7 +1125,7 @@ const bestRoute = (bestRouteStore, settingsStore) => {
1094
1125
  inputAmount,
1095
1126
  inputUsdValue
1096
1127
  } = useBestRouteStore.getState();
1097
- if (!inputAmount || inputAmount === '0' || inputUsdValue.eq(0)) return bestRouteStore.setState({
1128
+ if (!isPositiveNumber(inputAmount) || inputUsdValue.eq(0)) return bestRouteStore.setState({
1098
1129
  loading: false
1099
1130
  });
1100
1131
  if (tokensAreEqual(fromToken, toToken)) return bestRouteStore.setState({
@@ -1739,7 +1770,7 @@ function Home() {
1739
1770
  }), showBestRoute && React__default.createElement(BestRouteContainer, null, React__default.createElement(ui.BestRoute, {
1740
1771
  error: bestRouteError,
1741
1772
  loading: fetchingBestRoute,
1742
- data: bestRoute,
1773
+ data: getFormatedBestRoute(bestRoute),
1743
1774
  totalFee: numberToString(totalFeeInUsd, 0, 2),
1744
1775
  feeWarning: highFee,
1745
1776
  totalTime: secondsToString(totalArrivalTime(bestRoute))
@@ -1749,11 +1780,9 @@ function Home() {
1749
1780
  type: "error",
1750
1781
  title: `${swap?.swapperId} Limit`
1751
1782
  }, React__default.createElement(React__default.Fragment, null, React__default.createElement(ui.Typography, {
1752
- variant: "body2"
1753
- }, fromAmountRangeError), React__default.createElement("br", null), React__default.createElement(ui.Typography, {
1754
- variant: "body2"
1755
- }, "Yours: ", numberToString(swap?.fromAmount || null), swap?.from.symbol), React__default.createElement("br", null), React__default.createElement(ui.Typography, {
1756
- variant: "body2"
1783
+ variant: "body3"
1784
+ }, fromAmountRangeError, ", Yours: ", numberToString(swap?.fromAmount || null), "\u00A0", swap?.from.symbol), React__default.createElement(ui.Typography, {
1785
+ variant: "body3"
1757
1786
  }, recommendation)))), React__default.createElement(Footer, null, React__default.createElement(ui.Button, {
1758
1787
  type: "primary",
1759
1788
  align: "grow",
@@ -2007,6 +2036,7 @@ var ConfirmSwapErrorTypes;
2007
2036
  ConfirmSwapErrorTypes[ConfirmSwapErrorTypes["ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS"] = 1] = "ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS";
2008
2037
  ConfirmSwapErrorTypes[ConfirmSwapErrorTypes["REQUEST_FAILED"] = 2] = "REQUEST_FAILED";
2009
2038
  ConfirmSwapErrorTypes[ConfirmSwapErrorTypes["INSUFFICIENT_SLIPPAGE"] = 3] = "INSUFFICIENT_SLIPPAGE";
2039
+ ConfirmSwapErrorTypes[ConfirmSwapErrorTypes["INSUFFICIENT_BALANCE"] = 4] = "INSUFFICIENT_BALANCE";
2010
2040
  })(ConfirmSwapErrorTypes || (ConfirmSwapErrorTypes = {}));
2011
2041
  var ConfirmSwapWarningTypes;
2012
2042
  (function (ConfirmSwapWarningTypes) {
@@ -2014,7 +2044,6 @@ var ConfirmSwapWarningTypes;
2014
2044
  ConfirmSwapWarningTypes[ConfirmSwapWarningTypes["ROUTE_SWAPPERS_UPDATED"] = 1] = "ROUTE_SWAPPERS_UPDATED";
2015
2045
  ConfirmSwapWarningTypes[ConfirmSwapWarningTypes["ROUTE_COINS_UPDATED"] = 2] = "ROUTE_COINS_UPDATED";
2016
2046
  ConfirmSwapWarningTypes[ConfirmSwapWarningTypes["ROUTE_AND_OUTPUT_AMOUNT_UPDATED"] = 3] = "ROUTE_AND_OUTPUT_AMOUNT_UPDATED";
2017
- ConfirmSwapWarningTypes[ConfirmSwapWarningTypes["INSUFFICIENT_BALANCE"] = 4] = "INSUFFICIENT_BALANCE";
2018
2047
  })(ConfirmSwapWarningTypes || (ConfirmSwapWarningTypes = {}));
2019
2048
 
2020
2049
  function useConfirmSwap() {
@@ -2103,8 +2132,8 @@ function useConfirmSwap() {
2103
2132
  }
2104
2133
  const balanceWarnings = getBalanceWarnings(confiremedRoute, selectedWallets);
2105
2134
  const enoughBalance = balanceWarnings.length === 0;
2106
- if (!enoughBalance) confirmSwapState.warnings.push({
2107
- type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,
2135
+ if (!enoughBalance) confirmSwapState.errors.push({
2136
+ type: ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE,
2108
2137
  messages: balanceWarnings
2109
2138
  });
2110
2139
  const minRequiredSlippage = getMinRequiredSlippage(initialRoute);
@@ -2174,31 +2203,6 @@ function MinRequiredSlippage(_ref) {
2174
2203
  }), React__default.createElement(ChangeSlippageButton, null));
2175
2204
  }
2176
2205
 
2177
- function ConfirmSwapErrors(errors) {
2178
- return errors.flatMap(error => {
2179
- switch (error.type) {
2180
- case ConfirmSwapErrorTypes.NO_ROUTE:
2181
- return React__default.createElement(ui.Typography, {
2182
- variant: "body2"
2183
- }, "No routes found. Please try again later.");
2184
- case ConfirmSwapErrorTypes.REQUEST_FAILED:
2185
- return React__default.createElement(ui.Typography, {
2186
- variant: "body2"
2187
- }, `Failed to confirm swap ${error.status ? `'status': ${error.status})` : ''}, please try again.`);
2188
- case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:
2189
- return React__default.createElement(ui.Typography, {
2190
- variant: "body2"
2191
- }, "Route updated and price impact is too high, try again later!");
2192
- case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:
2193
- return React__default.createElement(MinRequiredSlippage, {
2194
- minRequiredSlippage: error.minRequiredSlippage
2195
- });
2196
- default:
2197
- return [];
2198
- }
2199
- });
2200
- }
2201
-
2202
2206
  const List = /*#__PURE__*/ui.styled('ul', {
2203
2207
  variants: {
2204
2208
  showListStyle: {
@@ -2219,47 +2223,63 @@ const ListItem = /*#__PURE__*/ui.styled('li', {
2219
2223
  }
2220
2224
  });
2221
2225
  const Message = /*#__PURE__*/ui.styled(ui.Typography, {
2222
- display: 'block',
2223
- color: '$warning500 !important'
2226
+ display: 'block'
2224
2227
  });
2225
- function BalanceWarnings(_ref) {
2228
+ function BalanceErrors(_ref) {
2226
2229
  let {
2227
2230
  messages
2228
2231
  } = _ref;
2229
2232
  const showListStyle = messages.length > 1;
2230
- return React__default.createElement(List, {
2233
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement(ui.Typography, {
2234
+ className: "title",
2235
+ variant: "title",
2236
+ color: 'error'
2237
+ }, "Insufficent Balance:"), React__default.createElement(ui.Spacer, {
2238
+ size: 8,
2239
+ direction: "vertical"
2240
+ }), React__default.createElement(List, {
2231
2241
  showListStyle: showListStyle
2232
2242
  }, messages.map(warning => React__default.createElement(ListItem, {
2233
2243
  showListStyle: showListStyle
2234
2244
  }, React__default.createElement(Message, {
2235
- variant: "body2"
2236
- }, warning))));
2245
+ variant: "body3"
2246
+ }, "- ", warning)))));
2247
+ }
2248
+
2249
+ function ConfirmSwapErrors(errors) {
2250
+ return errors.flatMap(error => {
2251
+ switch (error.type) {
2252
+ case ConfirmSwapErrorTypes.NO_ROUTE:
2253
+ return "No routes found. Please try again later.";
2254
+ case ConfirmSwapErrorTypes.REQUEST_FAILED:
2255
+ return `Failed to confirm swap ${error.status ? `'status': ${error.status})` : ''}, please try again.`;
2256
+ case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:
2257
+ return "Route updated and price impact is too high, try again later!";
2258
+ case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:
2259
+ return React__default.createElement(MinRequiredSlippage, {
2260
+ minRequiredSlippage: error.minRequiredSlippage
2261
+ });
2262
+ case ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE:
2263
+ return React__default.createElement(BalanceErrors, {
2264
+ messages: error.messages
2265
+ });
2266
+ default:
2267
+ return [];
2268
+ }
2269
+ });
2237
2270
  }
2238
2271
 
2239
2272
  function ConfirmSwapWarnings(warnings) {
2240
2273
  return warnings.flatMap(warning => {
2241
2274
  switch (warning.type) {
2242
2275
  case ConfirmSwapWarningTypes.ROUTE_UPDATED:
2243
- return React__default.createElement(ui.Typography, {
2244
- variant: "body2"
2245
- }, "Route has been updated.");
2276
+ return "Route has been updated.";
2246
2277
  case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:
2247
- return React__default.createElement(ui.Typography, {
2248
- variant: "body2"
2249
- }, `Output amount changed to ${warning.newOutputAmount}
2250
- (${warning.percentageChange}% change).`);
2278
+ return `Output amount changed to ${warning.newOutputAmount} (${warning.percentageChange}% change).`;
2251
2279
  case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:
2252
- return React__default.createElement(ui.Typography, {
2253
- variant: "body2"
2254
- }, "Route swappers has been updated.");
2280
+ return "Route swappers has been updated.";
2255
2281
  case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:
2256
- return React__default.createElement(ui.Typography, {
2257
- variant: "body2"
2258
- }, "Route internal coins has been updated.");
2259
- case ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE:
2260
- return React__default.createElement(BalanceWarnings, {
2261
- messages: warning.messages
2262
- });
2282
+ return "Route internal coins has been updated.";
2263
2283
  default:
2264
2284
  return [];
2265
2285
  }
@@ -2354,7 +2374,9 @@ function ConfirmSwapPage() {
2354
2374
  navigate(navigationRoutes.swaps + `/${swap.requestId}`, {
2355
2375
  replace: true
2356
2376
  });
2357
- setInputAmount('');
2377
+ setTimeout(() => {
2378
+ setInputAmount('');
2379
+ }, 0);
2358
2380
  }
2359
2381
  });
2360
2382
  },
@@ -2705,8 +2727,9 @@ function WalletsPage(_ref) {
2705
2727
  textField: false,
2706
2728
  onBack: navigateBackFrom.bind(null, navigationRoutes.wallets)
2707
2729
  }, React__default.createElement(React__default.Fragment, null, walletErrorMessage && React__default.createElement(AlertContainer, null, React__default.createElement(ui.Alert, {
2708
- type: "error"
2709
- }, walletErrorMessage)), loadingMetaStatus === 'loading' && React__default.createElement(LoaderContainer, {
2730
+ type: "error",
2731
+ title: walletErrorMessage
2732
+ })), loadingMetaStatus === 'loading' && React__default.createElement(LoaderContainer, {
2710
2733
  className: "loader"
2711
2734
  }, React__default.createElement(ui.Spinner, {
2712
2735
  size: 24
@@ -2770,7 +2793,7 @@ function timeSince(timeMillis) {
2770
2793
  return interval + ' ' + intervalType;
2771
2794
  }
2772
2795
  function getSwapDate(pendingSwap) {
2773
- return pendingSwap.finishTime ? `Finished ${timeSince(parseInt(pendingSwap.finishTime))} ago @ ${new Date(parseInt(pendingSwap.finishTime)).toLocaleString()}` : `Started ${timeSince(parseInt(pendingSwap.creationTime))} ago @ ${new Date(parseInt(pendingSwap.creationTime)).toLocaleString()}`;
2796
+ return pendingSwap.finishTime ? `${timeSince(parseInt(pendingSwap.finishTime))} ago` : `${timeSince(parseInt(pendingSwap.creationTime))} ago`;
2774
2797
  }
2775
2798
 
2776
2799
  const PlaceholderContainer = /*#__PURE__*/ui.styled('div', {
@@ -2832,10 +2855,6 @@ function SwapDetailsPage() {
2832
2855
  loading: loading,
2833
2856
  onBack: navigateBackFrom.bind(null, navigationRoutes.swapDetails)
2834
2857
  });
2835
- const firstStep = swap.steps[0];
2836
- const lastStep = swap.steps[swap.steps.length - 1];
2837
- const fromAmount = numberToString(swap.inputAmount);
2838
- const toAmount = numberToString(swap.simulationResult.outputAmount);
2839
2858
  const currentStep = queueManagerRangoPreset.getCurrentStep(swap);
2840
2859
  const currentStepBlockchain = currentStep ? queueManagerRangoPreset.getCurrentBlockchainOfOrNull(swap, currentStep) : null;
2841
2860
  const currentStepWallet = currentStep ? queueManagerRangoPreset.getRelatedWalletOrNull(swap, currentStep) : null;
@@ -2848,38 +2867,41 @@ function SwapDetailsPage() {
2848
2867
  const lastConvertedTokenInFailedSwap = getLastConvertedTokenInFailedSwap(swap);
2849
2868
  return React__default.createElement(ui.SwapHistory, Object.assign({
2850
2869
  onBack: navigateBackFrom.bind(null, navigationRoutes.swapDetails),
2851
- previewInputs: React__default.createElement(React__default.Fragment, null, React__default.createElement(TokenPreview, {
2852
- chain: {
2853
- displayName: firstStep?.fromBlockchain || '',
2854
- // @ts-ignore
2855
- logo: firstStep?.fromBlockchainLogo || ''
2856
- },
2857
- token: {
2858
- symbol: firstStep?.fromSymbol || '',
2859
- image: firstStep?.fromLogo || ''
2860
- },
2861
- amount: fromAmount,
2862
- label: i18n.t('From'),
2863
- loadingStatus: 'success'
2864
- }), React__default.createElement(ui.Spacer, {
2865
- size: 12,
2866
- direction: "vertical"
2867
- }), React__default.createElement(TokenPreview, {
2868
- chain: {
2869
- displayName: lastStep?.toBlockchain || '',
2870
- //@ts-ignore
2871
- logo: lastStep?.toBlockchainLogo || ''
2872
- },
2873
- token: {
2874
- symbol: lastStep?.toSymbol || '',
2875
- image: lastStep?.toLogo || ''
2876
- },
2877
- amount: toAmount,
2878
- label: i18n.t('To'),
2879
- loadingStatus: 'success'
2880
- })),
2881
- //todo: move PendingSwap type to rango-types
2882
- pendingSwap: swap,
2870
+ /* TODO: It was temporarily removed to find a better solution*/
2871
+ /*
2872
+ previewInputs={
2873
+ <>
2874
+ <TokenPreview
2875
+ chain={{
2876
+ displayName: firstStep?.fromBlockchain || '',
2877
+ logo: firstStep?.fromBlockchainLogo || '',
2878
+ }}
2879
+ token={{
2880
+ symbol: firstStep?.fromSymbol || '',
2881
+ image: firstStep?.fromLogo || '',
2882
+ }}
2883
+ amount={fromAmount}
2884
+ label={t('From')}
2885
+ loadingStatus={'success'}
2886
+ />
2887
+ <Spacer size={12} direction="vertical" />
2888
+ <TokenPreview
2889
+ chain={{
2890
+ displayName: lastStep?.toBlockchain || '',
2891
+ logo: lastStep?.toBlockchainLogo || '',
2892
+ }}
2893
+ token={{
2894
+ symbol: lastStep?.toSymbol || '',
2895
+ image: lastStep?.toLogo || '',
2896
+ }}
2897
+ amount={toAmount}
2898
+ label={t('To')}
2899
+ loadingStatus={'success'}
2900
+ />
2901
+ </>
2902
+ }
2903
+ */
2904
+ pendingSwap: getFormatedPendingSwap(swap),
2883
2905
  onCopy: handleCopy,
2884
2906
  isCopied: isCopied,
2885
2907
  onCancel: onCancel,