@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.
@@ -1 +1 @@
1
- {"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIvC,OAAO,KAA8B,MAAM,OAAO,CAAC;AAenD,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,qBA6HnD"}
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"}
@@ -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,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAE1E,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/widget-embedded",
3
- "version": "0.12.1-next.14",
3
+ "version": "0.12.1-next.16",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
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}>
@@ -98,7 +98,7 @@ export function useSwapInput(): UseSwapInput {
98
98
  setLoading(true);
99
99
  debouncedFetch();
100
100
  return cancelFetch;
101
- }, [inputAmount]);
101
+ }, [inputAmount, shouldSkipRequest]);
102
102
 
103
103
  useEffect(() => {
104
104
  if (!shouldSkipRequest) {
@@ -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 { tokens } = useMetaStore.use.meta();
33
- const sourceTokens = useBestRouteStore.use.sourceTokens();
34
- const destinationTokens = useBestRouteStore.use.destinationTokens();
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.filter((token) =>
55
- tokens.some((supportedToken) => tokensAreEqual(supportedToken, token))
56
- )
57
- : tokens;
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.filter((token) =>
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
- const tokenList = (tokensByType.length ? tokensByType : allTokens).map(
78
- (token) => ({
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) {
@@ -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 { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
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
+ }