@rango-dev/widget-embedded 0.12.1-next.25 → 0.12.1-next.26

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 (31) hide show
  1. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
  2. package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
  3. package/dist/components/NoRoutes/NoRoutes.helper.d.ts.map +1 -1
  4. package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
  5. package/dist/components/RouteErrors/RouteErrorsModal.d.ts.map +1 -1
  6. package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
  7. package/dist/components/SwapsGroup/SwapsGroup.d.ts.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +3 -3
  10. package/dist/pages/Home.d.ts.map +1 -1
  11. package/dist/utils/swap.d.ts.map +1 -1
  12. package/dist/utils/time.d.ts +2 -2
  13. package/dist/utils/time.d.ts.map +1 -1
  14. package/package.json +2 -2
  15. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +34 -13
  16. package/src/components/ConfirmWalletsModal/WalletList.tsx +41 -9
  17. package/src/components/NoRoutes/NoRoutes.helper.ts +4 -2
  18. package/src/components/NotificationContent/NotificationContent.tsx +2 -1
  19. package/src/components/RouteErrors/RouteErrorsModal.tsx +6 -5
  20. package/src/components/Slippage/Slippage.tsx +1 -1
  21. package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +5 -5
  22. package/src/components/SwapDetails/SwapDetails.tsx +28 -11
  23. package/src/components/SwapsGroup/SwapsGroup.tsx +3 -2
  24. package/src/pages/ConfirmSwapPage.tsx +7 -7
  25. package/src/pages/HistoryPage.tsx +1 -1
  26. package/src/pages/Home.tsx +16 -7
  27. package/src/pages/LanguagePage.tsx +1 -1
  28. package/src/pages/SettingsPage.tsx +1 -1
  29. package/src/pages/ThemePage.tsx +1 -1
  30. package/src/utils/swap.ts +67 -27
  31. package/src/utils/time.ts +69 -36
package/src/utils/swap.ts CHANGED
@@ -16,6 +16,7 @@ import type {
16
16
  Token,
17
17
  } from 'rango-sdk';
18
18
 
19
+ import { i18n } from '@lingui/core';
19
20
  import { PendingSwapNetworkStatus } from '@rango-dev/queue-manager-rango-preset';
20
21
  import BigNumber from 'bignumber.js';
21
22
 
@@ -118,34 +119,62 @@ export function LimitErrorMessage(bestRoute: BestRouteResponse | null): {
118
119
  let fromAmountRangeError = '';
119
120
  let recommendation = '';
120
121
  if (!isExclusive && !!minimum && minimum.gt(swap.fromAmount)) {
121
- fromAmountRangeError = `Required: >= ${numberToString(
122
- minimum,
123
- TOKEN_AMOUNT_MIN_DECIMALS,
124
- TOKEN_AMOUNT_MAX_DECIMALS
125
- )} ${swap.from.symbol}`;
122
+ fromAmountRangeError = i18n.t({
123
+ id: 'requiredEqualMin',
124
+ message: 'Required: >= {min} {symbol}',
125
+ values: {
126
+ min: numberToString(
127
+ minimum,
128
+ TOKEN_AMOUNT_MIN_DECIMALS,
129
+ TOKEN_AMOUNT_MAX_DECIMALS
130
+ ),
131
+ symbol: swap.from.symbol,
132
+ },
133
+ });
126
134
  recommendation = errorMessages.bridgeLimitErrors.increaseAmount;
127
135
  } else if (isExclusive && !!minimum && minimum.gte(swap.fromAmount)) {
128
- fromAmountRangeError = `Required: > ${numberToString(
129
- minimum,
130
- TOKEN_AMOUNT_MIN_DECIMALS,
131
- TOKEN_AMOUNT_MAX_DECIMALS
132
- )} ${swap.from.symbol}`;
136
+ fromAmountRangeError = i18n.t({
137
+ id: 'requiredMin',
138
+ message: 'Required: > {min} {symbol}',
139
+ values: {
140
+ min: numberToString(
141
+ minimum,
142
+ TOKEN_AMOUNT_MIN_DECIMALS,
143
+ TOKEN_AMOUNT_MAX_DECIMALS
144
+ ),
145
+ symbol: swap.from.symbol,
146
+ },
147
+ });
133
148
  recommendation = errorMessages.bridgeLimitErrors.increaseAmount;
134
149
  }
135
150
 
136
151
  if (!isExclusive && !!maximum && maximum.lt(swap.fromAmount)) {
137
- fromAmountRangeError = `Required: <= ${numberToString(
138
- maximum,
139
- TOKEN_AMOUNT_MIN_DECIMALS,
140
- TOKEN_AMOUNT_MAX_DECIMALS
141
- )} ${swap.from.symbol}`;
152
+ fromAmountRangeError = i18n.t({
153
+ id: 'requiredEqualMax',
154
+ message: 'Required: <= {max} {symbol}',
155
+ values: {
156
+ max: numberToString(
157
+ maximum,
158
+ TOKEN_AMOUNT_MIN_DECIMALS,
159
+ TOKEN_AMOUNT_MAX_DECIMALS
160
+ ),
161
+ symbol: swap.from.symbol,
162
+ },
163
+ });
142
164
  recommendation = errorMessages.bridgeLimitErrors.decreaseAmount;
143
165
  } else if (isExclusive && !!maximum && maximum.lte(swap.fromAmount)) {
144
- fromAmountRangeError = `Required: < ${numberToString(
145
- maximum,
146
- TOKEN_AMOUNT_MIN_DECIMALS,
147
- TOKEN_AMOUNT_MAX_DECIMALS
148
- )} ${swap.from.symbol}`;
166
+ fromAmountRangeError = i18n.t({
167
+ id: 'requiredMax',
168
+ message: 'Required: < {max} {symbol}',
169
+ values: {
170
+ max: numberToString(
171
+ maximum,
172
+ TOKEN_AMOUNT_MIN_DECIMALS,
173
+ TOKEN_AMOUNT_MAX_DECIMALS
174
+ ),
175
+ symbol: swap.from.symbol,
176
+ },
177
+ });
149
178
  recommendation = errorMessages.bridgeLimitErrors.decreaseAmount;
150
179
  }
151
180
 
@@ -570,15 +599,25 @@ export function getBalanceWarnings(
570
599
  );
571
600
  let reason = '';
572
601
  if (asset.reason === 'FEE') {
573
- reason = ' for network fee';
602
+ reason = i18n.t(' for network fee');
574
603
  }
575
604
  if (asset.reason === 'INPUT_ASSET') {
576
- reason = ' for swap';
605
+ reason = i18n.t(' for swap');
577
606
  }
578
607
  if (asset.reason === 'FEE_AND_INPUT_ASSET') {
579
- reason = ' for input and network fee';
608
+ reason = i18n.t(' for input and network fee');
580
609
  }
581
- const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;
610
+ const warningMessage = i18n.t({
611
+ id: 'balanceWarningMessage',
612
+ message: `Needs ≈ {requiredAmount} {symbol}{reason}, but you have {currentAmount} {symbol} in your {blockchain} wallet.`,
613
+ values: {
614
+ requiredAmount,
615
+ symbol,
616
+ reason,
617
+ currentAmount,
618
+ blockchain: asset.asset.blockchain,
619
+ },
620
+ });
582
621
  return warningMessage;
583
622
  });
584
623
  }
@@ -626,13 +665,14 @@ export function getSwapMessages(
626
665
  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
627
666
  switch (currentStep?.networkStatus) {
628
667
  case PendingSwapNetworkStatus.WaitingForConnectingWallet:
629
- message = message || 'Waiting for connecting wallet';
668
+ message = message || i18n.t('Waiting for connecting wallet');
630
669
  break;
631
670
  case PendingSwapNetworkStatus.WaitingForQueue:
632
- message = message || 'Waiting for other running tasks to be finished';
671
+ message =
672
+ message || i18n.t('Waiting for other running tasks to be finished');
633
673
  break;
634
674
  case PendingSwapNetworkStatus.WaitingForNetworkChange:
635
- message = message || 'Waiting for changing wallet network';
675
+ message = message || i18n.t('Waiting for changing wallet network');
636
676
  break;
637
677
  default:
638
678
  message = message || '';
package/src/utils/time.ts CHANGED
@@ -1,46 +1,79 @@
1
- import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';
2
-
3
- export function timeSince(timeMillis: number): string {
4
- const seconds = Math.floor((new Date().getTime() - timeMillis) / 1000);
5
- let intervalType: string;
6
-
7
- let interval = Math.floor(seconds / 31536000);
8
- if (interval >= 1) {
9
- intervalType = 'year';
10
- } else {
11
- interval = Math.floor(seconds / 2592000);
12
- if (interval >= 1) {
13
- intervalType = 'month';
14
- } else {
15
- interval = Math.floor(seconds / 86400);
16
- if (interval >= 1) {
17
- intervalType = 'day';
18
- } else {
19
- interval = Math.floor(seconds / 3600);
20
- if (interval >= 1) {
21
- intervalType = 'hour';
22
- } else {
23
- interval = Math.floor(seconds / 60);
24
- if (interval >= 1) {
25
- intervalType = 'minute';
26
- } else {
27
- interval = seconds;
28
- intervalType = 'second';
29
- }
30
- }
31
- }
1
+ import type { PendingSwap } from '@rango-dev/queue-manager-rango-preset';
2
+
3
+ import { i18n } from '@lingui/core';
4
+
5
+ const MILLISECOND_PER_SECOND = 1000;
6
+ const SECONDS_PER_YEAR = 31536000;
7
+ const SECONDS_PER_MONTH = 2592000;
8
+ const SECONDS_PER_DAY = 86400;
9
+ const SECONDS_PER_HOUR = 3600;
10
+ const SECONDS_PER_MINUTE = 60;
11
+
12
+ export function timeSince(millisecond: number): string {
13
+ const seconds = Math.floor(
14
+ (Date.now() - millisecond) / MILLISECOND_PER_SECOND
15
+ );
16
+
17
+ const intervals = [
18
+ {
19
+ turningPoint: SECONDS_PER_YEAR,
20
+ label: i18n.t('year'),
21
+ pluralLabel: i18n.t('years'),
22
+ },
23
+ {
24
+ turningPoint: SECONDS_PER_MONTH,
25
+ label: i18n.t('month'),
26
+ pluralLabel: i18n.t('months'),
27
+ },
28
+ {
29
+ turningPoint: SECONDS_PER_DAY,
30
+ label: i18n.t('day'),
31
+ pluralLabel: i18n.t('days'),
32
+ },
33
+ {
34
+ turningPoint: SECONDS_PER_HOUR,
35
+ label: i18n.t('hour'),
36
+ pluralLabel: i18n.t('hours'),
37
+ },
38
+ {
39
+ turningPoint: SECONDS_PER_MINUTE,
40
+ label: i18n.t('minute'),
41
+ pluralLabel: i18n.t('minutes'),
42
+ },
43
+ ];
44
+
45
+ const sortedIntervals = intervals.sort(
46
+ (a, b) => b.turningPoint - a.turningPoint
47
+ );
48
+
49
+ for (const interval of sortedIntervals) {
50
+ const { turningPoint, label, pluralLabel } = interval;
51
+ const intervalCount = Math.floor(seconds / turningPoint);
52
+ if (intervalCount > 1) {
53
+ return `${intervalCount} ${pluralLabel}`;
54
+ }
55
+ if (intervalCount === 1) {
56
+ return `${intervalCount} ${label}`;
32
57
  }
33
58
  }
34
59
 
35
- if (interval > 1 || interval === 0) {
36
- intervalType += 's';
60
+ if (seconds > 1) {
61
+ return `${seconds} ${i18n.t('seconds')}`;
37
62
  }
38
63
 
39
- return interval + ' ' + intervalType;
64
+ return `${seconds} ${i18n.t('second')}`;
40
65
  }
41
66
 
42
67
  export function getSwapDate(pendingSwap: PendingSwap) {
43
68
  return pendingSwap.finishTime
44
- ? `${timeSince(parseInt(pendingSwap.finishTime))} ago`
45
- : `${timeSince(parseInt(pendingSwap.creationTime))} ago`;
69
+ ? i18n.t({
70
+ id: 'timeAgo',
71
+ message: '{time} ago',
72
+ values: { time: timeSince(parseInt(pendingSwap.finishTime)) },
73
+ })
74
+ : i18n.t({
75
+ id: 'timeAgo',
76
+ message: '{time} ago',
77
+ values: { time: timeSince(parseInt(pendingSwap.creationTime)) },
78
+ });
46
79
  }