@rango-dev/widget-embedded 0.12.1-next.14 → 0.12.1-next.16
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/Widget.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/pages/SelectSwapItemsPage.d.ts.map +1 -1
- package/dist/utils/routing.d.ts +2 -1
- package/dist/utils/routing.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Widget.tsx +60 -0
- package/src/hooks/useSwapInput.ts +1 -1
- package/src/pages/SelectSwapItemsPage.tsx +38 -31
- package/src/utils/routing.ts +20 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,WAAW,CAAC;AAI9C,OAAO,KAA8B,MAAM,OAAO,CAAC;AAgBnD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,qBAmInD"}
|
package/dist/utils/routing.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { BestRouteEqualityParams, Wallet } from '../types';
|
|
|
2
2
|
import type { PendingSwap } from '@rango-dev/queue-manager-rango-preset';
|
|
3
3
|
import type { PriceImpactWarningLevel } from '@rango-dev/ui';
|
|
4
4
|
import type { SimulationAssetAndAmount, SimulationValidationStatus } from '@rango-dev/ui/dist/widget/ui/src/types/swaps';
|
|
5
|
-
import type { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
|
|
5
|
+
import type { Asset, BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
|
|
6
6
|
import BigNumber from 'bignumber.js';
|
|
7
7
|
export declare function searchParamsToToken(tokens: Token[], searchParams: string | null, chain: BlockchainMeta | null): Token | null;
|
|
8
8
|
export declare function getBestRouteToTokenUsdPrice(bestRoute: BestRouteResponse | null): number | null | undefined;
|
|
@@ -17,4 +17,5 @@ export declare function getFormattedBestRoute(bestRoute: BestRouteResponse | nul
|
|
|
17
17
|
export declare function getFormattedPendingSwap(pendingSwap: PendingSwap): PendingSwap;
|
|
18
18
|
export declare const getBestRouteStatus: (loading: boolean, error: boolean) => "failed" | "success" | "loading";
|
|
19
19
|
export declare function getPriceImpactLevel(priceImpact: number): PriceImpactWarningLevel;
|
|
20
|
+
export declare function findCommonTokens<T extends Asset[], R extends Asset[]>(listA: T, listB: R): R;
|
|
20
21
|
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/utils/routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/utils/routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,EACN,MAAM,WAAW,CAAC;AAEnB,OAAO,SAAS,MAAM,cAAc,CAAC;AAcrC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,GAC3B,KAAK,GAAG,IAAI,CAqBd;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,MAAM,EACtB,GAAG,EAAE,0BAA0B,EAAE,GAAG,IAAI,GACvC,wBAAwB,EAAE,GAAG,IAAI,CAcnC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,uBAAuB,uBA4BvE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAClC,iBAAiB,GAAG,IAAI,CAyB1B;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CA6B7E;AAGD,eAAO,MAAM,kBAAkB,YAAa,OAAO,SAAS,OAAO,qCAQlE,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,GAClB,uBAAuB,CASzB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,EACnE,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,CAAC,KAUT"}
|
package/package.json
CHANGED
package/src/Widget.tsx
CHANGED
|
@@ -11,9 +11,12 @@ import { WidgetEvents } from './components/WidgetEvents';
|
|
|
11
11
|
import { globalFont } from './globalStyles';
|
|
12
12
|
import { useTheme } from './hooks/useTheme';
|
|
13
13
|
import QueueManager from './QueueManager';
|
|
14
|
+
import { useBestRouteStore } from './store/bestRoute';
|
|
15
|
+
import { useMetaStore } from './store/meta';
|
|
14
16
|
import { useNotificationStore } from './store/notification';
|
|
15
17
|
import { useSettingsStore } from './store/settings';
|
|
16
18
|
import { initConfig } from './utils/configs';
|
|
19
|
+
import { tokensAreEqual } from './utils/wallets';
|
|
17
20
|
import { WidgetContext, WidgetWallets } from './Wallets';
|
|
18
21
|
|
|
19
22
|
const MainContainer = styled('div', {
|
|
@@ -52,6 +55,63 @@ export function Main(props: PropsWithChildren<WidgetProps>) {
|
|
|
52
55
|
widgetContext.onConnectWallet(setLastConnectedWalletWithNetwork);
|
|
53
56
|
}, []);
|
|
54
57
|
|
|
58
|
+
const {
|
|
59
|
+
setInputAmount,
|
|
60
|
+
setToToken,
|
|
61
|
+
setToBlockchain,
|
|
62
|
+
setFromBlockchain,
|
|
63
|
+
setFromToken,
|
|
64
|
+
} = useBestRouteStore();
|
|
65
|
+
|
|
66
|
+
const {
|
|
67
|
+
meta: { tokens, blockchains },
|
|
68
|
+
loadingStatus: loadingMetaStatus,
|
|
69
|
+
} = useMetaStore();
|
|
70
|
+
|
|
71
|
+
const { setAffiliateRef, setAffiliatePercent, setAffiliateWallets } =
|
|
72
|
+
useSettingsStore();
|
|
73
|
+
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
setInputAmount(config?.amount?.toString() || '');
|
|
76
|
+
}, [config?.amount]);
|
|
77
|
+
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (loadingMetaStatus === 'success') {
|
|
80
|
+
const chain = blockchains.find(
|
|
81
|
+
(chain) => chain.name === config?.from?.blockchain
|
|
82
|
+
);
|
|
83
|
+
const token = tokens.find((t) =>
|
|
84
|
+
tokensAreEqual(t, config?.from?.token || null)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
setFromBlockchain(chain || null);
|
|
88
|
+
setFromToken(token || null);
|
|
89
|
+
}
|
|
90
|
+
}, [config?.from?.token, config?.from?.blockchain, loadingMetaStatus]);
|
|
91
|
+
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (loadingMetaStatus === 'success') {
|
|
94
|
+
const chain = blockchains.find(
|
|
95
|
+
(chain) => chain.name === config?.to?.blockchain
|
|
96
|
+
);
|
|
97
|
+
const token = tokens.find((t) =>
|
|
98
|
+
tokensAreEqual(t, config?.to?.token || null)
|
|
99
|
+
);
|
|
100
|
+
setToBlockchain(chain || null);
|
|
101
|
+
setToToken(token || null);
|
|
102
|
+
}
|
|
103
|
+
}, [config?.to?.token, config?.to?.blockchain, loadingMetaStatus]);
|
|
104
|
+
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
setAffiliateRef(config?.affiliate?.ref ?? null);
|
|
107
|
+
setAffiliatePercent(config?.affiliate?.percent ?? null);
|
|
108
|
+
setAffiliateWallets(config?.affiliate?.wallets ?? null);
|
|
109
|
+
}, [
|
|
110
|
+
config?.affiliate?.ref,
|
|
111
|
+
config?.affiliate?.percent,
|
|
112
|
+
config?.affiliate?.wallets,
|
|
113
|
+
]);
|
|
114
|
+
|
|
55
115
|
return (
|
|
56
116
|
<I18nManager language={config?.language}>
|
|
57
117
|
<MainContainer id="swap-container" className={activeTheme}>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-magic-numbers */
|
|
2
|
-
import type { Asset } from 'rango-sdk';
|
|
2
|
+
import type { Asset, Token } from 'rango-sdk';
|
|
3
3
|
|
|
4
4
|
import { i18n } from '@lingui/core';
|
|
5
5
|
import { Divider } from '@rango-dev/ui';
|
|
@@ -16,6 +16,7 @@ import { useNavigateBack } from '../hooks/useNavigateBack';
|
|
|
16
16
|
import { useBestRouteStore } from '../store/bestRoute';
|
|
17
17
|
import { useMetaStore } from '../store/meta';
|
|
18
18
|
import { useWalletsStore } from '../store/wallets';
|
|
19
|
+
import { findCommonTokens } from '../utils/routing';
|
|
19
20
|
import { tokensAreEqual } from '../utils/wallets';
|
|
20
21
|
|
|
21
22
|
interface PropTypes {
|
|
@@ -29,19 +30,22 @@ export function SelectSwapItemsPage(props: PropTypes) {
|
|
|
29
30
|
const { type, supportedBlockchains, supportedTokens, pinnedTokens } = props;
|
|
30
31
|
const navigate = useNavigate();
|
|
31
32
|
const { navigateBackFrom } = useNavigateBack();
|
|
32
|
-
const {
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const {
|
|
34
|
+
meta: { tokens },
|
|
35
|
+
setTokensWithBalance,
|
|
36
|
+
} = useMetaStore();
|
|
37
|
+
const {
|
|
38
|
+
sourceTokens,
|
|
39
|
+
destinationTokens,
|
|
40
|
+
fromBlockchain,
|
|
41
|
+
toBlockchain,
|
|
42
|
+
setFromToken,
|
|
43
|
+
setToToken,
|
|
44
|
+
setFromBlockchain,
|
|
45
|
+
setToBlockchain,
|
|
46
|
+
} = useBestRouteStore();
|
|
47
|
+
const { connectedWallets, loading: loadingWallet } = useWalletsStore();
|
|
35
48
|
const [searchedFor, setSearchedFor] = useState<string>('');
|
|
36
|
-
const setFromToken = useBestRouteStore.use.setFromToken();
|
|
37
|
-
const setToToken = useBestRouteStore.use.setToToken();
|
|
38
|
-
const setToBlockchain = useBestRouteStore.use.setToBlockchain();
|
|
39
|
-
const setFromBlockchain = useBestRouteStore.use.setFromBlockchain();
|
|
40
|
-
const toBlockchain = useBestRouteStore.use.toBlockchain();
|
|
41
|
-
const fromBlockchain = useBestRouteStore.use.fromBlockchain();
|
|
42
|
-
const connectedWallets = useWalletsStore.use.connectedWallets();
|
|
43
|
-
const loadingWallet = useWalletsStore.use.loading();
|
|
44
|
-
const setTokensWithBalance = useMetaStore.use.setTokensWithBalance();
|
|
45
49
|
|
|
46
50
|
const blockchains = supportedBlockchains
|
|
47
51
|
? useMetaStore.use
|
|
@@ -50,38 +54,41 @@ export function SelectSwapItemsPage(props: PropTypes) {
|
|
|
50
54
|
supportedBlockchains.includes(chain.name)
|
|
51
55
|
)
|
|
52
56
|
: useMetaStore.use.meta().blockchains;
|
|
57
|
+
|
|
53
58
|
const allTokens = supportedTokens
|
|
54
|
-
? tokens
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const supportedSourceTokens = supportedTokens
|
|
59
|
-
? sourceTokens.filter((token) =>
|
|
60
|
-
supportedTokens.some((supportedToken) =>
|
|
61
|
-
tokensAreEqual(supportedToken, token)
|
|
59
|
+
? findCommonTokens(supportedTokens, tokens)
|
|
60
|
+
: tokens.filter((token) =>
|
|
61
|
+
new Set(blockchains.map((blockchain) => blockchain.name)).has(
|
|
62
|
+
token.blockchain
|
|
62
63
|
)
|
|
63
|
-
)
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const supportedSourceTokens = supportedTokens
|
|
67
|
+
? findCommonTokens(supportedTokens, sourceTokens)
|
|
64
68
|
: sourceTokens;
|
|
65
69
|
|
|
66
70
|
const supportedDestinationTokens = supportedTokens
|
|
67
|
-
? destinationTokens
|
|
68
|
-
supportedTokens.some((supportedToken) =>
|
|
69
|
-
tokensAreEqual(supportedToken, token)
|
|
70
|
-
)
|
|
71
|
-
)
|
|
71
|
+
? findCommonTokens(supportedTokens, destinationTokens)
|
|
72
72
|
: destinationTokens;
|
|
73
73
|
|
|
74
74
|
const tokensByType =
|
|
75
75
|
type === 'from' ? supportedSourceTokens : supportedDestinationTokens;
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
let tokenList: Token[] = [];
|
|
78
|
+
|
|
79
|
+
const noBlockchainSelected =
|
|
80
|
+
(type === 'from' && !fromBlockchain) || (type === 'to' && !toBlockchain);
|
|
81
|
+
|
|
82
|
+
if (noBlockchainSelected) {
|
|
83
|
+
tokenList = allTokens;
|
|
84
|
+
} else if (tokensByType.length) {
|
|
85
|
+
tokenList = tokensByType.map((token) => ({
|
|
79
86
|
...token,
|
|
80
87
|
pin: pinnedTokens?.some((pinnedToken) =>
|
|
81
88
|
tokensAreEqual(pinnedToken, token)
|
|
82
89
|
),
|
|
83
|
-
})
|
|
84
|
-
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
85
92
|
|
|
86
93
|
useEffect(() => {
|
|
87
94
|
if (connectedWallets.length && !loadingWallet) {
|
package/src/utils/routing.ts
CHANGED
|
@@ -6,7 +6,12 @@ import type {
|
|
|
6
6
|
SimulationAssetAndAmount,
|
|
7
7
|
SimulationValidationStatus,
|
|
8
8
|
} from '@rango-dev/ui/dist/widget/ui/src/types/swaps';
|
|
9
|
-
import type {
|
|
9
|
+
import type {
|
|
10
|
+
Asset,
|
|
11
|
+
BestRouteResponse,
|
|
12
|
+
BlockchainMeta,
|
|
13
|
+
Token,
|
|
14
|
+
} from 'rango-sdk';
|
|
10
15
|
|
|
11
16
|
import BigNumber from 'bignumber.js';
|
|
12
17
|
|
|
@@ -242,3 +247,17 @@ export function getPriceImpactLevel(
|
|
|
242
247
|
|
|
243
248
|
return warningLevel;
|
|
244
249
|
}
|
|
250
|
+
|
|
251
|
+
export function findCommonTokens<T extends Asset[], R extends Asset[]>(
|
|
252
|
+
listA: T,
|
|
253
|
+
listB: R
|
|
254
|
+
) {
|
|
255
|
+
const tokenToString = (token: Asset): string =>
|
|
256
|
+
`${token.symbol}-${token.blockchain}-${token.address ?? ''}`;
|
|
257
|
+
|
|
258
|
+
const set = new Set();
|
|
259
|
+
|
|
260
|
+
listA.forEach((token) => set.add(tokenToString(token)));
|
|
261
|
+
|
|
262
|
+
return listB.filter((token) => set.has(tokenToString(token))) as R;
|
|
263
|
+
}
|