@rango-dev/widget-embedded 0.1.10 → 0.1.11-next.0
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/PercentageChange.d.ts +9 -0
- package/dist/components/PercentageChange.d.ts.map +1 -0
- package/dist/components/TokenInfo.d.ts.map +1 -1
- package/dist/components/TokenPreview.d.ts +2 -1
- package/dist/components/TokenPreview.d.ts.map +1 -1
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/store/bestRoute.d.ts +1 -0
- package/dist/store/bestRoute.d.ts.map +1 -1
- package/dist/types/routing.d.ts +14 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/utils/routing.d.ts +2 -2
- package/dist/utils/routing.d.ts.map +1 -1
- package/dist/utils/swap.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +94 -34
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +94 -34
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +95 -35
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/PercentageChange.tsx +33 -0
- package/src/components/TokenInfo.tsx +20 -4
- package/src/components/TokenPreview.tsx +16 -8
- package/src/pages/ConfirmSwapPage.tsx +12 -7
- package/src/pages/Home.tsx +8 -14
- package/src/store/bestRoute.ts +35 -6
- package/src/types/routing.ts +17 -1
- package/src/utils/routing.ts +29 -23
- package/src/utils/swap.ts +2 -1
|
@@ -445,7 +445,7 @@ function getSwapButtonState(loadingMetaStatus, accounts, loading, bestRoute, has
|
|
|
445
445
|
};else if (inputIsZero) return {
|
|
446
446
|
title: 'Enter an amount',
|
|
447
447
|
disabled: true
|
|
448
|
-
};else if (!bestRoute) return {
|
|
448
|
+
};else if (!bestRoute || !bestRoute.result) return {
|
|
449
449
|
title: 'Swap',
|
|
450
450
|
disabled: true
|
|
451
451
|
};else if (hasLimitError) return {
|
|
@@ -753,8 +753,21 @@ function getRequiredBalanceOfWallet(selectedWallet, fee) {
|
|
|
753
753
|
if (!relatedFeeStatus) return null;
|
|
754
754
|
return relatedFeeStatus.requiredAssets;
|
|
755
755
|
}
|
|
756
|
-
function isRouteParametersChanged(
|
|
757
|
-
|
|
756
|
+
function isRouteParametersChanged(params) {
|
|
757
|
+
if (params.store === 'bestRoute') {
|
|
758
|
+
const {
|
|
759
|
+
prevState,
|
|
760
|
+
currentState
|
|
761
|
+
} = params;
|
|
762
|
+
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);
|
|
763
|
+
} else if (params.store === 'settings') {
|
|
764
|
+
const {
|
|
765
|
+
prevState,
|
|
766
|
+
currentState
|
|
767
|
+
} = params;
|
|
768
|
+
return prevState.slippage !== currentState.slippage || prevState.customSlippage !== currentState.customSlippage || prevState.disabledLiquiditySources?.length !== currentState.disabledLiquiditySources?.length || prevState.infiniteApprove || currentState.infiniteApprove;
|
|
769
|
+
}
|
|
770
|
+
return false;
|
|
758
771
|
}
|
|
759
772
|
//todo: refactor bestRoute store and add loadingStatus
|
|
760
773
|
const getBestRouteStatus = (loading, error) => {
|
|
@@ -1020,7 +1033,6 @@ const useBestRouteStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.cre
|
|
|
1020
1033
|
toToken: token
|
|
1021
1034
|
})),
|
|
1022
1035
|
setInputAmount: amount => {
|
|
1023
|
-
console.log(amount, typeof amount);
|
|
1024
1036
|
set(state => ({
|
|
1025
1037
|
inputAmount: amount,
|
|
1026
1038
|
...(!amount && {
|
|
@@ -1073,7 +1085,17 @@ const useBestRouteStore = /*#__PURE__*/createSelectors( /*#__PURE__*/zustand.cre
|
|
|
1073
1085
|
sourceTokens: sortedSourceTokens,
|
|
1074
1086
|
destinationTokens: sortedDestinationTokens
|
|
1075
1087
|
});
|
|
1076
|
-
}
|
|
1088
|
+
},
|
|
1089
|
+
switchFromAndTo: () => set(state => ({
|
|
1090
|
+
fromChain: state.toChain,
|
|
1091
|
+
fromToken: state.toToken,
|
|
1092
|
+
toChain: state.fromChain,
|
|
1093
|
+
toToken: state.fromToken,
|
|
1094
|
+
sourceTokens: state.destinationTokens,
|
|
1095
|
+
destinationTokens: state.sourceTokens,
|
|
1096
|
+
inputAmount: state.outputAmount?.toString() || '',
|
|
1097
|
+
inputUsdValue: getUsdValue(state.toToken, state.outputAmount?.toString() || '')
|
|
1098
|
+
}))
|
|
1077
1099
|
}))));
|
|
1078
1100
|
const bestRoute = (bestRouteStore, settingsStore) => {
|
|
1079
1101
|
let abortController = null;
|
|
@@ -1126,7 +1148,7 @@ const bestRoute = (bestRouteStore, settingsStore) => {
|
|
|
1126
1148
|
inputAmount,
|
|
1127
1149
|
inputUsdValue
|
|
1128
1150
|
} = useBestRouteStore.getState();
|
|
1129
|
-
if (!inputAmount || inputAmount === '0') return;
|
|
1151
|
+
if (!inputAmount || inputAmount === '0' || inputUsdValue.eq(0)) return;
|
|
1130
1152
|
if (tokensAreEqual(fromToken, toToken)) return bestRouteStore.setState({
|
|
1131
1153
|
loading: false,
|
|
1132
1154
|
bestRoute: null,
|
|
@@ -1148,17 +1170,26 @@ const bestRoute = (bestRouteStore, settingsStore) => {
|
|
|
1148
1170
|
toToken: state.toToken,
|
|
1149
1171
|
inputAmount: state.inputAmount
|
|
1150
1172
|
}), bestRouteParamsListener, {
|
|
1151
|
-
equalityFn: (prevState,
|
|
1152
|
-
if (isRouteParametersChanged(
|
|
1173
|
+
equalityFn: (prevState, currentState) => {
|
|
1174
|
+
if (isRouteParametersChanged({
|
|
1175
|
+
store: 'bestRoute',
|
|
1176
|
+
prevState,
|
|
1177
|
+
currentState
|
|
1178
|
+
})) return false;else return true;
|
|
1153
1179
|
}
|
|
1154
1180
|
});
|
|
1155
1181
|
useSettingsStore.subscribe(state => ({
|
|
1156
1182
|
slippage: state.slippage,
|
|
1157
1183
|
customSlippage: state.customSlippage,
|
|
1158
|
-
disabledLiquiditySources: state.disabledLiquiditySources
|
|
1184
|
+
disabledLiquiditySources: state.disabledLiquiditySources,
|
|
1185
|
+
infiniteApprove: state.infiniteApprove
|
|
1159
1186
|
}), bestRouteParamsListener, {
|
|
1160
|
-
equalityFn: (prevState,
|
|
1161
|
-
if (isRouteParametersChanged(
|
|
1187
|
+
equalityFn: (prevState, currentState) => {
|
|
1188
|
+
if (isRouteParametersChanged({
|
|
1189
|
+
store: 'settings',
|
|
1190
|
+
prevState,
|
|
1191
|
+
currentState
|
|
1192
|
+
})) return false;else return true;
|
|
1162
1193
|
}
|
|
1163
1194
|
});
|
|
1164
1195
|
return {
|
|
@@ -1323,6 +1354,20 @@ function UpdateUrl() {
|
|
|
1323
1354
|
return null;
|
|
1324
1355
|
}
|
|
1325
1356
|
|
|
1357
|
+
function PercentageChange(props) {
|
|
1358
|
+
const {
|
|
1359
|
+
inputUsdValue,
|
|
1360
|
+
outputUsdValue
|
|
1361
|
+
} = props;
|
|
1362
|
+
if (!inputUsdValue || !outputUsdValue || !outputUsdValue.gt(0)) return null;
|
|
1363
|
+
const percentageChange = getPercentageChange(inputUsdValue.toNumber(), outputUsdValue.toNumber());
|
|
1364
|
+
const showPercentageChange = percentageChange?.lt(0);
|
|
1365
|
+
return React__default.createElement(React__default.Fragment, null, showPercentageChange && React__default.createElement(ui.Typography, {
|
|
1366
|
+
variant: "caption",
|
|
1367
|
+
color: "$error500"
|
|
1368
|
+
}, `(${numberToString(percentageChange, 0, 2)}%)`));
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1326
1371
|
const Box = /*#__PURE__*/ui.styled('div', {
|
|
1327
1372
|
display: 'flex',
|
|
1328
1373
|
flexDirection: 'column',
|
|
@@ -1366,6 +1411,13 @@ const Container = /*#__PURE__*/ui.styled('div', {
|
|
|
1366
1411
|
'.amount': {
|
|
1367
1412
|
width: '30%'
|
|
1368
1413
|
}
|
|
1414
|
+
},
|
|
1415
|
+
'.output-usd': {
|
|
1416
|
+
display: 'flex',
|
|
1417
|
+
div: {
|
|
1418
|
+
display: 'flex',
|
|
1419
|
+
paddingLeft: '$8'
|
|
1420
|
+
}
|
|
1369
1421
|
}
|
|
1370
1422
|
});
|
|
1371
1423
|
const StyledImage = /*#__PURE__*/ui.styled('img', {
|
|
@@ -1450,10 +1502,15 @@ function TokenInfo(props) {
|
|
|
1450
1502
|
type: "primary",
|
|
1451
1503
|
variant: "ghost",
|
|
1452
1504
|
size: "compact"
|
|
1453
|
-
}, t('Max')))) : React__default.createElement(
|
|
1505
|
+
}, t('Max')))) : React__default.createElement("div", {
|
|
1506
|
+
className: "output-usd"
|
|
1507
|
+
}, React__default.createElement(PercentageChange, {
|
|
1508
|
+
inputUsdValue: inputUsdValue,
|
|
1509
|
+
outputUsdValue: props.outputUsdValue
|
|
1510
|
+
}), React__default.createElement("div", null, React__default.createElement(ui.Typography, {
|
|
1454
1511
|
variant: "caption",
|
|
1455
1512
|
color: "neutrals600"
|
|
1456
|
-
}, `$${numberToString(props.outputUsdValue)}`)), React__default.createElement("div", {
|
|
1513
|
+
}, `$${numberToString(props.outputUsdValue)}`)))), React__default.createElement("div", {
|
|
1457
1514
|
className: "form"
|
|
1458
1515
|
}, React__default.createElement(ui.Button, {
|
|
1459
1516
|
className: "selectors",
|
|
@@ -1676,10 +1733,6 @@ function Home(props) {
|
|
|
1676
1733
|
const fromToken = useBestRouteStore.use.fromToken();
|
|
1677
1734
|
const toChain = useBestRouteStore.use.toChain();
|
|
1678
1735
|
const toToken = useBestRouteStore.use.toToken();
|
|
1679
|
-
const setFromChain = useBestRouteStore.use.setFromChain();
|
|
1680
|
-
const setFromToken = useBestRouteStore.use.setFromToken();
|
|
1681
|
-
const setToChain = useBestRouteStore.use.setToChain();
|
|
1682
|
-
const setToToken = useBestRouteStore.use.setToToken();
|
|
1683
1736
|
const setInputAmount = useBestRouteStore.use.setInputAmount();
|
|
1684
1737
|
const inputUsdValue = useBestRouteStore.use.inputUsdValue();
|
|
1685
1738
|
const inputAmount = useBestRouteStore.use.inputAmount();
|
|
@@ -1692,14 +1745,7 @@ function Home(props) {
|
|
|
1692
1745
|
const loadingMetaStatus = useMetaStore.use.loadingStatus();
|
|
1693
1746
|
const accounts = useWalletsStore.use.accounts();
|
|
1694
1747
|
const setCurrentPage = useUiStore.use.setCurrentPage();
|
|
1695
|
-
const
|
|
1696
|
-
setFromChain(toChain);
|
|
1697
|
-
setFromToken(toToken);
|
|
1698
|
-
setToChain(fromChain);
|
|
1699
|
-
setToToken(fromToken);
|
|
1700
|
-
setInputAmount(outputAmount?.toString() || '');
|
|
1701
|
-
setCount(prev => prev + 1);
|
|
1702
|
-
};
|
|
1748
|
+
const switchFromAndTo = useBestRouteStore.use.switchFromAndTo();
|
|
1703
1749
|
const errorMessage = loadingMetaStatus === 'failed' ? errorMessages.genericServerError : bestRouteError;
|
|
1704
1750
|
const needsToWarnEthOnPath = false;
|
|
1705
1751
|
const showBestRoute = inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);
|
|
@@ -1732,7 +1778,10 @@ function Home(props) {
|
|
|
1732
1778
|
inputAmount: inputAmount
|
|
1733
1779
|
}), React__default.createElement(SwitchButtonContainer, null, React__default.createElement(ui.Button, {
|
|
1734
1780
|
variant: "ghost",
|
|
1735
|
-
onClick:
|
|
1781
|
+
onClick: () => {
|
|
1782
|
+
switchFromAndTo();
|
|
1783
|
+
setCount(prev => prev + 1);
|
|
1784
|
+
}
|
|
1736
1785
|
}, React__default.createElement(ui.VerticalSwapIcon, {
|
|
1737
1786
|
size: 32
|
|
1738
1787
|
}), isRouterInContext && React__default.createElement(SwithFromAndTo, {
|
|
@@ -1862,7 +1911,10 @@ const Container$3 = /*#__PURE__*/ui.styled('div', {
|
|
|
1862
1911
|
display: 'flex',
|
|
1863
1912
|
justifyContent: 'space-between',
|
|
1864
1913
|
alignItems: 'center',
|
|
1865
|
-
minHeight: '32px'
|
|
1914
|
+
minHeight: '32px',
|
|
1915
|
+
'.usd-value': {
|
|
1916
|
+
paddingLeft: '$8'
|
|
1917
|
+
}
|
|
1866
1918
|
},
|
|
1867
1919
|
'.form': {
|
|
1868
1920
|
display: 'flex',
|
|
@@ -1907,7 +1959,8 @@ function TokenPreview(props) {
|
|
|
1907
1959
|
const {
|
|
1908
1960
|
chain,
|
|
1909
1961
|
token,
|
|
1910
|
-
loadingStatus
|
|
1962
|
+
loadingStatus,
|
|
1963
|
+
percentageChange
|
|
1911
1964
|
} = props;
|
|
1912
1965
|
const {
|
|
1913
1966
|
t
|
|
@@ -1929,10 +1982,11 @@ function TokenPreview(props) {
|
|
|
1929
1982
|
}, React__default.createElement(ui.Typography, {
|
|
1930
1983
|
variant: "body2",
|
|
1931
1984
|
color: "neutrals800"
|
|
1932
|
-
}, props.label), props.usdValue && React__default.createElement(ui.Typography, {
|
|
1985
|
+
}, props.label), React__default.createElement("div", null, percentageChange, props.usdValue && React__default.createElement(ui.Typography, {
|
|
1933
1986
|
variant: "caption",
|
|
1934
|
-
color: "neutrals600"
|
|
1935
|
-
|
|
1987
|
+
color: "neutrals600",
|
|
1988
|
+
className: "usd-value"
|
|
1989
|
+
}, `$${numberToString(props.usdValue)}`))), React__default.createElement("div", {
|
|
1936
1990
|
className: "form"
|
|
1937
1991
|
}, React__default.createElement(ui.Button, {
|
|
1938
1992
|
className: "selectors",
|
|
@@ -2311,6 +2365,8 @@ function ConfirmSwapPage() {
|
|
|
2311
2365
|
const setSelectedWallet = useWalletsStore.use.setSelectedWallet();
|
|
2312
2366
|
const slippage = useSettingsStore.use.slippage();
|
|
2313
2367
|
const customSlippage = useSettingsStore.use.customSlippage();
|
|
2368
|
+
const inputUsdValue = useBestRouteStore.use.inputUsdValue();
|
|
2369
|
+
const outputUsdValue = useBestRouteStore.use.outputUsdValue();
|
|
2314
2370
|
const bestRouteloadingStatus = getBestRouteStatus(fetchingBestRoute, !!fetchingBestRouteError);
|
|
2315
2371
|
const {
|
|
2316
2372
|
manager
|
|
@@ -2373,7 +2429,7 @@ function ConfirmSwapPage() {
|
|
|
2373
2429
|
symbol: firstStep?.from.symbol || '',
|
|
2374
2430
|
image: firstStep?.from.logo || ''
|
|
2375
2431
|
},
|
|
2376
|
-
usdValue:
|
|
2432
|
+
usdValue: inputUsdValue,
|
|
2377
2433
|
amount: fromAmount,
|
|
2378
2434
|
label: i18n.t('From'),
|
|
2379
2435
|
loadingStatus: bestRouteloadingStatus
|
|
@@ -2389,10 +2445,14 @@ function ConfirmSwapPage() {
|
|
|
2389
2445
|
symbol: lastStep?.to.symbol || '',
|
|
2390
2446
|
image: lastStep?.to.logo || ''
|
|
2391
2447
|
},
|
|
2392
|
-
usdValue:
|
|
2448
|
+
usdValue: outputUsdValue,
|
|
2393
2449
|
amount: toAmount,
|
|
2394
2450
|
label: i18n.t('To'),
|
|
2395
|
-
loadingStatus: bestRouteloadingStatus
|
|
2451
|
+
loadingStatus: bestRouteloadingStatus,
|
|
2452
|
+
percentageChange: React__default.createElement(PercentageChange, {
|
|
2453
|
+
inputUsdValue: inputUsdValue,
|
|
2454
|
+
outputUsdValue: outputUsdValue
|
|
2455
|
+
})
|
|
2396
2456
|
})),
|
|
2397
2457
|
previewRoutes: React__default.createElement(RoutesOverview, {
|
|
2398
2458
|
routes: bestRoute,
|