@multiversx/sdk-dapp-liquidity 1.1.0-alpha.13 → 1.1.0-alpha.15

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.
Files changed (32) hide show
  1. package/index.js +1 -1
  2. package/index.mjs +1 -1
  3. package/package.json +1 -1
  4. package/reactjs/components/BridgeForm/BridgeForm.js +114 -61
  5. package/reactjs/components/BridgeForm/BridgeForm.mjs +114 -61
  6. package/reactjs/components/TokenSelector/TokenSelector.d.ts +2 -1
  7. package/reactjs/components/TokenSelector/TokenSelector.js +12 -9
  8. package/reactjs/components/TokenSelector/TokenSelector.mjs +12 -9
  9. package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.d.ts +2 -1
  10. package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.js +4 -0
  11. package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.mjs +4 -0
  12. package/reactjs/components/TokenSelector/components/SelectContent.d.ts +2 -1
  13. package/reactjs/components/TokenSelector/components/SelectContent.js +4 -1
  14. package/reactjs/components/TokenSelector/components/SelectContent.mjs +4 -1
  15. package/reactjs/components/TokenSelector/components/TokenItem.js +0 -5
  16. package/reactjs/components/TokenSelector/components/TokenItem.mjs +0 -5
  17. package/reactjs/hooks/index.js +1 -1
  18. package/reactjs/hooks/index.mjs +1 -1
  19. package/reactjs/hooks/useBalances.js +2 -1
  20. package/reactjs/hooks/useBalances.mjs +2 -1
  21. package/reactjs/hooks/useSignTransaction.d.ts +80 -67
  22. package/reactjs/hooks/useSignTransaction.js +40 -4
  23. package/reactjs/hooks/useSignTransaction.mjs +40 -4
  24. package/reactjs/index.js +1 -1
  25. package/reactjs/index.mjs +1 -1
  26. package/reactjs/init/init.js +0 -10
  27. package/reactjs/init/init.mjs +0 -10
  28. package/reactjs/queries/useGetEvmTokensBalances.query.js +3 -1
  29. package/reactjs/queries/useGetEvmTokensBalances.query.mjs +3 -1
  30. package/types/transaction.d.ts +19 -0
  31. package/{useBalances-MNOkt0CT.mjs → useBalances-CvRCOieR.mjs} +1 -2
  32. package/{useBalances-QuJwkRzs.js → useBalances-Ds5d90Cc.js} +1 -2
package/index.js CHANGED
@@ -53,7 +53,7 @@ const reactjs_hooks_validation_useSecondAmountSchema = require("./reactjs/hooks/
53
53
  const reactjs_hooks_validation_useTestHasEnoughFunds = require("./reactjs/hooks/validation/useTestHasEnoughFunds.js");
54
54
  const reactjs_hooks_validation_useTestIsConnected = require("./reactjs/hooks/validation/useTestIsConnected.js");
55
55
  const reactjs_hooks_useAccount = require("./reactjs/hooks/useAccount.js");
56
- const reactjs_hooks_useBalances = require("./useBalances-QuJwkRzs.js");
56
+ const reactjs_hooks_useBalances = require("./useBalances-Ds5d90Cc.js");
57
57
  const reactjs_hooks_useBridgeFormik = require("./reactjs/hooks/useBridgeFormik.js");
58
58
  const reactjs_hooks_useDebounce = require("./reactjs/hooks/useDebounce.js");
59
59
  const reactjs_hooks_useFetchBridgeData = require("./reactjs/hooks/useFetchBridgeData.js");
package/index.mjs CHANGED
@@ -50,7 +50,7 @@ import { useSecondAmountSchema } from "./reactjs/hooks/validation/useSecondAmoun
50
50
  import { useTestHasEnoughFunds } from "./reactjs/hooks/validation/useTestHasEnoughFunds.mjs";
51
51
  import { useTestIsConnected } from "./reactjs/hooks/validation/useTestIsConnected.mjs";
52
52
  import { useAccount } from "./reactjs/hooks/useAccount.mjs";
53
- import { u } from "./useBalances-MNOkt0CT.mjs";
53
+ import { u } from "./useBalances-CvRCOieR.mjs";
54
54
  import { BridgeFormikValuesEnum, useBridgeFormik } from "./reactjs/hooks/useBridgeFormik.mjs";
55
55
  import { useDebounce } from "./reactjs/hooks/useDebounce.mjs";
56
56
  import { useFetchBridgeData } from "./reactjs/hooks/useFetchBridgeData.mjs";
package/package.json CHANGED
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "homepage": "https://github.com/multiversx/mx-sdk-dapp-liquidity#readme",
30
30
  "license": "MIT",
31
- "version": "1.1.0-alpha.13",
31
+ "version": "1.1.0-alpha.15",
32
32
  "main": "index.js",
33
33
  "module": "index.mjs",
34
34
  "types": "index.d.ts",
@@ -9,6 +9,7 @@ const debounce = require("lodash/debounce");
9
9
  const React = require("react");
10
10
  const reactToastify = require("react-toastify");
11
11
  const helpers_getApiURL = require("../../../helpers/getApiURL.js");
12
+ const types_chainType = require("../../../types/chainType.js");
12
13
  const reactjs_constants_index = require("../../constants/index.js");
13
14
  const reactjs_context_useWeb3App = require("../../context/useWeb3App.js");
14
15
  const reactjs_hooks_useAccount = require("../../hooks/useAccount.js");
@@ -43,7 +44,7 @@ const reactjs_components_Connect_MvxAccountDisplay = require("../Connect/MvxAcco
43
44
  const reactjs_components_TokenSelector_TokenSelector = require("../TokenSelector/TokenSelector.js");
44
45
  const viem = require("viem");
45
46
  const actions = require("viem/actions");
46
- const reactjs_hooks_useBalances = require("../../../useBalances-QuJwkRzs.js");
47
+ const reactjs_hooks_useBalances = require("../../../useBalances-Ds5d90Cc.js");
47
48
  function deepEqual(a, b) {
48
49
  if (a === b)
49
50
  return true;
@@ -163,7 +164,7 @@ const BridgeForm = ({
163
164
  (chain) => chain.chainId.toString() === mvxChainId.toString()
164
165
  );
165
166
  }, [chainId, chains]);
166
- const { signTransaction } = reactjs_hooks_useSignTransaction.useSignTransaction();
167
+ const { evm, solana } = reactjs_hooks_useSignTransaction.useSignTransaction();
167
168
  const sendTransactions = reactjs_hooks_useSendTransactions.useSendTransactions();
168
169
  const {
169
170
  mutate: getRate,
@@ -188,15 +189,30 @@ const BridgeForm = ({
188
189
  })) ?? [],
189
190
  [evmTokensWithBalances]
190
191
  );
192
+ const availableTokens = React.useMemo(() => {
193
+ if (!(firstToken == null ? void 0 : firstToken.availableTokens)) {
194
+ return [];
195
+ }
196
+ const foundTokens = [];
197
+ for (const availableToken of firstToken.availableTokens) {
198
+ const foundToken = mvxTokensWithBalances == null ? void 0 : mvxTokensWithBalances.find(
199
+ (mvxToken) => mvxToken.address === availableToken.address
200
+ );
201
+ if (foundToken) {
202
+ foundTokens.push(foundToken);
203
+ }
204
+ }
205
+ return foundTokens;
206
+ }, [mvxTokensWithBalances, firstToken == null ? void 0 : firstToken.availableTokens]);
191
207
  const toOptions = React.useMemo(
192
- () => (mvxTokensWithBalances && mvxTokensWithBalances.map((token) => {
208
+ () => (availableTokens && availableTokens.map((token) => {
193
209
  return {
194
210
  ...token,
195
211
  identifier: token.address,
196
212
  ticker: token.symbol
197
213
  };
198
214
  })) ?? [],
199
- [mvxTokensWithBalances]
215
+ [availableTokens]
200
216
  );
201
217
  const selectedChainOption = React.useMemo(
202
218
  () => (chains == null ? void 0 : chains.find(
@@ -204,13 +220,9 @@ const BridgeForm = ({
204
220
  )) ?? (chains == null ? void 0 : chains[0]),
205
221
  [activeChain == null ? void 0 : activeChain.id, chains]
206
222
  );
207
- console.log({
208
- chains,
209
- selectedChainOption
210
- });
211
223
  const defaultReceivingToken = React.useMemo(
212
- () => toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
213
- [toOptions]
224
+ () => (availableTokens == null ? void 0 : availableTokens[0]) ?? toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
225
+ [toOptions, availableTokens]
214
226
  );
215
227
  const hasAmounts = firstAmount !== "" && secondAmount !== "";
216
228
  const fetchRateDebounced = React.useCallback(
@@ -354,15 +366,18 @@ const BridgeForm = ({
354
366
  if (hasOptionsSelected) {
355
367
  return;
356
368
  }
357
- if (!firstOption || !secondOption) {
358
- return;
369
+ if (firstOption) {
370
+ setFirstToken(firstOption);
371
+ updateUrlParams({
372
+ firstTokenId: firstOption == null ? void 0 : firstOption.address
373
+ });
374
+ }
375
+ if (secondOption) {
376
+ setSecondToken(secondOption);
377
+ updateUrlParams({
378
+ secondTokenId: secondOption == null ? void 0 : secondOption.address
379
+ });
359
380
  }
360
- setFirstToken(firstOption);
361
- setSecondToken(secondOption);
362
- updateUrlParams({
363
- firstTokenId: firstOption == null ? void 0 : firstOption.address,
364
- secondTokenId: secondOption == null ? void 0 : secondOption.address
365
- });
366
381
  };
367
382
  const onSubmit = React.useCallback(
368
383
  async ({
@@ -373,51 +388,82 @@ const BridgeForm = ({
373
388
  setPendingSigning(true);
374
389
  setSigningTransactionsCount(() => transactions.length);
375
390
  try {
376
- let txIndex = -1;
377
- for (const transaction of transactions) {
378
- ++txIndex;
379
- try {
380
- const txHash = await signTransaction({
381
- ...transaction,
382
- value: BigInt(transaction.value),
383
- gas: BigInt(transaction.gasLimit),
384
- account: bridgeAddress
385
- });
386
- signedTransactions.push({
387
- ...transaction,
388
- txHash
389
- });
390
- setSigningTransactionsCount(
391
- () => transactions.length - 1 - txIndex
392
- );
393
- if (txIndex === transactions.length - 1) {
394
- continue;
391
+ switch (selectedChainOption == null ? void 0 : selectedChainOption.chainType) {
392
+ case types_chainType.ChainType.sol:
393
+ try {
394
+ for (const transaction of transactions) {
395
+ if (!transaction.instructions || !transaction.feePayer) {
396
+ continue;
397
+ }
398
+ await solana.signTransaction({
399
+ feePayer: transaction.feePayer,
400
+ instructions: transaction.instructions
401
+ });
402
+ }
403
+ setPendingSigning(false);
404
+ } catch (e) {
405
+ reactToastify.toast.dismiss();
406
+ reactToastify.toast.error("Transaction aborted");
407
+ onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
408
+ setPendingSigning(false);
409
+ return;
395
410
  }
396
- const transactionReceipt = await waitForTransactionReceipt(config, {
397
- confirmations: 1,
398
- hash: txHash
399
- });
400
- console.info({
401
- transactionReceipt,
402
- hash: txHash
411
+ break;
412
+ case types_chainType.ChainType.evm:
413
+ let txIndex = -1;
414
+ for (const transaction of transactions) {
415
+ ++txIndex;
416
+ try {
417
+ const txHash = await evm.signTransaction({
418
+ ...transaction,
419
+ value: BigInt(transaction.value),
420
+ gas: BigInt(transaction.gasLimit),
421
+ account: bridgeAddress
422
+ });
423
+ signedTransactions.push({
424
+ ...transaction,
425
+ txHash
426
+ });
427
+ setSigningTransactionsCount(
428
+ () => transactions.length - 1 - txIndex
429
+ );
430
+ if (txIndex === transactions.length - 1) {
431
+ continue;
432
+ }
433
+ const transactionReceipt = await waitForTransactionReceipt(
434
+ config,
435
+ {
436
+ confirmations: 1,
437
+ hash: txHash
438
+ }
439
+ );
440
+ console.info({
441
+ transactionReceipt,
442
+ hash: txHash
443
+ });
444
+ } catch (e) {
445
+ reactToastify.toast.dismiss();
446
+ reactToastify.toast.error("Transaction aborted");
447
+ onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
448
+ setPendingSigning(false);
449
+ return;
450
+ }
451
+ }
452
+ await sendTransactions({
453
+ transactions: signedTransactions,
454
+ provider,
455
+ url: helpers_getApiURL.getApiURL() ?? "",
456
+ token: nativeAuthToken ?? ""
403
457
  });
404
- } catch (e) {
405
- reactToastify.toast.dismiss();
406
- reactToastify.toast.error("Transaction aborted");
407
- onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
458
+ const txHashes = signedTransactions.map((tx) => tx.txHash);
459
+ onSuccess(txHashes);
460
+ setPendingSigning(false);
461
+ break;
462
+ default:
463
+ reactToastify.toast.error("Provider not supported");
408
464
  setPendingSigning(false);
409
465
  return;
410
- }
411
466
  }
412
- await sendTransactions({
413
- transactions: signedTransactions,
414
- provider,
415
- url: helpers_getApiURL.getApiURL() ?? "",
416
- token: nativeAuthToken ?? ""
417
- });
418
- const txHashes = signedTransactions.map((tx) => tx.txHash);
419
- onSuccess(txHashes);
420
- setPendingSigning(false);
421
467
  } catch (e) {
422
468
  console.error(e);
423
469
  reactToastify.toast.dismiss();
@@ -437,7 +483,7 @@ const BridgeForm = ({
437
483
  nativeAuthToken,
438
484
  onSuccess,
439
485
  sendTransactions,
440
- signTransaction
486
+ evm.signTransaction
441
487
  ]
442
488
  );
443
489
  const {
@@ -491,7 +537,12 @@ const BridgeForm = ({
491
537
  setSecondAmount("0");
492
538
  }
493
539
  }, [rateValidationError]);
494
- React.useEffect(setInitialSelectedTokens, [isTokensLoading, chainId]);
540
+ React.useEffect(setInitialSelectedTokens, [
541
+ isTokensLoading,
542
+ fromOptions,
543
+ toOptions,
544
+ chainId
545
+ ]);
495
546
  React.useEffect(() => {
496
547
  const selectedTokenOption = evmTokensWithBalances == null ? void 0 : evmTokensWithBalances.find(
497
548
  (x) => x.address === (firstToken == null ? void 0 : firstToken.address)
@@ -577,6 +628,7 @@ const BridgeForm = ({
577
628
  disabled: isPendingRate,
578
629
  options: fromOptions,
579
630
  areOptionsLoading: isTokensLoading,
631
+ isMvxSelector: false,
580
632
  color: "neutral-850",
581
633
  onChange: onChangeFirstSelect,
582
634
  onBlur: handleBlur,
@@ -631,10 +683,11 @@ const BridgeForm = ({
631
683
  reactjs_components_TokenSelector_TokenSelector.TokenSelector,
632
684
  {
633
685
  name: "secondToken",
634
- disabled: true,
686
+ disabled: isPendingRate,
635
687
  omitDisableClass: true,
636
688
  options: toOptions,
637
689
  areOptionsLoading: isTokensLoading,
690
+ isMvxSelector: true,
638
691
  color: "neutral-850",
639
692
  onChange: onChangeSecondSelect,
640
693
  onBlur: handleBlur,
@@ -6,6 +6,7 @@ import debounce from "lodash/debounce";
6
6
  import { useRef, useState, useMemo, useCallback, useEffect } from "react";
7
7
  import { toast } from "react-toastify";
8
8
  import { getApiURL } from "../../../helpers/getApiURL.mjs";
9
+ import { ChainType } from "../../../types/chainType.mjs";
9
10
  import { safeWindow } from "../../constants/index.mjs";
10
11
  import { useWeb3App } from "../../context/useWeb3App.mjs";
11
12
  import { useAccount } from "../../hooks/useAccount.mjs";
@@ -40,7 +41,7 @@ import { MvxAccountDisplay } from "../Connect/MvxAccountDisplay.mjs";
40
41
  import { TokenSelector } from "../TokenSelector/TokenSelector.mjs";
41
42
  import { hexToString } from "viem";
42
43
  import { waitForTransactionReceipt as waitForTransactionReceipt$1, getTransaction, call } from "viem/actions";
43
- import { g as getAction } from "../../../useBalances-MNOkt0CT.mjs";
44
+ import { g as getAction } from "../../../useBalances-CvRCOieR.mjs";
44
45
  function deepEqual(a, b) {
45
46
  if (a === b)
46
47
  return true;
@@ -160,7 +161,7 @@ const BridgeForm = ({
160
161
  (chain) => chain.chainId.toString() === mvxChainId.toString()
161
162
  );
162
163
  }, [chainId, chains]);
163
- const { signTransaction } = useSignTransaction();
164
+ const { evm, solana } = useSignTransaction();
164
165
  const sendTransactions = useSendTransactions();
165
166
  const {
166
167
  mutate: getRate,
@@ -185,15 +186,30 @@ const BridgeForm = ({
185
186
  })) ?? [],
186
187
  [evmTokensWithBalances]
187
188
  );
189
+ const availableTokens = useMemo(() => {
190
+ if (!(firstToken == null ? void 0 : firstToken.availableTokens)) {
191
+ return [];
192
+ }
193
+ const foundTokens = [];
194
+ for (const availableToken of firstToken.availableTokens) {
195
+ const foundToken = mvxTokensWithBalances == null ? void 0 : mvxTokensWithBalances.find(
196
+ (mvxToken) => mvxToken.address === availableToken.address
197
+ );
198
+ if (foundToken) {
199
+ foundTokens.push(foundToken);
200
+ }
201
+ }
202
+ return foundTokens;
203
+ }, [mvxTokensWithBalances, firstToken == null ? void 0 : firstToken.availableTokens]);
188
204
  const toOptions = useMemo(
189
- () => (mvxTokensWithBalances && mvxTokensWithBalances.map((token) => {
205
+ () => (availableTokens && availableTokens.map((token) => {
190
206
  return {
191
207
  ...token,
192
208
  identifier: token.address,
193
209
  ticker: token.symbol
194
210
  };
195
211
  })) ?? [],
196
- [mvxTokensWithBalances]
212
+ [availableTokens]
197
213
  );
198
214
  const selectedChainOption = useMemo(
199
215
  () => (chains == null ? void 0 : chains.find(
@@ -201,13 +217,9 @@ const BridgeForm = ({
201
217
  )) ?? (chains == null ? void 0 : chains[0]),
202
218
  [activeChain == null ? void 0 : activeChain.id, chains]
203
219
  );
204
- console.log({
205
- chains,
206
- selectedChainOption
207
- });
208
220
  const defaultReceivingToken = useMemo(
209
- () => toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
210
- [toOptions]
221
+ () => (availableTokens == null ? void 0 : availableTokens[0]) ?? toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
222
+ [toOptions, availableTokens]
211
223
  );
212
224
  const hasAmounts = firstAmount !== "" && secondAmount !== "";
213
225
  const fetchRateDebounced = useCallback(
@@ -351,15 +363,18 @@ const BridgeForm = ({
351
363
  if (hasOptionsSelected) {
352
364
  return;
353
365
  }
354
- if (!firstOption || !secondOption) {
355
- return;
366
+ if (firstOption) {
367
+ setFirstToken(firstOption);
368
+ updateUrlParams({
369
+ firstTokenId: firstOption == null ? void 0 : firstOption.address
370
+ });
371
+ }
372
+ if (secondOption) {
373
+ setSecondToken(secondOption);
374
+ updateUrlParams({
375
+ secondTokenId: secondOption == null ? void 0 : secondOption.address
376
+ });
356
377
  }
357
- setFirstToken(firstOption);
358
- setSecondToken(secondOption);
359
- updateUrlParams({
360
- firstTokenId: firstOption == null ? void 0 : firstOption.address,
361
- secondTokenId: secondOption == null ? void 0 : secondOption.address
362
- });
363
378
  };
364
379
  const onSubmit = useCallback(
365
380
  async ({
@@ -370,51 +385,82 @@ const BridgeForm = ({
370
385
  setPendingSigning(true);
371
386
  setSigningTransactionsCount(() => transactions.length);
372
387
  try {
373
- let txIndex = -1;
374
- for (const transaction of transactions) {
375
- ++txIndex;
376
- try {
377
- const txHash = await signTransaction({
378
- ...transaction,
379
- value: BigInt(transaction.value),
380
- gas: BigInt(transaction.gasLimit),
381
- account: bridgeAddress
382
- });
383
- signedTransactions.push({
384
- ...transaction,
385
- txHash
386
- });
387
- setSigningTransactionsCount(
388
- () => transactions.length - 1 - txIndex
389
- );
390
- if (txIndex === transactions.length - 1) {
391
- continue;
388
+ switch (selectedChainOption == null ? void 0 : selectedChainOption.chainType) {
389
+ case ChainType.sol:
390
+ try {
391
+ for (const transaction of transactions) {
392
+ if (!transaction.instructions || !transaction.feePayer) {
393
+ continue;
394
+ }
395
+ await solana.signTransaction({
396
+ feePayer: transaction.feePayer,
397
+ instructions: transaction.instructions
398
+ });
399
+ }
400
+ setPendingSigning(false);
401
+ } catch (e) {
402
+ toast.dismiss();
403
+ toast.error("Transaction aborted");
404
+ onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
405
+ setPendingSigning(false);
406
+ return;
392
407
  }
393
- const transactionReceipt = await waitForTransactionReceipt(config, {
394
- confirmations: 1,
395
- hash: txHash
396
- });
397
- console.info({
398
- transactionReceipt,
399
- hash: txHash
408
+ break;
409
+ case ChainType.evm:
410
+ let txIndex = -1;
411
+ for (const transaction of transactions) {
412
+ ++txIndex;
413
+ try {
414
+ const txHash = await evm.signTransaction({
415
+ ...transaction,
416
+ value: BigInt(transaction.value),
417
+ gas: BigInt(transaction.gasLimit),
418
+ account: bridgeAddress
419
+ });
420
+ signedTransactions.push({
421
+ ...transaction,
422
+ txHash
423
+ });
424
+ setSigningTransactionsCount(
425
+ () => transactions.length - 1 - txIndex
426
+ );
427
+ if (txIndex === transactions.length - 1) {
428
+ continue;
429
+ }
430
+ const transactionReceipt = await waitForTransactionReceipt(
431
+ config,
432
+ {
433
+ confirmations: 1,
434
+ hash: txHash
435
+ }
436
+ );
437
+ console.info({
438
+ transactionReceipt,
439
+ hash: txHash
440
+ });
441
+ } catch (e) {
442
+ toast.dismiss();
443
+ toast.error("Transaction aborted");
444
+ onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
445
+ setPendingSigning(false);
446
+ return;
447
+ }
448
+ }
449
+ await sendTransactions({
450
+ transactions: signedTransactions,
451
+ provider,
452
+ url: getApiURL() ?? "",
453
+ token: nativeAuthToken ?? ""
400
454
  });
401
- } catch (e) {
402
- toast.dismiss();
403
- toast.error("Transaction aborted");
404
- onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
455
+ const txHashes = signedTransactions.map((tx) => tx.txHash);
456
+ onSuccess(txHashes);
457
+ setPendingSigning(false);
458
+ break;
459
+ default:
460
+ toast.error("Provider not supported");
405
461
  setPendingSigning(false);
406
462
  return;
407
- }
408
463
  }
409
- await sendTransactions({
410
- transactions: signedTransactions,
411
- provider,
412
- url: getApiURL() ?? "",
413
- token: nativeAuthToken ?? ""
414
- });
415
- const txHashes = signedTransactions.map((tx) => tx.txHash);
416
- onSuccess(txHashes);
417
- setPendingSigning(false);
418
464
  } catch (e) {
419
465
  console.error(e);
420
466
  toast.dismiss();
@@ -434,7 +480,7 @@ const BridgeForm = ({
434
480
  nativeAuthToken,
435
481
  onSuccess,
436
482
  sendTransactions,
437
- signTransaction
483
+ evm.signTransaction
438
484
  ]
439
485
  );
440
486
  const {
@@ -488,7 +534,12 @@ const BridgeForm = ({
488
534
  setSecondAmount("0");
489
535
  }
490
536
  }, [rateValidationError]);
491
- useEffect(setInitialSelectedTokens, [isTokensLoading, chainId]);
537
+ useEffect(setInitialSelectedTokens, [
538
+ isTokensLoading,
539
+ fromOptions,
540
+ toOptions,
541
+ chainId
542
+ ]);
492
543
  useEffect(() => {
493
544
  const selectedTokenOption = evmTokensWithBalances == null ? void 0 : evmTokensWithBalances.find(
494
545
  (x) => x.address === (firstToken == null ? void 0 : firstToken.address)
@@ -574,6 +625,7 @@ const BridgeForm = ({
574
625
  disabled: isPendingRate,
575
626
  options: fromOptions,
576
627
  areOptionsLoading: isTokensLoading,
628
+ isMvxSelector: false,
577
629
  color: "neutral-850",
578
630
  onChange: onChangeFirstSelect,
579
631
  onBlur: handleBlur,
@@ -628,10 +680,11 @@ const BridgeForm = ({
628
680
  TokenSelector,
629
681
  {
630
682
  name: "secondToken",
631
- disabled: true,
683
+ disabled: isPendingRate,
632
684
  omitDisableClass: true,
633
685
  options: toOptions,
634
686
  areOptionsLoading: isTokensLoading,
687
+ isMvxSelector: true,
635
688
  color: "neutral-850",
636
689
  onChange: onChangeSecondSelect,
637
690
  onBlur: handleBlur,
@@ -1,11 +1,12 @@
1
1
  import { TokenType } from '../../../types/token';
2
2
 
3
- export declare const TokenSelector: ({ name, options, selectedOption, areOptionsLoading, className, disabled, omitDisableClass, color, onBlur, onChange, onMaxBtnClick, onTokenSelectorDisplay }: {
3
+ export declare const TokenSelector: ({ name, options, selectedOption, areOptionsLoading, className, disabled, isMvxSelector, omitDisableClass, color, onBlur, onChange, onMaxBtnClick, onTokenSelectorDisplay }: {
4
4
  name: string;
5
5
  options: TokenType[];
6
6
  selectedOption?: TokenType;
7
7
  areOptionsLoading?: boolean;
8
8
  disabled?: boolean;
9
+ isMvxSelector?: boolean;
9
10
  omitDisableClass?: boolean;
10
11
  className?: string;
11
12
  color?: "neutral-750" | "neutral-850";
@@ -22,6 +22,7 @@ const TokenSelector = ({
22
22
  areOptionsLoading = false,
23
23
  className = "",
24
24
  disabled = false,
25
+ isMvxSelector = false,
25
26
  omitDisableClass = false,
26
27
  color = "neutral-750",
27
28
  onBlur,
@@ -35,15 +36,16 @@ const TokenSelector = ({
35
36
  token: selectedOption
36
37
  });
37
38
  const chains = React.useMemo(() => {
39
+ if (isMvxSelector) {
40
+ return (data == null ? void 0 : data.filter(
41
+ (chain) => constants_index.MVX_CHAIN_IDS.includes(chain.chainId.toString())
42
+ )) ?? [];
43
+ }
38
44
  return (data == null ? void 0 : data.filter(
39
45
  (chain) => !constants_index.MVX_CHAIN_IDS.includes(chain.chainId.toString())
40
46
  )) ?? [];
41
47
  }, [data]);
42
- console.log(`TokenSelector - ${name}`, {
43
- chains,
44
- options,
45
- selectedOption
46
- });
48
+ const isVisuallyDisabled = disabled || chains.length < 2;
47
49
  const handleOnClick = () => setShow(true);
48
50
  React.useEffect(() => {
49
51
  onTokenSelectorDisplay == null ? void 0 : onTokenSelectorDisplay(show);
@@ -77,6 +79,7 @@ const TokenSelector = ({
77
79
  },
78
80
  tokens: options,
79
81
  chains,
82
+ isMvxSelector,
80
83
  areChainsLoading,
81
84
  selectedToken: selectedOption
82
85
  }
@@ -98,19 +101,19 @@ const TokenSelector = ({
98
101
  "liq-bg-neutral-900/50 liq-outline liq-outline-1 liq-outline-neutral-700/20 hover:enabled:liq-bg-neutral-600/50 hover:enabled:liq-outline-neutral-600": color === "neutral-850"
99
102
  },
100
103
  {
101
- "disabled:!liq-opacity-70": disabled && !omitDisableClass
104
+ "disabled:!liq-opacity-70": isVisuallyDisabled && !omitDisableClass
102
105
  },
103
106
  {
104
- "!liq-cursor-not-allowed !liq-bg-transparent !liq-outline-transparent": disabled
107
+ "!liq-cursor-not-allowed !liq-bg-transparent !liq-outline-transparent": isVisuallyDisabled
105
108
  },
106
109
  className
107
110
  ),
108
111
  onBlur,
109
112
  onClick: handleOnClick,
110
- disabled,
113
+ disabled: isVisuallyDisabled,
111
114
  children: [
112
115
  /* @__PURE__ */ jsxRuntime.jsx(reactjs_components_TokenSelector_components_SelectedOption.SelectedOption, { value: selectedOption }),
113
- !disabled && /* @__PURE__ */ jsxRuntime.jsx(
116
+ !isVisuallyDisabled && /* @__PURE__ */ jsxRuntime.jsx(
114
117
  reactFontawesome.FontAwesomeIcon,
115
118
  {
116
119
  icon: faChevronDown.faChevronDown,