@rango-dev/widget-embedded 0.1.11-next.11 → 0.1.11-next.12
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/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/utils/routing.d.ts +4 -4
- package/dist/utils/routing.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +230 -199
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +230 -199
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +230 -199
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/pages/ConfirmSwapPage.tsx +3 -1
- package/src/pages/Home.tsx +2 -1
- package/src/pages/SwapDetailsPage.tsx +6 -12
- package/src/utils/routing.ts +31 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmSwapPage.d.ts","sourceRoot":"","sources":["../src/pages/ConfirmSwapPage.tsx"],"names":[],"mappings":";AAiCA,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"ConfirmSwapPage.d.ts","sourceRoot":"","sources":["../src/pages/ConfirmSwapPage.tsx"],"names":[],"mappings":";AAiCA,wBAAgB,eAAe,gBA2J9B"}
|
package/dist/pages/Home.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../src/pages/Home.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Home.d.ts","sourceRoot":"","sources":["../src/pages/Home.tsx"],"names":[],"mappings":";AAmEA,wBAAgB,IAAI,gBA+JnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapDetailsPage.d.ts","sourceRoot":"","sources":["../src/pages/SwapDetailsPage.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SwapDetailsPage.d.ts","sourceRoot":"","sources":["../src/pages/SwapDetailsPage.tsx"],"names":[],"mappings":";AAgCA,wBAAgB,eAAe,gBAqI9B"}
|
package/dist/utils/routing.d.ts
CHANGED
|
@@ -3,8 +3,7 @@ import BigNumber from 'bignumber.js';
|
|
|
3
3
|
import { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
|
|
4
4
|
import { SelectedWallet } from './wallets';
|
|
5
5
|
import { BestRouteEqualityParams } from '../types';
|
|
6
|
-
import {
|
|
7
|
-
import { BestRouteWithFee } from '@rango-dev/ui';
|
|
6
|
+
import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';
|
|
8
7
|
export declare function searchParamsToToken(tokens: Token[], searchParams: string | null, chain: BlockchainMeta | null): Token | null;
|
|
9
8
|
export declare function getBestRouteToTokenUsdPrice(bestRoute: BestRouteResponse | null): number | null | undefined;
|
|
10
9
|
export declare function isNumberOfSwapsChanged(route1: BestRouteResponse, route2: BestRouteResponse): boolean;
|
|
@@ -14,6 +13,7 @@ export declare function isRouteChanged(route1: BestRouteResponse, route2: BestRo
|
|
|
14
13
|
export declare function outToRatioHasWarning(fromUsdValue: BigNumber | null, outToInRatio: BigNumber | 0): boolean;
|
|
15
14
|
export declare function getRequiredBalanceOfWallet(selectedWallet: SelectedWallet, fee: SimulationValidationStatus[] | null): SimulationAssetAndAmount[] | null;
|
|
16
15
|
export declare function isRouteParametersChanged(params: BestRouteEqualityParams): boolean | undefined;
|
|
17
|
-
export declare function
|
|
18
|
-
export declare
|
|
16
|
+
export declare function getFormatedBestRoute(bestRoute: BestRouteResponse | null): BestRouteResponse | null;
|
|
17
|
+
export declare function getFormatedPendingSwap(pendingSwap: PendingSwap): PendingSwap;
|
|
18
|
+
export declare const getBestRouteStatus: (loading: boolean, error: boolean) => "failed" | "success" | "loading";
|
|
19
19
|
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../src/utils/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../src/utils/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,GAC3B,KAAK,GAAG,IAAI,CAkBd;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAClC,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3B;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,WAK1B;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,WAO1B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,WAO1B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAMT;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,SAAS,GAAG,IAAI,EAC9B,YAAY,EAAE,SAAS,GAAG,CAAC,WAQ5B;AAED,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,0BAA0B,EAAE,GAAG,IAAI,GACvC,wBAAwB,EAAE,GAAG,IAAI,CAUnC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,uBAAuB,uBA4BvE;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAClC,iBAAiB,GAAG,IAAI,CAe1B;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAiB5E;AAGD,eAAO,MAAM,kBAAkB,YAAa,OAAO,SAAS,OAAO,qCAIlE,CAAC"}
|
|
@@ -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');
|
|
@@ -127,6 +127,195 @@ const decimalNumber = function (number, toFixed) {
|
|
|
127
127
|
return parseFloat(number).toFixed(toFixed);
|
|
128
128
|
};
|
|
129
129
|
|
|
130
|
+
function searchParamsToToken(tokens, searchParams, chain) {
|
|
131
|
+
if (!chain) return null;
|
|
132
|
+
return tokens.find(token => {
|
|
133
|
+
const symbolAndAddress = searchParams?.split('--');
|
|
134
|
+
if (symbolAndAddress?.length === 1) return token.symbol === symbolAndAddress[0] && token.address === null && token.blockchain === chain.name;
|
|
135
|
+
return token.symbol === symbolAndAddress?.[0] && token.address === symbolAndAddress?.[1] && token.blockchain === chain.name;
|
|
136
|
+
}) || null;
|
|
137
|
+
}
|
|
138
|
+
function getBestRouteToTokenUsdPrice(bestRoute) {
|
|
139
|
+
return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to.usdPrice;
|
|
140
|
+
}
|
|
141
|
+
function isNumberOfSwapsChanged(route1, route2) {
|
|
142
|
+
const route1Swaps = route1.result?.swaps || [];
|
|
143
|
+
const route2Swaps = route2.result?.swaps || [];
|
|
144
|
+
return route1Swaps.length !== route2Swaps.length;
|
|
145
|
+
}
|
|
146
|
+
function isRouteSwappersUpdated(route1, route2) {
|
|
147
|
+
const route1Swappers = route1.result?.swaps.map(swap => swap.swapperId) || [];
|
|
148
|
+
const route2Swappers = route2.result?.swaps.map(swap => swap.swapperId) || [];
|
|
149
|
+
return !areEqual(route1Swappers, route2Swappers);
|
|
150
|
+
}
|
|
151
|
+
function isRouteInternalCoinsUpdated(route1, route2) {
|
|
152
|
+
const route1InternalCoins = route1.result?.swaps.map(swap => swap.to.symbol) || [];
|
|
153
|
+
const route2InternalCoins = route2.result?.swaps.map(swap => swap.to.symbol) || [];
|
|
154
|
+
return !areEqual(route1InternalCoins, route2InternalCoins);
|
|
155
|
+
}
|
|
156
|
+
function isRouteChanged(route1, route2) {
|
|
157
|
+
return isNumberOfSwapsChanged(route1, route2) || isRouteSwappersUpdated(route1, route2) || isRouteInternalCoinsUpdated(route1, route2);
|
|
158
|
+
}
|
|
159
|
+
function getRequiredBalanceOfWallet(selectedWallet, fee) {
|
|
160
|
+
if (fee === null) return null;
|
|
161
|
+
const relatedFeeStatus = fee?.find(item => item.blockchain === selectedWallet.chain)?.wallets.find(wallet => wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase());
|
|
162
|
+
if (!relatedFeeStatus) return null;
|
|
163
|
+
return relatedFeeStatus.requiredAssets;
|
|
164
|
+
}
|
|
165
|
+
function isRouteParametersChanged(params) {
|
|
166
|
+
if (params.store === 'bestRoute') {
|
|
167
|
+
const {
|
|
168
|
+
prevState,
|
|
169
|
+
currentState
|
|
170
|
+
} = params;
|
|
171
|
+
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);
|
|
172
|
+
} else if (params.store === 'settings') {
|
|
173
|
+
const {
|
|
174
|
+
prevState,
|
|
175
|
+
currentState
|
|
176
|
+
} = params;
|
|
177
|
+
return prevState.slippage !== currentState.slippage || prevState.customSlippage !== currentState.customSlippage || prevState.disabledLiquiditySources?.length !== currentState.disabledLiquiditySources?.length || prevState.infiniteApprove || currentState.infiniteApprove;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
function getFormatedBestRoute(bestRoute) {
|
|
182
|
+
if (!bestRoute) return null;
|
|
183
|
+
const formatedSwaps = (bestRoute.result?.swaps || []).map(swap => ({
|
|
184
|
+
...swap,
|
|
185
|
+
fromAmount: numberToString(swap.fromAmount, 6, 6),
|
|
186
|
+
toAmount: numberToString(swap.toAmount, 6, 6)
|
|
187
|
+
}));
|
|
188
|
+
return {
|
|
189
|
+
...bestRoute,
|
|
190
|
+
...(bestRoute.result && {
|
|
191
|
+
result: {
|
|
192
|
+
...bestRoute.result,
|
|
193
|
+
swaps: formatedSwaps
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function getFormatedPendingSwap(pendingSwap) {
|
|
199
|
+
const formatedSteps = pendingSwap.steps.map(step => ({
|
|
200
|
+
...step,
|
|
201
|
+
feeInUsd: numberToString(step.feeInUsd, 4, 4),
|
|
202
|
+
outputAmount: numberToString(step.outputAmount, 6, 6),
|
|
203
|
+
expectedOutputAmountHumanReadable: numberToString(step.expectedOutputAmountHumanReadable, 6, 6)
|
|
204
|
+
}));
|
|
205
|
+
return {
|
|
206
|
+
...pendingSwap,
|
|
207
|
+
inputAmount: numberToString(pendingSwap.inputAmount, 6, 6),
|
|
208
|
+
steps: formatedSteps
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
//todo: refactor bestRoute store and add loadingStatus
|
|
212
|
+
const getBestRouteStatus = (loading, error) => {
|
|
213
|
+
if (loading) return 'loading';
|
|
214
|
+
if (error) return 'failed';else return 'success';
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const createSelectors = _store => {
|
|
218
|
+
let store = _store;
|
|
219
|
+
store.use = {};
|
|
220
|
+
for (let k of Object.keys(store.getState())) {
|
|
221
|
+
store.use[k] = () => store(s => s[k]);
|
|
222
|
+
}
|
|
223
|
+
return store;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';
|
|
227
|
+
let configs = {
|
|
228
|
+
API_KEY: RANGO_PUBLIC_API_KEY
|
|
229
|
+
};
|
|
230
|
+
function getConfig(name) {
|
|
231
|
+
return configs[name];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
let rango = undefined;
|
|
235
|
+
const httpService = () => {
|
|
236
|
+
if (rango) return rango;
|
|
237
|
+
rango = new rangoSdk.RangoClient(getConfig('API_KEY'));
|
|
238
|
+
return rango;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];
|
|
242
|
+
const DEFAULT_SLIPPAGE = 1;
|
|
243
|
+
const HIGH_SLIPPAGE = 5;
|
|
244
|
+
const MAX_SLIPPAGE = 100;
|
|
245
|
+
const MIN_SLIPPGAE = 0;
|
|
246
|
+
|
|
247
|
+
const useMetaStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()(set => ({
|
|
248
|
+
meta: {
|
|
249
|
+
blockchains: [],
|
|
250
|
+
popularTokens: [],
|
|
251
|
+
swappers: [],
|
|
252
|
+
tokens: []
|
|
253
|
+
},
|
|
254
|
+
loadingStatus: 'loading',
|
|
255
|
+
fetchMeta: async () => {
|
|
256
|
+
try {
|
|
257
|
+
const response = await httpService().getAllMetadata();
|
|
258
|
+
const chainThatHasTokenInMetaResponse = removeDuplicateFrom(response.tokens.map(t => t.blockchain));
|
|
259
|
+
const enabledChains = response.blockchains.filter(chain => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name));
|
|
260
|
+
response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);
|
|
261
|
+
set({
|
|
262
|
+
meta: response,
|
|
263
|
+
loadingStatus: 'success'
|
|
264
|
+
});
|
|
265
|
+
} catch (error) {
|
|
266
|
+
set({
|
|
267
|
+
loadingStatus: 'failed'
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
})));
|
|
272
|
+
|
|
273
|
+
const useSettingsStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()( /*#__PURE__*/middleware.persist( /*#__PURE__*/middleware.subscribeWithSelector(set => ({
|
|
274
|
+
slippage: DEFAULT_SLIPPAGE,
|
|
275
|
+
customSlippage: null,
|
|
276
|
+
infiniteApprove: false,
|
|
277
|
+
affiliateRef: null,
|
|
278
|
+
disabledLiquiditySources: [],
|
|
279
|
+
theme: 'auto',
|
|
280
|
+
setSlippage: slippage => set(() => ({
|
|
281
|
+
slippage: slippage
|
|
282
|
+
})),
|
|
283
|
+
setCustomSlippage: customSlippage => set(() => ({
|
|
284
|
+
customSlippage: customSlippage
|
|
285
|
+
})),
|
|
286
|
+
setAffiliateRef: affiliateRef => set(() => ({
|
|
287
|
+
affiliateRef
|
|
288
|
+
})),
|
|
289
|
+
toggleAllLiquiditySources: () => set(state => {
|
|
290
|
+
const {
|
|
291
|
+
swappers
|
|
292
|
+
} = useMetaStore.getState().meta;
|
|
293
|
+
const swappersGroup = removeDuplicateFrom(swappers.map(swapper => swapper.swapperGroup));
|
|
294
|
+
if (swappersGroup.length === state.disabledLiquiditySources.length) return {
|
|
295
|
+
disabledLiquiditySources: []
|
|
296
|
+
};else {
|
|
297
|
+
return {
|
|
298
|
+
disabledLiquiditySources: swappersGroup
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
}),
|
|
302
|
+
toggleInfiniteApprove: () => set(state => ({
|
|
303
|
+
infiniteApprove: !state.infiniteApprove
|
|
304
|
+
})),
|
|
305
|
+
toggleLiquiditySource: name => set(state => {
|
|
306
|
+
if (state.disabledLiquiditySources.includes(name)) return {
|
|
307
|
+
disabledLiquiditySources: state.disabledLiquiditySources.filter(liquiditySource => liquiditySource != name)
|
|
308
|
+
};else return {
|
|
309
|
+
disabledLiquiditySources: state.disabledLiquiditySources.concat(name)
|
|
310
|
+
};
|
|
311
|
+
}),
|
|
312
|
+
setTheme: theme => set(() => ({
|
|
313
|
+
theme
|
|
314
|
+
}))
|
|
315
|
+
})), {
|
|
316
|
+
name: 'user-settings'
|
|
317
|
+
})));
|
|
318
|
+
|
|
130
319
|
function getStateWallet(state) {
|
|
131
320
|
switch (true) {
|
|
132
321
|
case state.connected:
|
|
@@ -646,165 +835,6 @@ function shouldRetrySwap(pendingSwap) {
|
|
|
646
835
|
return pendingSwap.status === 'failed' && !!pendingSwap.finishTime && new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000;
|
|
647
836
|
}
|
|
648
837
|
|
|
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
838
|
const useWalletsStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.create()( /*#__PURE__*/middleware.subscribeWithSelector(set => ({
|
|
809
839
|
accounts: [],
|
|
810
840
|
balances: [],
|
|
@@ -1739,7 +1769,7 @@ function Home() {
|
|
|
1739
1769
|
}), showBestRoute && React__default.createElement(BestRouteContainer, null, React__default.createElement(ui.BestRoute, {
|
|
1740
1770
|
error: bestRouteError,
|
|
1741
1771
|
loading: fetchingBestRoute,
|
|
1742
|
-
data: bestRoute,
|
|
1772
|
+
data: getFormatedBestRoute(bestRoute),
|
|
1743
1773
|
totalFee: numberToString(totalFeeInUsd, 0, 2),
|
|
1744
1774
|
feeWarning: highFee,
|
|
1745
1775
|
totalTime: secondsToString(totalArrivalTime(bestRoute))
|
|
@@ -2354,7 +2384,9 @@ function ConfirmSwapPage() {
|
|
|
2354
2384
|
navigate(navigationRoutes.swaps + `/${swap.requestId}`, {
|
|
2355
2385
|
replace: true
|
|
2356
2386
|
});
|
|
2357
|
-
|
|
2387
|
+
setTimeout(() => {
|
|
2388
|
+
setInputAmount('');
|
|
2389
|
+
}, 0);
|
|
2358
2390
|
}
|
|
2359
2391
|
});
|
|
2360
2392
|
},
|
|
@@ -2832,10 +2864,6 @@ function SwapDetailsPage() {
|
|
|
2832
2864
|
loading: loading,
|
|
2833
2865
|
onBack: navigateBackFrom.bind(null, navigationRoutes.swapDetails)
|
|
2834
2866
|
});
|
|
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
2867
|
const currentStep = queueManagerRangoPreset.getCurrentStep(swap);
|
|
2840
2868
|
const currentStepBlockchain = currentStep ? queueManagerRangoPreset.getCurrentBlockchainOfOrNull(swap, currentStep) : null;
|
|
2841
2869
|
const currentStepWallet = currentStep ? queueManagerRangoPreset.getRelatedWalletOrNull(swap, currentStep) : null;
|
|
@@ -2848,38 +2876,41 @@ function SwapDetailsPage() {
|
|
|
2848
2876
|
const lastConvertedTokenInFailedSwap = getLastConvertedTokenInFailedSwap(swap);
|
|
2849
2877
|
return React__default.createElement(ui.SwapHistory, Object.assign({
|
|
2850
2878
|
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
|
-
|
|
2879
|
+
/* TODO: It was temporarily removed to find a better solution*/
|
|
2880
|
+
/*
|
|
2881
|
+
previewInputs={
|
|
2882
|
+
<>
|
|
2883
|
+
<TokenPreview
|
|
2884
|
+
chain={{
|
|
2885
|
+
displayName: firstStep?.fromBlockchain || '',
|
|
2886
|
+
logo: firstStep?.fromBlockchainLogo || '',
|
|
2887
|
+
}}
|
|
2888
|
+
token={{
|
|
2889
|
+
symbol: firstStep?.fromSymbol || '',
|
|
2890
|
+
image: firstStep?.fromLogo || '',
|
|
2891
|
+
}}
|
|
2892
|
+
amount={fromAmount}
|
|
2893
|
+
label={t('From')}
|
|
2894
|
+
loadingStatus={'success'}
|
|
2895
|
+
/>
|
|
2896
|
+
<Spacer size={12} direction="vertical" />
|
|
2897
|
+
<TokenPreview
|
|
2898
|
+
chain={{
|
|
2899
|
+
displayName: lastStep?.toBlockchain || '',
|
|
2900
|
+
logo: lastStep?.toBlockchainLogo || '',
|
|
2901
|
+
}}
|
|
2902
|
+
token={{
|
|
2903
|
+
symbol: lastStep?.toSymbol || '',
|
|
2904
|
+
image: lastStep?.toLogo || '',
|
|
2905
|
+
}}
|
|
2906
|
+
amount={toAmount}
|
|
2907
|
+
label={t('To')}
|
|
2908
|
+
loadingStatus={'success'}
|
|
2909
|
+
/>
|
|
2910
|
+
</>
|
|
2911
|
+
}
|
|
2912
|
+
*/
|
|
2913
|
+
pendingSwap: getFormatedPendingSwap(swap),
|
|
2883
2914
|
onCopy: handleCopy,
|
|
2884
2915
|
isCopied: isCopied,
|
|
2885
2916
|
onCancel: onCancel,
|