@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.
- package/dist/components/ConfirmSwapErrors.d.ts +1 -1
- package/dist/components/ConfirmSwapErrors.d.ts.map +1 -1
- package/dist/components/ConfirmSwapWarnings.d.ts +1 -2
- package/dist/components/ConfirmSwapWarnings.d.ts.map +1 -1
- package/dist/components/warnings/BalanceErrors.d.ts +7 -0
- package/dist/components/warnings/BalanceErrors.d.ts.map +1 -0
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
- package/dist/store/bestRoute.d.ts.map +1 -1
- package/dist/types/routing.d.ts +8 -8
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/utils/numbers.d.ts +1 -0
- package/dist/utils/numbers.d.ts.map +1 -1
- package/dist/utils/routing.d.ts +4 -4
- package/dist/utils/routing.d.ts.map +1 -1
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +283 -261
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +283 -261
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +283 -261
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/components/ConfirmSwapErrors.tsx +8 -16
- package/src/components/ConfirmSwapWarnings.tsx +5 -15
- package/src/components/warnings/BalanceErrors.tsx +45 -0
- package/src/hooks/useConfirmSwap.ts +2 -2
- package/src/pages/ConfirmSwapPage.tsx +3 -1
- package/src/pages/Home.tsx +6 -8
- package/src/pages/SwapDetailsPage.tsx +7 -13
- package/src/pages/WalletsPage.tsx +1 -1
- package/src/store/bestRoute.ts +5 -3
- package/src/types/routing.ts +4 -4
- package/src/utils/numbers.ts +4 -0
- package/src/utils/routing.ts +31 -11
- package/src/utils/time.ts +2 -8
- package/dist/components/warnings/BalanceWarnings.d.ts +0 -7
- package/dist/components/warnings/BalanceWarnings.d.ts.map +0 -1
- 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
|
|
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
|
|
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 ||
|
|
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: "
|
|
1753
|
-
}, fromAmountRangeError
|
|
1754
|
-
variant: "
|
|
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.
|
|
2107
|
-
type:
|
|
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
|
|
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(
|
|
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: "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 ?
|
|
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
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
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,
|