@rash2x/bridge-widget 0.7.7 → 0.7.9
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/evaa-bridge.cjs +1 -1
- package/dist/evaa-bridge.mjs +1 -1
- package/dist/{index-x-S2vNi4.cjs → index-CWgNX6rD.cjs} +2 -2
- package/dist/{index-x-S2vNi4.cjs.map → index-CWgNX6rD.cjs.map} +1 -1
- package/dist/{index-D2IOd6mV.js → index-ClSyIB0n.js} +2 -2
- package/dist/{index-D2IOd6mV.js.map → index-ClSyIB0n.js.map} +1 -1
- package/dist/{index-KQ4SsUup.js → index-D7lsGQY9.js} +73 -6
- package/dist/index-D7lsGQY9.js.map +1 -0
- package/dist/{index-DnrWUlYr.cjs → index-Y5S-J1RC.cjs} +246 -163
- package/dist/index-Y5S-J1RC.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/index-DnrWUlYr.cjs.map +0 -1
- package/dist/index-KQ4SsUup.js.map +0 -1
|
@@ -3,7 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
const jsxRuntime = require("react/jsx-runtime");
|
|
6
|
-
const
|
|
6
|
+
const React = require("react");
|
|
7
7
|
const reactI18next = require("react-i18next");
|
|
8
8
|
const i18n = require("i18next");
|
|
9
9
|
const button = require("@/components/ui/button");
|
|
@@ -32,6 +32,23 @@ const tronwalletAdapters = require("@tronweb3/tronwallet-adapters");
|
|
|
32
32
|
const tronweb = require("tronweb");
|
|
33
33
|
const card = require("@/components/ui/card");
|
|
34
34
|
const reactWindow = require("react-window");
|
|
35
|
+
function _interopNamespaceDefault(e2) {
|
|
36
|
+
const n3 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
37
|
+
if (e2) {
|
|
38
|
+
for (const k2 in e2) {
|
|
39
|
+
if (k2 !== "default") {
|
|
40
|
+
const d3 = Object.getOwnPropertyDescriptor(e2, k2);
|
|
41
|
+
Object.defineProperty(n3, k2, d3.get ? d3 : {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: () => e2[k2]
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
n3.default = e2;
|
|
49
|
+
return Object.freeze(n3);
|
|
50
|
+
}
|
|
51
|
+
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
35
52
|
const common$1 = { "connecting": "Connecting…", "initializing": "Initializing...", "loading": "Loading...", "paste": "paste", "close": "Close", "zeroPlaceholder": "0", "nativeToken": "Native Token" };
|
|
36
53
|
const wallets$1 = { "addTonWallet": "Add TON wallet", "addEvmWallet": "Add EVM wallet", "connectTonWallet": "Connect TON wallet", "connectEvmWallet": "Connect EVM wallet", "initializingMetamask": "Initializing MetaMask SDK...", "initializingTronlink": "Initializing TronLink...", "failedToConnectTon": "Failed to connect to TON wallet", "failedToDisconnect": "Failed to disconnect", "metamaskConnectionError": "MetaMask connection error", "failedToConnectMetamask": "Failed to connect to MetaMask", "failedToDisconnectMetamask": "Failed to disconnect from MetaMask", "selectWallet": "Select Wallet", "tonWallets": "TON", "evmWallets": "EVM", "tronWallets": "TRON", "tonconnect": "TonConnect", "metaMask": "WalletConnect", "walletConnect": "WalletConnect", "tronLink": "TronLink", "addTronWallet": "Add Tron wallet", "comingSoon": "Coming Soon", "connected": "CONNECTED", "connectedStatus": "Connected", "disconnect": "Disconnect", "chooseWallet": "Connect wallet", "oneWalletPerEnv": "You can only connect one wallet per environment.", "connect": "Connect", "connectTronWallet": "Connect Tron wallet", "connectWallet": "Connect wallet" };
|
|
37
54
|
const bridge$1 = { "max": "Max", "sourceNetwork": "Source network", "destinationNetwork": "Destination network", "selectToken": "Select token", "selectNetwork": "Select network", "selectSourceNetwork": "Select source network", "selectDestinationNetwork": "Select destination network", "searchToken": "Search token", "myTokens": "My tokens", "allTokens": "All tokens", "search": "Search", "select": "Select", "willChangeSourceChain": "Will change source network", "willChangeDestinationChain": "Will change destination network", "willChangeBothChains": "Will change both networks", "willChangeSourceNetworkAndToken": "Will change source token", "noBalancesFound": "No balances found.", "noResults": "No results", "tokenNotFound": "We couldn't find a token with that name or symbol. Please try again.", "chainNotFound": "We couldn't find a chain with that name. Please try again.", "sendToAnotherAddress": "Send to another address", "youWillReceive": "You will receive", "anotherAddressPlaceholder": "Address", "addressDoesntMatch": "Address doesn't match the {{network}} network", "checkBeforeTransfer": "Check correctness before transfer" };
|
|
@@ -95,7 +112,7 @@ function BridgeI18nProvider({
|
|
|
95
112
|
children,
|
|
96
113
|
defaultLanguage = "en"
|
|
97
114
|
}) {
|
|
98
|
-
|
|
115
|
+
React.useEffect(() => {
|
|
99
116
|
if (bridgeI18n.language !== defaultLanguage) {
|
|
100
117
|
bridgeI18n.changeLanguage(defaultLanguage);
|
|
101
118
|
}
|
|
@@ -507,9 +524,9 @@ const ExitIcon = (props) => {
|
|
|
507
524
|
);
|
|
508
525
|
};
|
|
509
526
|
const SwapButton = ({ canSwap, onSwap }) => {
|
|
510
|
-
const [turns, setTurns] =
|
|
511
|
-
const [isSwapping, setIsSwapping] =
|
|
512
|
-
const handleSwap =
|
|
527
|
+
const [turns, setTurns] = React.useState(0);
|
|
528
|
+
const [isSwapping, setIsSwapping] = React.useState(false);
|
|
529
|
+
const handleSwap = React.useCallback(() => {
|
|
513
530
|
if (!canSwap || isSwapping) return;
|
|
514
531
|
setIsSwapping(true);
|
|
515
532
|
setTurns((t2) => t2 + 1);
|
|
@@ -585,7 +602,7 @@ const SelectNetworkButton = ({
|
|
|
585
602
|
network
|
|
586
603
|
}) => {
|
|
587
604
|
const { t: t2 } = useBridgeTranslation();
|
|
588
|
-
const label =
|
|
605
|
+
const label = React.useMemo(() => {
|
|
589
606
|
return network?.name ?? t2("bridge.selectNetwork");
|
|
590
607
|
}, [network, t2]);
|
|
591
608
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -626,7 +643,7 @@ const normalizeValue = (value, max) => {
|
|
|
626
643
|
}
|
|
627
644
|
return void 0;
|
|
628
645
|
};
|
|
629
|
-
const TokenInput =
|
|
646
|
+
const TokenInput = React.forwardRef(
|
|
630
647
|
({
|
|
631
648
|
value,
|
|
632
649
|
onAmountChange,
|
|
@@ -638,11 +655,11 @@ const TokenInput = react.forwardRef(
|
|
|
638
655
|
error,
|
|
639
656
|
...rest
|
|
640
657
|
}, ref) => {
|
|
641
|
-
const [inputVal, setInputVal] =
|
|
642
|
-
|
|
658
|
+
const [inputVal, setInputVal] = React.useState(value ?? "");
|
|
659
|
+
React.useEffect(() => {
|
|
643
660
|
setInputVal(value ?? "");
|
|
644
661
|
}, [value]);
|
|
645
|
-
const handleChange =
|
|
662
|
+
const handleChange = React.useCallback(
|
|
646
663
|
(event) => {
|
|
647
664
|
const raw = event.target.value;
|
|
648
665
|
const normalized = normalizeValue(raw, max);
|
|
@@ -689,10 +706,10 @@ const TokenInput = react.forwardRef(
|
|
|
689
706
|
);
|
|
690
707
|
TokenInput.displayName = "TokenInput";
|
|
691
708
|
function useModal(initial = false) {
|
|
692
|
-
const [isOpen, setOpen] =
|
|
693
|
-
const onOpen =
|
|
694
|
-
const onClose =
|
|
695
|
-
const toggle =
|
|
709
|
+
const [isOpen, setOpen] = React.useState(initial);
|
|
710
|
+
const onOpen = React.useCallback(() => setOpen(true), []);
|
|
711
|
+
const onClose = React.useCallback(() => setOpen(false), []);
|
|
712
|
+
const toggle = React.useCallback(() => setOpen((v2) => !v2), []);
|
|
696
713
|
return { isOpen, onOpen, onClose, toggle };
|
|
697
714
|
}
|
|
698
715
|
function createJSONStorage(getStorage, options) {
|
|
@@ -1203,14 +1220,14 @@ const ChainSelectModal = ({
|
|
|
1203
1220
|
isSource
|
|
1204
1221
|
}) => {
|
|
1205
1222
|
const { t: t2 } = useBridgeTranslation();
|
|
1206
|
-
const [query, setQuery] =
|
|
1223
|
+
const [query, setQuery] = React.useState("");
|
|
1207
1224
|
const { setFromChain, chains, fromChain, toChain } = useChainsStore();
|
|
1208
1225
|
const { assetMatrix, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
|
|
1209
|
-
const handleClose =
|
|
1226
|
+
const handleClose = React.useCallback(() => {
|
|
1210
1227
|
setQuery("");
|
|
1211
1228
|
onClose();
|
|
1212
1229
|
}, [onClose]);
|
|
1213
|
-
const findCompatibleSrcChain =
|
|
1230
|
+
const findCompatibleSrcChain = React.useCallback(
|
|
1214
1231
|
(dstChain) => {
|
|
1215
1232
|
if (!chains || !selectedAssetSymbol || !assetMatrix) return void 0;
|
|
1216
1233
|
const PRIORITY_CHAINS2 = [
|
|
@@ -1234,7 +1251,7 @@ const ChainSelectModal = ({
|
|
|
1234
1251
|
},
|
|
1235
1252
|
[chains, selectedAssetSymbol, assetMatrix, fromChain?.chainKey]
|
|
1236
1253
|
);
|
|
1237
|
-
const findCompatibleTokenAndSrcChain =
|
|
1254
|
+
const findCompatibleTokenAndSrcChain = React.useCallback(
|
|
1238
1255
|
(dstChain) => {
|
|
1239
1256
|
if (!chains || !assetMatrix) return void 0;
|
|
1240
1257
|
const PRIORITY_CHAINS2 = [
|
|
@@ -1264,7 +1281,7 @@ const ChainSelectModal = ({
|
|
|
1264
1281
|
},
|
|
1265
1282
|
[chains, assetMatrix, fromChain?.chainKey]
|
|
1266
1283
|
);
|
|
1267
|
-
const groupedChains =
|
|
1284
|
+
const groupedChains = React.useMemo(() => {
|
|
1268
1285
|
const q3 = query.trim().toLowerCase();
|
|
1269
1286
|
const isAllowed = isSource ? isAllowedFromChain : isAllowedToChain;
|
|
1270
1287
|
const filtered = (items ?? []).filter((c2) => isAllowed(c2.chainKey)).filter(
|
|
@@ -1303,12 +1320,12 @@ const ChainSelectModal = ({
|
|
|
1303
1320
|
findCompatibleTokenAndSrcChain,
|
|
1304
1321
|
isSource
|
|
1305
1322
|
]);
|
|
1306
|
-
const PRIORITY_CHAINS =
|
|
1323
|
+
const PRIORITY_CHAINS = React.useMemo(
|
|
1307
1324
|
() => ["ethereum", "arbitrum", "bsc", "polygon", "optimism", "base"],
|
|
1308
1325
|
[]
|
|
1309
1326
|
);
|
|
1310
|
-
const [isPickLoading, setIsPickLoading] =
|
|
1311
|
-
const onChainPick =
|
|
1327
|
+
const [isPickLoading, setIsPickLoading] = React.useState(false);
|
|
1328
|
+
const onChainPick = React.useCallback(
|
|
1312
1329
|
async (chain2, willChangeSrc = false, willChangeTokenAndSrc = false) => {
|
|
1313
1330
|
if (!willChangeSrc && !willChangeTokenAndSrc) {
|
|
1314
1331
|
onChangeChain(chain2);
|
|
@@ -1456,9 +1473,9 @@ const ChainSelectModal = ({
|
|
|
1456
1473
|
] })
|
|
1457
1474
|
] }) });
|
|
1458
1475
|
};
|
|
1459
|
-
const ChainStrategyContext =
|
|
1476
|
+
const ChainStrategyContext = React.createContext(void 0);
|
|
1460
1477
|
function useChainStrategies() {
|
|
1461
|
-
const context =
|
|
1478
|
+
const context = React.useContext(ChainStrategyContext);
|
|
1462
1479
|
if (!context) {
|
|
1463
1480
|
throw new Error(
|
|
1464
1481
|
"useChainStrategies must be used within ChainStrategyProvider"
|
|
@@ -1606,12 +1623,12 @@ const WalletInlineButton = ({
|
|
|
1606
1623
|
const account = connection?.getAccount();
|
|
1607
1624
|
const isConnected = connection?.isConnected();
|
|
1608
1625
|
const error = connection?.getError();
|
|
1609
|
-
const availableConnections =
|
|
1626
|
+
const availableConnections = React.useMemo(
|
|
1610
1627
|
() => connection?.getAvailableConnections() ?? [],
|
|
1611
1628
|
[connection]
|
|
1612
1629
|
);
|
|
1613
1630
|
const evmConnectorId = connectedEvmConnector?.id;
|
|
1614
|
-
const activeTronConnection =
|
|
1631
|
+
const activeTronConnection = React.useMemo(() => {
|
|
1615
1632
|
if (walletType !== "tron") return null;
|
|
1616
1633
|
const tronWalletConnect = availableConnections.find(
|
|
1617
1634
|
(conn) => conn.provider === "walletconnect" && conn.connected && !!conn.address
|
|
@@ -1623,16 +1640,16 @@ const WalletInlineButton = ({
|
|
|
1623
1640
|
if (tronLink) return tronLink;
|
|
1624
1641
|
return null;
|
|
1625
1642
|
}, [availableConnections, walletType]);
|
|
1626
|
-
const handleClick =
|
|
1643
|
+
const handleClick = React.useCallback(() => {
|
|
1627
1644
|
onOpen(addressType);
|
|
1628
1645
|
}, [onOpen, addressType]);
|
|
1629
|
-
const buttonText =
|
|
1646
|
+
const buttonText = React.useMemo(() => {
|
|
1630
1647
|
if (isConnected && account) return formatAddress(account);
|
|
1631
1648
|
if (wallet === "ton") return t2("wallets.addTonWallet");
|
|
1632
1649
|
if (wallet === "tronlink") return t2("wallets.addTronWallet");
|
|
1633
1650
|
return t2("wallets.addEvmWallet");
|
|
1634
1651
|
}, [wallet, isConnected, account, t2]);
|
|
1635
|
-
const connectedIcon =
|
|
1652
|
+
const connectedIcon = React.useMemo(() => {
|
|
1636
1653
|
if (!isConnected) return null;
|
|
1637
1654
|
if (walletType === "tron" && activeTronConnection) {
|
|
1638
1655
|
return activeTronConnection.provider === "walletconnect" ? prefixIcons.walletconnect : prefixIcons.tronlink;
|
|
@@ -1737,8 +1754,8 @@ const SwapSection = ({
|
|
|
1737
1754
|
const { assetMatrix, selectedAssetSymbol } = useTokensStore();
|
|
1738
1755
|
const { status } = useBridgeQuoteStore();
|
|
1739
1756
|
const { t: t2 } = useBridgeTranslation();
|
|
1740
|
-
const [isFocused, setIsFocused] =
|
|
1741
|
-
const tokenOnThisChain =
|
|
1757
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
1758
|
+
const tokenOnThisChain = React.useMemo(
|
|
1742
1759
|
() => resolveTokenOnChainFromMatrix$2(
|
|
1743
1760
|
assetMatrix,
|
|
1744
1761
|
selectedAssetSymbol,
|
|
@@ -1747,25 +1764,25 @@ const SwapSection = ({
|
|
|
1747
1764
|
[assetMatrix, selectedAssetSymbol, chain2?.chainKey]
|
|
1748
1765
|
);
|
|
1749
1766
|
const priceUsd = tokenOnThisChain?.price?.usd ?? pickAnyPriceUsd(assetMatrix, selectedAssetSymbol);
|
|
1750
|
-
const computedFiat =
|
|
1767
|
+
const computedFiat = React.useMemo(() => {
|
|
1751
1768
|
const amt = parseFloat(amount || "");
|
|
1752
1769
|
if (Number.isNaN(amt) || !priceUsd) return "$0";
|
|
1753
1770
|
return formatUsd(amt * priceUsd);
|
|
1754
1771
|
}, [amount, priceUsd]);
|
|
1755
1772
|
const isUsdLoading = Boolean(amount && parseFloat(amount) > 0 && !priceUsd);
|
|
1756
|
-
const onChangeChain =
|
|
1773
|
+
const onChangeChain = React.useCallback(
|
|
1757
1774
|
(c2) => {
|
|
1758
1775
|
onSelect?.(c2);
|
|
1759
1776
|
onClose();
|
|
1760
1777
|
},
|
|
1761
1778
|
[onSelect, onClose]
|
|
1762
1779
|
);
|
|
1763
|
-
const handleMaxClick =
|
|
1780
|
+
const handleMaxClick = React.useCallback(() => {
|
|
1764
1781
|
if (balance.balance && onAmountChange) {
|
|
1765
1782
|
onAmountChange(balance.balance.toString());
|
|
1766
1783
|
}
|
|
1767
1784
|
}, [balance.balance, onAmountChange]);
|
|
1768
|
-
const isInsufficientBalance =
|
|
1785
|
+
const isInsufficientBalance = React.useMemo(() => {
|
|
1769
1786
|
return !!(isSource && amount && balance.balance && parseFloat(amount) > balance.balance);
|
|
1770
1787
|
}, [amount, balance.balance, isSource]);
|
|
1771
1788
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -1802,7 +1819,7 @@ const SwapSection = ({
|
|
|
1802
1819
|
TokenInput,
|
|
1803
1820
|
{
|
|
1804
1821
|
value: amount,
|
|
1805
|
-
onAmountChange:
|
|
1822
|
+
onAmountChange: React.useCallback(
|
|
1806
1823
|
(v2) => onAmountChange?.(v2),
|
|
1807
1824
|
[onAmountChange]
|
|
1808
1825
|
),
|
|
@@ -1878,13 +1895,13 @@ function isAddressValidForChain(chainKey, addr, chainType) {
|
|
|
1878
1895
|
return addr.trim().length > 0;
|
|
1879
1896
|
}
|
|
1880
1897
|
const useIsAddressValid = (address, chainKey, chainType) => {
|
|
1881
|
-
const isValid =
|
|
1898
|
+
const isValid = React.useMemo(() => {
|
|
1882
1899
|
return isAddressValidForChain(chainKey, address, chainType);
|
|
1883
1900
|
}, [address, chainKey, chainType]);
|
|
1884
1901
|
return { isValid };
|
|
1885
1902
|
};
|
|
1886
1903
|
const AnotherAddress = () => {
|
|
1887
|
-
const [isFocused, setIsFocused] =
|
|
1904
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
1888
1905
|
const { t: t2 } = useBridgeTranslation();
|
|
1889
1906
|
const { toChain } = useChainsStore();
|
|
1890
1907
|
const setCustomDstAddress = useCustomAddressStore(
|
|
@@ -1895,11 +1912,11 @@ const AnotherAddress = () => {
|
|
|
1895
1912
|
const customDstAddress = useCustomAddressStore(
|
|
1896
1913
|
(state2) => state2.customDstAddress
|
|
1897
1914
|
);
|
|
1898
|
-
const [value, setValue] =
|
|
1899
|
-
const trimmed =
|
|
1915
|
+
const [value, setValue] = React.useState("");
|
|
1916
|
+
const trimmed = React.useMemo(() => value.trim(), [value]);
|
|
1900
1917
|
const { isValid } = useIsAddressValid(trimmed, toChain?.chainKey, toChain?.chainType);
|
|
1901
1918
|
const invalid = trimmed && !isValid;
|
|
1902
|
-
|
|
1919
|
+
React.useEffect(() => {
|
|
1903
1920
|
if (!isEnabled2) {
|
|
1904
1921
|
if (customDstAddress !== void 0) {
|
|
1905
1922
|
setCustomDstAddress(void 0);
|
|
@@ -2056,7 +2073,7 @@ function useAddresses() {
|
|
|
2056
2073
|
(state2) => state2.address
|
|
2057
2074
|
);
|
|
2058
2075
|
const tronAddress = tronLinkAddress || tronWalletConnectAddress || void 0;
|
|
2059
|
-
const srcAddress =
|
|
2076
|
+
const srcAddress = React.useMemo(() => {
|
|
2060
2077
|
if (!fromChain?.chainKey) return void 0;
|
|
2061
2078
|
const chainKey = fromChain.chainKey.toLowerCase();
|
|
2062
2079
|
if (chainKey === "ton") {
|
|
@@ -2067,7 +2084,7 @@ function useAddresses() {
|
|
|
2067
2084
|
}
|
|
2068
2085
|
return evmAddress || void 0;
|
|
2069
2086
|
}, [fromChain?.chainKey, evmAddress, tonAddress, tronAddress]);
|
|
2070
|
-
const dstAddress =
|
|
2087
|
+
const dstAddress = React.useMemo(() => {
|
|
2071
2088
|
if (!toChain?.chainKey) return void 0;
|
|
2072
2089
|
if (isCustomAddressEnabled) {
|
|
2073
2090
|
return customDstAddress;
|
|
@@ -2586,7 +2603,7 @@ function useBridgeQuote() {
|
|
|
2586
2603
|
const { chainRegistry } = useChainStrategies();
|
|
2587
2604
|
const publicClient = wagmi.usePublicClient();
|
|
2588
2605
|
const input2 = inputAmount;
|
|
2589
|
-
const srcTokenOnFrom =
|
|
2606
|
+
const srcTokenOnFrom = React.useMemo(
|
|
2590
2607
|
() => resolveTokenOnChainFromMatrix$1(
|
|
2591
2608
|
assetMatrix,
|
|
2592
2609
|
selectedAssetSymbol,
|
|
@@ -2594,7 +2611,7 @@ function useBridgeQuote() {
|
|
|
2594
2611
|
),
|
|
2595
2612
|
[assetMatrix, selectedAssetSymbol, fromChain?.chainKey]
|
|
2596
2613
|
);
|
|
2597
|
-
const dstTokenOnTo =
|
|
2614
|
+
const dstTokenOnTo = React.useMemo(
|
|
2598
2615
|
() => resolveTokenOnChainFromMatrix$1(
|
|
2599
2616
|
assetMatrix,
|
|
2600
2617
|
selectedAssetSymbol,
|
|
@@ -2602,14 +2619,14 @@ function useBridgeQuote() {
|
|
|
2602
2619
|
),
|
|
2603
2620
|
[assetMatrix, selectedAssetSymbol, toChain?.chainKey]
|
|
2604
2621
|
);
|
|
2605
|
-
const [loading, setLoading] =
|
|
2606
|
-
|
|
2622
|
+
const [loading, setLoading] = React.useState(false);
|
|
2623
|
+
React.useEffect(() => {
|
|
2607
2624
|
if (!input2 || input2 === "") {
|
|
2608
2625
|
setLoading(false);
|
|
2609
2626
|
resetWithIdle();
|
|
2610
2627
|
}
|
|
2611
2628
|
}, [input2, resetWithIdle]);
|
|
2612
|
-
|
|
2629
|
+
React.useEffect(() => {
|
|
2613
2630
|
const resetUi = (withError) => {
|
|
2614
2631
|
setLoading(false);
|
|
2615
2632
|
{
|
|
@@ -2741,7 +2758,7 @@ const useChainDerivations = () => {
|
|
|
2741
2758
|
setIsLoadingToChains,
|
|
2742
2759
|
isUrlInitialized
|
|
2743
2760
|
} = useChainsStore();
|
|
2744
|
-
const supportedFrom =
|
|
2761
|
+
const supportedFrom = React.useMemo(() => {
|
|
2745
2762
|
if (typeof selectedAssetSymbol !== "string" || !assetMatrix || !chains?.length)
|
|
2746
2763
|
return [];
|
|
2747
2764
|
const byChain = assetMatrix[selectedAssetSymbol.toUpperCase()];
|
|
@@ -2749,7 +2766,7 @@ const useChainDerivations = () => {
|
|
|
2749
2766
|
const result = chains.filter((c2) => keys2.has(c2.chainKey) && isAllowedFromChain(c2.chainKey));
|
|
2750
2767
|
return result;
|
|
2751
2768
|
}, [selectedAssetSymbol, assetMatrix, chains]);
|
|
2752
|
-
|
|
2769
|
+
React.useEffect(() => {
|
|
2753
2770
|
setAllowedFromChains(supportedFrom);
|
|
2754
2771
|
if (!isUrlInitialized) {
|
|
2755
2772
|
return;
|
|
@@ -2780,7 +2797,7 @@ const useChainDerivations = () => {
|
|
|
2780
2797
|
setAllowedToChains,
|
|
2781
2798
|
isUrlInitialized
|
|
2782
2799
|
]);
|
|
2783
|
-
|
|
2800
|
+
React.useEffect(() => {
|
|
2784
2801
|
let ignore = false;
|
|
2785
2802
|
const run = async () => {
|
|
2786
2803
|
if (!selectedAssetSymbol || !fromChain?.chainKey || !chains?.length) {
|
|
@@ -2860,7 +2877,7 @@ function isBalanceDebugEnabled() {
|
|
|
2860
2877
|
function useBalances(chainKey, address) {
|
|
2861
2878
|
const { chainRegistry } = useChainStrategies();
|
|
2862
2879
|
const { assetMatrix } = useTokensStore();
|
|
2863
|
-
const tokensOnChain =
|
|
2880
|
+
const tokensOnChain = React.useMemo(() => {
|
|
2864
2881
|
if (!chainKey || !assetMatrix) return [];
|
|
2865
2882
|
const tokensList = [];
|
|
2866
2883
|
for (const [, byChain] of Object.entries(assetMatrix)) {
|
|
@@ -2906,7 +2923,7 @@ function useBalances(chainKey, address) {
|
|
|
2906
2923
|
refetchInterval: 6e4,
|
|
2907
2924
|
refetchIntervalInBackground: false
|
|
2908
2925
|
});
|
|
2909
|
-
const balanceBySymbol =
|
|
2926
|
+
const balanceBySymbol = React.useMemo(() => {
|
|
2910
2927
|
const map = /* @__PURE__ */ new Map();
|
|
2911
2928
|
const data = query.data;
|
|
2912
2929
|
if (data) {
|
|
@@ -2916,12 +2933,12 @@ function useBalances(chainKey, address) {
|
|
|
2916
2933
|
}
|
|
2917
2934
|
return map;
|
|
2918
2935
|
}, [query.data]);
|
|
2919
|
-
const getBalance =
|
|
2936
|
+
const getBalance = React.useCallback(
|
|
2920
2937
|
(symbol) => balanceBySymbol.get(normalizeTickerSymbol$1(symbol)) ?? 0,
|
|
2921
2938
|
[balanceBySymbol]
|
|
2922
2939
|
);
|
|
2923
2940
|
const isLoading = query.isLoading || query.isFetching;
|
|
2924
|
-
const balances =
|
|
2941
|
+
const balances = React.useMemo(() => query.data || {}, [query.data]);
|
|
2925
2942
|
return {
|
|
2926
2943
|
balances,
|
|
2927
2944
|
getBalance,
|
|
@@ -2944,21 +2961,21 @@ function useSwapModel() {
|
|
|
2944
2961
|
);
|
|
2945
2962
|
const { loading } = useBridgeQuote();
|
|
2946
2963
|
const { inputAmount, setInputAmount, resetWithIdle } = useBridgeQuoteStore();
|
|
2947
|
-
const fromBalance =
|
|
2964
|
+
const fromBalance = React.useMemo(
|
|
2948
2965
|
() => ({
|
|
2949
2966
|
balance: srcBalances.getBalance(tokensStore.selectedAssetSymbol || ""),
|
|
2950
2967
|
isLoading: srcBalances.isLoading
|
|
2951
2968
|
}),
|
|
2952
2969
|
[srcBalances, tokensStore.selectedAssetSymbol]
|
|
2953
2970
|
);
|
|
2954
|
-
const receiveBalance =
|
|
2971
|
+
const receiveBalance = React.useMemo(
|
|
2955
2972
|
() => ({
|
|
2956
2973
|
balance: dstBalances.getBalance(tokensStore.selectedAssetSymbol || ""),
|
|
2957
2974
|
isLoading: dstBalances.isLoading
|
|
2958
2975
|
}),
|
|
2959
2976
|
[dstBalances, tokensStore.selectedAssetSymbol]
|
|
2960
2977
|
);
|
|
2961
|
-
const state2 =
|
|
2978
|
+
const state2 = React.useMemo(
|
|
2962
2979
|
() => ({
|
|
2963
2980
|
fromChain: chainsStore.fromChain,
|
|
2964
2981
|
toChain: chainsStore.toChain,
|
|
@@ -2974,7 +2991,7 @@ function useSwapModel() {
|
|
|
2974
2991
|
setFromChain: chainsStore.setFromChain,
|
|
2975
2992
|
setToChain: chainsStore.setToChain,
|
|
2976
2993
|
setAmount: setInputAmount,
|
|
2977
|
-
swapSides:
|
|
2994
|
+
swapSides: React.useCallback(() => {
|
|
2978
2995
|
const fromChain = chainsStore.fromChain;
|
|
2979
2996
|
const toChain = chainsStore.toChain;
|
|
2980
2997
|
const sym = (tokensStore.selectedAssetSymbol ?? "").toUpperCase();
|
|
@@ -3025,11 +3042,54 @@ const InfoIcon = (props) => {
|
|
|
3025
3042
|
}
|
|
3026
3043
|
);
|
|
3027
3044
|
};
|
|
3045
|
+
const MOBILE_BREAKPOINT = 768;
|
|
3046
|
+
function useIsMobile() {
|
|
3047
|
+
const [isMobile2, setIsMobile] = React__namespace.useState(
|
|
3048
|
+
void 0
|
|
3049
|
+
);
|
|
3050
|
+
React__namespace.useEffect(() => {
|
|
3051
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
3052
|
+
const onChange = () => {
|
|
3053
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
3054
|
+
};
|
|
3055
|
+
mql.addEventListener("change", onChange);
|
|
3056
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
3057
|
+
return () => mql.removeEventListener("change", onChange);
|
|
3058
|
+
}, []);
|
|
3059
|
+
return !!isMobile2;
|
|
3060
|
+
}
|
|
3028
3061
|
const Tip = (props) => {
|
|
3029
3062
|
const { children, text } = props;
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3063
|
+
const [open, setOpen] = React.useState(false);
|
|
3064
|
+
const isMobile2 = useIsMobile();
|
|
3065
|
+
const tooltipRef = React.useRef(null);
|
|
3066
|
+
const handleToggle = () => {
|
|
3067
|
+
setOpen((prev) => !prev);
|
|
3068
|
+
};
|
|
3069
|
+
React.useEffect(() => {
|
|
3070
|
+
const handleClickOutside = (event) => {
|
|
3071
|
+
if (tooltipRef.current && !tooltipRef.current.contains(event.target)) {
|
|
3072
|
+
setOpen(false);
|
|
3073
|
+
}
|
|
3074
|
+
};
|
|
3075
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
3076
|
+
return () => {
|
|
3077
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
3078
|
+
};
|
|
3079
|
+
}, []);
|
|
3080
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { open: isMobile2 ? open : void 0, children: [
|
|
3081
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3082
|
+
tooltip.TooltipTrigger,
|
|
3083
|
+
{
|
|
3084
|
+
onClick: (e2) => {
|
|
3085
|
+
e2.preventDefault();
|
|
3086
|
+
handleToggle();
|
|
3087
|
+
},
|
|
3088
|
+
className: "w-4 h-4 rounded-full bg-muted text-muted-foreground",
|
|
3089
|
+
children
|
|
3090
|
+
}
|
|
3091
|
+
),
|
|
3092
|
+
/* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { ref: tooltipRef, children: text })
|
|
3033
3093
|
] });
|
|
3034
3094
|
};
|
|
3035
3095
|
const BASE_URL = "https://icons-ckg.pages.dev/stargate-light/tokens";
|
|
@@ -3046,7 +3106,7 @@ function useFeeBreakdown() {
|
|
|
3046
3106
|
const { quote } = useBridgeQuoteStore();
|
|
3047
3107
|
const { tokens, allTokens, selectedAssetSymbol, assetMatrix } = useTokensStore();
|
|
3048
3108
|
const { fromChain, toChain, chains } = useChainsStore();
|
|
3049
|
-
return
|
|
3109
|
+
return React.useMemo(() => {
|
|
3050
3110
|
const srcToken = resolveTokenOnChainFromMatrix$1(
|
|
3051
3111
|
assetMatrix,
|
|
3052
3112
|
selectedAssetSymbol,
|
|
@@ -3073,7 +3133,7 @@ function useBridgeExternalData(options) {
|
|
|
3073
3133
|
const inputAmount = useBridgeQuoteStore((state2) => state2.inputAmount);
|
|
3074
3134
|
const quote = useBridgeQuoteStore((state2) => state2.quote);
|
|
3075
3135
|
const slippageBps = useSettingsStore((state2) => state2.slippageBps);
|
|
3076
|
-
const data =
|
|
3136
|
+
const data = React.useMemo(
|
|
3077
3137
|
() => buildBridgeExternalData({
|
|
3078
3138
|
amount: inputAmount,
|
|
3079
3139
|
selectedAssetSymbol,
|
|
@@ -3098,8 +3158,8 @@ function useBridgeExternalData(options) {
|
|
|
3098
3158
|
slippageBps
|
|
3099
3159
|
]
|
|
3100
3160
|
);
|
|
3101
|
-
const lastSerializedRef =
|
|
3102
|
-
|
|
3161
|
+
const lastSerializedRef = React.useRef(void 0);
|
|
3162
|
+
React.useEffect(() => {
|
|
3103
3163
|
const callback = options?.onDataUpdate;
|
|
3104
3164
|
if (!callback) return;
|
|
3105
3165
|
const serialized = serializeBridgeDataForCache(data);
|
|
@@ -3683,7 +3743,7 @@ function useGasEstimate(amountNum) {
|
|
|
3683
3743
|
const quoteFees = quote?.fees;
|
|
3684
3744
|
const quoteSrcChainKey = quote?.srcChainKey;
|
|
3685
3745
|
const nativeBalanceValue = nativeCurrencySymbol ? Number(balances[nativeCurrencySymbol.toUpperCase()]?.balance ?? 0) : 0;
|
|
3686
|
-
const result =
|
|
3746
|
+
const result = React.useMemo(() => {
|
|
3687
3747
|
if (!chainKey || !nativeCurrencySymbol) {
|
|
3688
3748
|
return {
|
|
3689
3749
|
nativeSym: "",
|
|
@@ -3761,7 +3821,7 @@ function useBridgeTransaction() {
|
|
|
3761
3821
|
const { chains } = useChainsStore();
|
|
3762
3822
|
const txStore = useTransactionStore();
|
|
3763
3823
|
const gas = useGasEstimate();
|
|
3764
|
-
const srcToken =
|
|
3824
|
+
const srcToken = React.useMemo(
|
|
3765
3825
|
() => resolveTokenOnChainFromMatrix$1(
|
|
3766
3826
|
assetMatrix,
|
|
3767
3827
|
selectedAssetSymbol,
|
|
@@ -3769,7 +3829,7 @@ function useBridgeTransaction() {
|
|
|
3769
3829
|
),
|
|
3770
3830
|
[assetMatrix, selectedAssetSymbol, quote?.srcChainKey]
|
|
3771
3831
|
);
|
|
3772
|
-
const dstToken =
|
|
3832
|
+
const dstToken = React.useMemo(
|
|
3773
3833
|
() => resolveTokenOnChainFromMatrix$1(
|
|
3774
3834
|
assetMatrix,
|
|
3775
3835
|
selectedAssetSymbol,
|
|
@@ -3983,7 +4043,7 @@ function useBalanceCheck(amountNum, gas) {
|
|
|
3983
4043
|
const { selectedAssetSymbol } = useTokensStore();
|
|
3984
4044
|
const { srcAddress } = useAddresses();
|
|
3985
4045
|
const { getBalance } = useBalances(fromChain?.chainKey, srcAddress);
|
|
3986
|
-
const validationResult =
|
|
4046
|
+
const validationResult = React.useMemo(() => {
|
|
3987
4047
|
if (!fromChain || !gas.balancesKnown) {
|
|
3988
4048
|
return {
|
|
3989
4049
|
availableBalance: 0,
|
|
@@ -4026,7 +4086,7 @@ function useAmountLimits(amountNum) {
|
|
|
4026
4086
|
const { selectedAssetSymbol, tokens } = useTokensStore();
|
|
4027
4087
|
const { fromChain } = useChainsStore();
|
|
4028
4088
|
const { quote } = useBridgeQuoteStore();
|
|
4029
|
-
const limitsResult =
|
|
4089
|
+
const limitsResult = React.useMemo(() => {
|
|
4030
4090
|
const tokenSymbol = selectedAssetSymbol;
|
|
4031
4091
|
if (quote?.srcAmountMax && fromChain?.chainKey && selectedAssetSymbol) {
|
|
4032
4092
|
const sourceToken = tokens?.find(
|
|
@@ -4064,7 +4124,7 @@ function useSilentValidations(amountString) {
|
|
|
4064
4124
|
const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();
|
|
4065
4125
|
const { fromChain, toChain } = useChainsStore();
|
|
4066
4126
|
const { quote, status, error } = useBridgeQuoteStore();
|
|
4067
|
-
const validationResult =
|
|
4127
|
+
const validationResult = React.useMemo(() => {
|
|
4068
4128
|
const hasTooManyDecimals = (() => {
|
|
4069
4129
|
if (!amountString || !fromChain?.chainKey || !selectedAssetSymbol)
|
|
4070
4130
|
return false;
|
|
@@ -4119,7 +4179,7 @@ function useSilentValidations(amountString) {
|
|
|
4119
4179
|
}
|
|
4120
4180
|
function useTelegramRestriction() {
|
|
4121
4181
|
const { fromChain, toChain } = useChainsStore();
|
|
4122
|
-
const restriction =
|
|
4182
|
+
const restriction = React.useMemo(() => {
|
|
4123
4183
|
const isTelegramEnv = typeof window !== "undefined" && /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
4124
4184
|
typeof window.TelegramWebviewProxy?.postEvent === "function";
|
|
4125
4185
|
if (!isTelegramEnv) {
|
|
@@ -4163,7 +4223,7 @@ const MainButton = ({
|
|
|
4163
4223
|
const missingDst = isCustomAddressEnabled ? !dstAddressValid : !dstConnectedOk || !dstAddressValid;
|
|
4164
4224
|
const requiresCustomAddress = isCustomAddressEnabled && !dstAddressValid;
|
|
4165
4225
|
const canTransfer = !missingSrc && !missingDst && amountNum > 0 && !!srcChainKey && !!dstChainKey;
|
|
4166
|
-
const label =
|
|
4226
|
+
const label = React.useMemo(() => {
|
|
4167
4227
|
switch (true) {
|
|
4168
4228
|
case isTelegramRestricted:
|
|
4169
4229
|
return t2("telegram.openWebVersion");
|
|
@@ -4275,7 +4335,7 @@ const WalletModalButton = (props) => {
|
|
|
4275
4335
|
const { icon: IconComponent, name, onClose } = props;
|
|
4276
4336
|
const { chainRegistry } = useChainStrategies();
|
|
4277
4337
|
const { connect, isPending } = wagmi.useConnect();
|
|
4278
|
-
const [isConnecting, setIsConnecting] =
|
|
4338
|
+
const [isConnecting, setIsConnecting] = React.useState(false);
|
|
4279
4339
|
if (props.variant === "connected") {
|
|
4280
4340
|
const { address, onDisconnect } = props;
|
|
4281
4341
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -4729,11 +4789,11 @@ const SuccessStep = ({
|
|
|
4729
4789
|
);
|
|
4730
4790
|
};
|
|
4731
4791
|
const useCountdown = (initialSeconds) => {
|
|
4732
|
-
const [time2, setTime] =
|
|
4792
|
+
const [time2, setTime] = React.useState(initialSeconds);
|
|
4733
4793
|
const minutes = Math.floor(time2 / 60);
|
|
4734
4794
|
const seconds = time2 % 60;
|
|
4735
4795
|
const formattedTime = `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
|
|
4736
|
-
|
|
4796
|
+
React.useEffect(() => {
|
|
4737
4797
|
if (!time2) return;
|
|
4738
4798
|
const intervalId = setInterval(() => {
|
|
4739
4799
|
setTime(time2 - 1);
|
|
@@ -4811,7 +4871,7 @@ const useTokens = () => {
|
|
|
4811
4871
|
// 1 час хранения в кэше
|
|
4812
4872
|
refetchOnWindowFocus: false
|
|
4813
4873
|
});
|
|
4814
|
-
|
|
4874
|
+
React.useEffect(() => {
|
|
4815
4875
|
if (query.isSuccess && query.data?.length) {
|
|
4816
4876
|
setAllTokens(query.data);
|
|
4817
4877
|
const bridgeableTokens = query.data.filter(
|
|
@@ -4830,7 +4890,7 @@ const useTokens = () => {
|
|
|
4830
4890
|
setSelectedToken,
|
|
4831
4891
|
setSelectedAssetSymbol
|
|
4832
4892
|
]);
|
|
4833
|
-
|
|
4893
|
+
React.useEffect(() => {
|
|
4834
4894
|
if (query.isError && query.error) {
|
|
4835
4895
|
console.error(query.error.name, query.error.message);
|
|
4836
4896
|
}
|
|
@@ -4850,7 +4910,7 @@ const useChains = () => {
|
|
|
4850
4910
|
// 1 час хранения в кэше
|
|
4851
4911
|
refetchOnWindowFocus: false
|
|
4852
4912
|
});
|
|
4853
|
-
|
|
4913
|
+
React.useEffect(() => {
|
|
4854
4914
|
if (query.isSuccess && query.data?.length) {
|
|
4855
4915
|
setChains(query.data);
|
|
4856
4916
|
if (!fromChain) {
|
|
@@ -4858,7 +4918,7 @@ const useChains = () => {
|
|
|
4858
4918
|
}
|
|
4859
4919
|
}
|
|
4860
4920
|
}, [query.isSuccess, query.data]);
|
|
4861
|
-
|
|
4921
|
+
React.useEffect(() => {
|
|
4862
4922
|
if (query.isError && query.error) {
|
|
4863
4923
|
console.error(query.error.name, query.error.message);
|
|
4864
4924
|
}
|
|
@@ -6604,7 +6664,30 @@ const EVM_CHAIN_KEY_TO_ID = {
|
|
|
6604
6664
|
optimism: 10,
|
|
6605
6665
|
polygon: 137,
|
|
6606
6666
|
base: 8453,
|
|
6607
|
-
bsc: 56
|
|
6667
|
+
bsc: 56,
|
|
6668
|
+
manta: 169,
|
|
6669
|
+
opbnb: 204,
|
|
6670
|
+
conflux: 1030,
|
|
6671
|
+
mantle: 5e3,
|
|
6672
|
+
plasma: 9745,
|
|
6673
|
+
monad: 143,
|
|
6674
|
+
celo: 42220,
|
|
6675
|
+
linea: 59144,
|
|
6676
|
+
blast: 81457,
|
|
6677
|
+
scroll: 534352,
|
|
6678
|
+
cronosevm: 25,
|
|
6679
|
+
gnosis: 100,
|
|
6680
|
+
sonic: 146,
|
|
6681
|
+
fantom: 250,
|
|
6682
|
+
zksync: 324,
|
|
6683
|
+
metis: 1088,
|
|
6684
|
+
zkevm: 1101,
|
|
6685
|
+
moonbeam: 1284,
|
|
6686
|
+
moonriver: 1285,
|
|
6687
|
+
kava: 2222,
|
|
6688
|
+
klaytn: 8217,
|
|
6689
|
+
avalanche: 43114,
|
|
6690
|
+
aurora: 1313161554
|
|
6608
6691
|
};
|
|
6609
6692
|
function ChainStrategyProvider({
|
|
6610
6693
|
children,
|
|
@@ -6616,7 +6699,7 @@ function ChainStrategyProvider({
|
|
|
6616
6699
|
tronApiKey
|
|
6617
6700
|
}) {
|
|
6618
6701
|
const { chains } = useChainsStore();
|
|
6619
|
-
const chainKeyToId =
|
|
6702
|
+
const chainKeyToId = React.useMemo(() => {
|
|
6620
6703
|
const map = {
|
|
6621
6704
|
...EVM_CHAIN_KEY_TO_ID
|
|
6622
6705
|
};
|
|
@@ -6629,7 +6712,7 @@ function ChainStrategyProvider({
|
|
|
6629
6712
|
}
|
|
6630
6713
|
return map;
|
|
6631
6714
|
}, [chains]);
|
|
6632
|
-
const evmStrategy =
|
|
6715
|
+
const evmStrategy = React.useMemo(
|
|
6633
6716
|
() => new EvmChainStrategy({
|
|
6634
6717
|
evmAddress: evmWallet.address,
|
|
6635
6718
|
evmIsConnected: evmWallet.isConnected,
|
|
@@ -6649,7 +6732,7 @@ function ChainStrategyProvider({
|
|
|
6649
6732
|
chainKeyToId
|
|
6650
6733
|
]
|
|
6651
6734
|
);
|
|
6652
|
-
const tonStrategy =
|
|
6735
|
+
const tonStrategy = React.useMemo(
|
|
6653
6736
|
() => new TonChainStrategy({
|
|
6654
6737
|
tonConnectUI: tonWallet.tonConnectUI,
|
|
6655
6738
|
tonAddress: tonWallet.address,
|
|
@@ -6658,7 +6741,7 @@ function ChainStrategyProvider({
|
|
|
6658
6741
|
}),
|
|
6659
6742
|
[tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]
|
|
6660
6743
|
);
|
|
6661
|
-
const tronStrategy =
|
|
6744
|
+
const tronStrategy = React.useMemo(
|
|
6662
6745
|
() => new TronChainStrategy({
|
|
6663
6746
|
tronLink: {
|
|
6664
6747
|
address: tronWallet.tronLink.address,
|
|
@@ -6688,11 +6771,11 @@ function ChainStrategyProvider({
|
|
|
6688
6771
|
tronApiKey
|
|
6689
6772
|
]
|
|
6690
6773
|
);
|
|
6691
|
-
const chainRegistry =
|
|
6774
|
+
const chainRegistry = React.useMemo(
|
|
6692
6775
|
() => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),
|
|
6693
6776
|
[evmStrategy, tonStrategy, tronStrategy]
|
|
6694
6777
|
);
|
|
6695
|
-
const value =
|
|
6778
|
+
const value = React.useMemo(
|
|
6696
6779
|
() => ({
|
|
6697
6780
|
chainRegistry
|
|
6698
6781
|
}),
|
|
@@ -6910,10 +6993,10 @@ const TokenSelectModal = ({
|
|
|
6910
6993
|
onChangeAsset
|
|
6911
6994
|
}) => {
|
|
6912
6995
|
const { t: t2 } = useBridgeTranslation();
|
|
6913
|
-
const [query, setQuery] =
|
|
6914
|
-
const [tab, setTab] =
|
|
6915
|
-
const [manualTabSwitch, setManualTabSwitch] =
|
|
6916
|
-
const [listHeight, setListHeight] =
|
|
6996
|
+
const [query, setQuery] = React.useState("");
|
|
6997
|
+
const [tab, setTab] = React.useState("my");
|
|
6998
|
+
const [manualTabSwitch, setManualTabSwitch] = React.useState(false);
|
|
6999
|
+
const [listHeight, setListHeight] = React.useState(400);
|
|
6917
7000
|
const { srcAddress } = useAddresses();
|
|
6918
7001
|
const { fromChain, toChain, setFromChain, chains } = useChainsStore();
|
|
6919
7002
|
const { assetMatrix, selectedAssetSymbol } = useTokensStore();
|
|
@@ -6922,20 +7005,20 @@ const TokenSelectModal = ({
|
|
|
6922
7005
|
fromChain?.chainKey,
|
|
6923
7006
|
srcAddress
|
|
6924
7007
|
);
|
|
6925
|
-
const hasSourceWallet =
|
|
7008
|
+
const hasSourceWallet = React.useCallback(() => {
|
|
6926
7009
|
return hasWalletForChain(fromChain?.chainKey);
|
|
6927
7010
|
}, [hasWalletForChain, fromChain?.chainKey]);
|
|
6928
|
-
|
|
7011
|
+
React.useEffect(() => {
|
|
6929
7012
|
if (!hasSourceWallet()) setTab("all");
|
|
6930
7013
|
}, [hasSourceWallet]);
|
|
6931
|
-
const getTokenUsdValue =
|
|
7014
|
+
const getTokenUsdValue = React.useCallback(
|
|
6932
7015
|
(symbol, price) => {
|
|
6933
7016
|
const bal = getBalance(symbol);
|
|
6934
7017
|
return bal > 0 && price ? bal * price : 0;
|
|
6935
7018
|
},
|
|
6936
7019
|
[getBalance]
|
|
6937
7020
|
);
|
|
6938
|
-
const isTokenAvailableOnChain =
|
|
7021
|
+
const isTokenAvailableOnChain = React.useCallback(
|
|
6939
7022
|
(symbol, chainKey) => {
|
|
6940
7023
|
if (!assetMatrix || !chainKey) return false;
|
|
6941
7024
|
const tokensByChain = assetMatrix[symbol.toUpperCase()];
|
|
@@ -6943,7 +7026,7 @@ const TokenSelectModal = ({
|
|
|
6943
7026
|
},
|
|
6944
7027
|
[assetMatrix]
|
|
6945
7028
|
);
|
|
6946
|
-
const findFirstAvailableChain =
|
|
7029
|
+
const findFirstAvailableChain = React.useCallback(
|
|
6947
7030
|
(symbol) => {
|
|
6948
7031
|
if (!assetMatrix || !chains) return void 0;
|
|
6949
7032
|
const tokensByChain = assetMatrix[symbol.toUpperCase()];
|
|
@@ -6956,7 +7039,7 @@ const TokenSelectModal = ({
|
|
|
6956
7039
|
},
|
|
6957
7040
|
[assetMatrix, chains]
|
|
6958
7041
|
);
|
|
6959
|
-
const groupedTokens =
|
|
7042
|
+
const groupedTokens = React.useMemo(() => {
|
|
6960
7043
|
const q3 = query.trim().toLowerCase();
|
|
6961
7044
|
const filtered = q3 ? items.filter(
|
|
6962
7045
|
(a2) => a2.name.toLowerCase().includes(q3) || a2.symbol.toLowerCase().includes(q3)
|
|
@@ -7006,33 +7089,33 @@ const TokenSelectModal = ({
|
|
|
7006
7089
|
]);
|
|
7007
7090
|
const myTokens = groupedTokens.withBalance;
|
|
7008
7091
|
const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
|
|
7009
|
-
|
|
7092
|
+
React.useEffect(() => {
|
|
7010
7093
|
if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
|
|
7011
7094
|
setTab("all");
|
|
7012
7095
|
}
|
|
7013
7096
|
}, [query, tab, myTokens.length, manualTabSwitch]);
|
|
7014
|
-
|
|
7097
|
+
React.useEffect(() => {
|
|
7015
7098
|
if (query.trim() !== "" && tab === "all" && myTokens.length > 0 && !manualTabSwitch) {
|
|
7016
7099
|
setTab("my");
|
|
7017
7100
|
}
|
|
7018
7101
|
}, [query, tab, myTokens.length, manualTabSwitch]);
|
|
7019
|
-
|
|
7102
|
+
React.useEffect(() => {
|
|
7020
7103
|
setManualTabSwitch(false);
|
|
7021
7104
|
}, [query]);
|
|
7022
|
-
const resetState =
|
|
7105
|
+
const resetState = React.useCallback(() => {
|
|
7023
7106
|
setQuery("");
|
|
7024
7107
|
setTab("my");
|
|
7025
7108
|
setManualTabSwitch(false);
|
|
7026
7109
|
}, []);
|
|
7027
|
-
const handleClose =
|
|
7110
|
+
const handleClose = React.useCallback(() => {
|
|
7028
7111
|
resetState();
|
|
7029
7112
|
onClose();
|
|
7030
7113
|
}, [onClose, resetState]);
|
|
7031
|
-
|
|
7114
|
+
React.useEffect(() => {
|
|
7032
7115
|
if (!isOpen) resetState();
|
|
7033
7116
|
}, [isOpen, resetState]);
|
|
7034
|
-
|
|
7035
|
-
const onPick =
|
|
7117
|
+
React.useEffect(() => () => resetState(), [resetState]);
|
|
7118
|
+
const onPick = React.useCallback(
|
|
7036
7119
|
(sym, willChangeSrcChain = false, willChangeDstChain = false, willChangeBothChains = false) => {
|
|
7037
7120
|
onChangeAsset(sym);
|
|
7038
7121
|
if (willChangeBothChains) {
|
|
@@ -7046,7 +7129,7 @@ const TokenSelectModal = ({
|
|
|
7046
7129
|
},
|
|
7047
7130
|
[findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
|
|
7048
7131
|
);
|
|
7049
|
-
const tokensToRender =
|
|
7132
|
+
const tokensToRender = React.useMemo(() => {
|
|
7050
7133
|
if (effectiveTab === "my") {
|
|
7051
7134
|
return myTokens.map((token) => ({
|
|
7052
7135
|
token,
|
|
@@ -7065,21 +7148,21 @@ const TokenSelectModal = ({
|
|
|
7065
7148
|
];
|
|
7066
7149
|
return mainTokens;
|
|
7067
7150
|
}, [effectiveTab, myTokens, groupedTokens]);
|
|
7068
|
-
const willChangeDstTokens =
|
|
7151
|
+
const willChangeDstTokens = React.useMemo(
|
|
7069
7152
|
() => groupedTokens.willChangeDstChain.map((token) => ({
|
|
7070
7153
|
token,
|
|
7071
7154
|
willChangeDst: true
|
|
7072
7155
|
})),
|
|
7073
7156
|
[groupedTokens.willChangeDstChain]
|
|
7074
7157
|
);
|
|
7075
|
-
const willChangeSrcTokens =
|
|
7158
|
+
const willChangeSrcTokens = React.useMemo(
|
|
7076
7159
|
() => groupedTokens.willChangeSrcChain.map((token) => ({
|
|
7077
7160
|
token,
|
|
7078
7161
|
willChangeSrc: true
|
|
7079
7162
|
})),
|
|
7080
7163
|
[groupedTokens.willChangeSrcChain]
|
|
7081
7164
|
);
|
|
7082
|
-
const willChangeBothTokens =
|
|
7165
|
+
const willChangeBothTokens = React.useMemo(
|
|
7083
7166
|
() => groupedTokens.willChangeBothChains.map((token) => ({
|
|
7084
7167
|
token,
|
|
7085
7168
|
willChangeBoth: true
|
|
@@ -7087,7 +7170,7 @@ const TokenSelectModal = ({
|
|
|
7087
7170
|
[groupedTokens.willChangeBothChains]
|
|
7088
7171
|
);
|
|
7089
7172
|
const hasNoResults = tokensToRender.length === 0 && willChangeDstTokens.length === 0 && willChangeSrcTokens.length === 0 && willChangeBothTokens.length === 0;
|
|
7090
|
-
const virtualItems =
|
|
7173
|
+
const virtualItems = React.useMemo(() => {
|
|
7091
7174
|
const items2 = tokensToRender.map(
|
|
7092
7175
|
({ token, willChangeSrc }) => ({
|
|
7093
7176
|
type: "token",
|
|
@@ -7132,7 +7215,7 @@ const TokenSelectModal = ({
|
|
|
7132
7215
|
}
|
|
7133
7216
|
return items2;
|
|
7134
7217
|
}, [effectiveTab, tokensToRender, t2, willChangeDstTokens, willChangeSrcTokens, willChangeBothTokens]);
|
|
7135
|
-
|
|
7218
|
+
React.useLayoutEffect(() => {
|
|
7136
7219
|
const updateHeight = () => {
|
|
7137
7220
|
const container2 = document.getElementById("token-select-list");
|
|
7138
7221
|
if (!container2) return;
|
|
@@ -7155,7 +7238,7 @@ const TokenSelectModal = ({
|
|
|
7155
7238
|
resizeObserver?.disconnect();
|
|
7156
7239
|
};
|
|
7157
7240
|
}, [isOpen, hasSourceWallet]);
|
|
7158
|
-
const VirtualRow =
|
|
7241
|
+
const VirtualRow = React.useCallback(
|
|
7159
7242
|
({ index, style }) => {
|
|
7160
7243
|
const item = virtualItems[index];
|
|
7161
7244
|
if (!item) return null;
|
|
@@ -7199,7 +7282,7 @@ const TokenSelectModal = ({
|
|
|
7199
7282
|
virtualItems
|
|
7200
7283
|
]
|
|
7201
7284
|
);
|
|
7202
|
-
const itemKey =
|
|
7285
|
+
const itemKey = React.useCallback(
|
|
7203
7286
|
(index) => {
|
|
7204
7287
|
const item = virtualItems[index];
|
|
7205
7288
|
if (!item) return index;
|
|
@@ -7276,8 +7359,8 @@ function useBridgeRefresh() {
|
|
|
7276
7359
|
const { fromChain, toChain } = useChainsStore();
|
|
7277
7360
|
const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();
|
|
7278
7361
|
const { hasAnyWallet } = useConnectedWalletsStore();
|
|
7279
|
-
const [spinning, setSpinning] =
|
|
7280
|
-
const refresh =
|
|
7362
|
+
const [spinning, setSpinning] = React.useState(false);
|
|
7363
|
+
const refresh = React.useCallback(async () => {
|
|
7281
7364
|
setSpinning(true);
|
|
7282
7365
|
try {
|
|
7283
7366
|
setQLoading();
|
|
@@ -7330,8 +7413,8 @@ function useBridgeRefresh() {
|
|
|
7330
7413
|
}
|
|
7331
7414
|
const RefreshButton = () => {
|
|
7332
7415
|
const { refresh, spinning } = useBridgeRefresh();
|
|
7333
|
-
const [turns, setTurns] =
|
|
7334
|
-
const handleRefresh =
|
|
7416
|
+
const [turns, setTurns] = React.useState(0);
|
|
7417
|
+
const handleRefresh = React.useCallback(() => {
|
|
7335
7418
|
setTurns((t2) => t2 + 1);
|
|
7336
7419
|
refresh();
|
|
7337
7420
|
}, [refresh]);
|
|
@@ -7360,7 +7443,7 @@ const SelectTokenButton = ({
|
|
|
7360
7443
|
token
|
|
7361
7444
|
}) => {
|
|
7362
7445
|
const { t: t2 } = useBridgeTranslation();
|
|
7363
|
-
const label =
|
|
7446
|
+
const label = React.useMemo(() => {
|
|
7364
7447
|
return token?.symbol ?? t2("bridge.selectToken");
|
|
7365
7448
|
}, [token, t2]);
|
|
7366
7449
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -7398,8 +7481,8 @@ const Toolbar = () => {
|
|
|
7398
7481
|
onOpen: onOpenSettings
|
|
7399
7482
|
} = useModal();
|
|
7400
7483
|
const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
|
|
7401
|
-
const assets =
|
|
7402
|
-
const current =
|
|
7484
|
+
const assets = React.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
|
|
7485
|
+
const current = React.useMemo(() => {
|
|
7403
7486
|
if (!assets.length) return void 0;
|
|
7404
7487
|
if (!selectedAssetSymbol) return assets[0];
|
|
7405
7488
|
const sum = selectedAssetSymbol.toUpperCase();
|
|
@@ -7445,8 +7528,8 @@ const useAutoSelectNetwork = ({
|
|
|
7445
7528
|
}) => {
|
|
7446
7529
|
const { hasAnyWallet } = useConnectedWalletsStore();
|
|
7447
7530
|
const { chains, setFromChain } = useChainsStore();
|
|
7448
|
-
const previousHadWallet =
|
|
7449
|
-
|
|
7531
|
+
const previousHadWallet = React.useRef(hasAnyWallet());
|
|
7532
|
+
React.useEffect(() => {
|
|
7450
7533
|
const currentHasWallet = hasAnyWallet();
|
|
7451
7534
|
const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;
|
|
7452
7535
|
if (isFirstWalletConnection && chains?.length) {
|
|
@@ -26087,7 +26170,7 @@ class WalletConnectModal {
|
|
|
26087
26170
|
}
|
|
26088
26171
|
async initUi() {
|
|
26089
26172
|
if (typeof window !== "undefined") {
|
|
26090
|
-
await Promise.resolve().then(() => require("./index-
|
|
26173
|
+
await Promise.resolve().then(() => require("./index-CWgNX6rD.cjs"));
|
|
26091
26174
|
const modal = document.createElement("wcm-modal");
|
|
26092
26175
|
document.body.insertAdjacentElement("beforeend", modal);
|
|
26093
26176
|
OptionsCtrl.setIsUiLoaded(true);
|
|
@@ -26193,16 +26276,16 @@ function isSessionExpiredError(error) {
|
|
|
26193
26276
|
function useTronWalletConnect(projectId) {
|
|
26194
26277
|
const { address, isConnected, isConnecting } = useTronWalletConnectStore();
|
|
26195
26278
|
const { setAddress, setActions, reset } = useTronWalletConnectStore();
|
|
26196
|
-
const providerRef =
|
|
26197
|
-
const modalRef =
|
|
26198
|
-
const abortControllerRef =
|
|
26279
|
+
const providerRef = React.useRef(null);
|
|
26280
|
+
const modalRef = React.useRef(null);
|
|
26281
|
+
const abortControllerRef = React.useRef(null);
|
|
26199
26282
|
const { onClose: closeWalletSelectModal } = useWalletSelectModal();
|
|
26200
26283
|
const appliedTheme = useThemeStore((state2) => state2.appliedTheme);
|
|
26201
|
-
const closeWalletSelectModalRef =
|
|
26284
|
+
const closeWalletSelectModalRef = React.useRef(closeWalletSelectModal);
|
|
26202
26285
|
closeWalletSelectModalRef.current = closeWalletSelectModal;
|
|
26203
|
-
const appliedThemeRef =
|
|
26286
|
+
const appliedThemeRef = React.useRef(appliedTheme);
|
|
26204
26287
|
appliedThemeRef.current = appliedTheme;
|
|
26205
|
-
|
|
26288
|
+
React.useEffect(() => {
|
|
26206
26289
|
if (!projectId || providerRef.current) return;
|
|
26207
26290
|
const initProvider = async () => {
|
|
26208
26291
|
try {
|
|
@@ -26275,7 +26358,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26275
26358
|
}
|
|
26276
26359
|
};
|
|
26277
26360
|
}, [projectId, setAddress]);
|
|
26278
|
-
|
|
26361
|
+
React.useEffect(() => {
|
|
26279
26362
|
if (!projectId || !modalRef.current) return;
|
|
26280
26363
|
const modal = new WalletConnectModal({
|
|
26281
26364
|
projectId,
|
|
@@ -26287,7 +26370,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26287
26370
|
});
|
|
26288
26371
|
modalRef.current = modal;
|
|
26289
26372
|
}, [appliedTheme, projectId]);
|
|
26290
|
-
const connect =
|
|
26373
|
+
const connect = React.useCallback(async () => {
|
|
26291
26374
|
if (!providerRef.current) {
|
|
26292
26375
|
throw new Error(
|
|
26293
26376
|
"WalletConnect not initialized. Please provide a valid project ID."
|
|
@@ -26355,7 +26438,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26355
26438
|
abortControllerRef.current = null;
|
|
26356
26439
|
}
|
|
26357
26440
|
}, [setAddress]);
|
|
26358
|
-
const cancelConnection =
|
|
26441
|
+
const cancelConnection = React.useCallback(() => {
|
|
26359
26442
|
if (abortControllerRef.current) {
|
|
26360
26443
|
abortControllerRef.current.abort();
|
|
26361
26444
|
console.log("TRON WalletConnect connection cancelled");
|
|
@@ -26364,7 +26447,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26364
26447
|
modalRef.current.closeModal();
|
|
26365
26448
|
}
|
|
26366
26449
|
}, []);
|
|
26367
|
-
const disconnect =
|
|
26450
|
+
const disconnect = React.useCallback(async () => {
|
|
26368
26451
|
if (!providerRef.current) return;
|
|
26369
26452
|
try {
|
|
26370
26453
|
await providerRef.current.disconnect();
|
|
@@ -26375,7 +26458,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26375
26458
|
throw error;
|
|
26376
26459
|
}
|
|
26377
26460
|
}, [reset]);
|
|
26378
|
-
const signTransaction =
|
|
26461
|
+
const signTransaction = React.useCallback(
|
|
26379
26462
|
async (transaction2) => {
|
|
26380
26463
|
if (!providerRef.current) {
|
|
26381
26464
|
throw new Error("WalletConnect not initialized");
|
|
@@ -26442,7 +26525,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26442
26525
|
},
|
|
26443
26526
|
[address, setAddress]
|
|
26444
26527
|
);
|
|
26445
|
-
const onAddressCorrected =
|
|
26528
|
+
const onAddressCorrected = React.useCallback(
|
|
26446
26529
|
(correctedAddress) => {
|
|
26447
26530
|
console.log(
|
|
26448
26531
|
"TRON WalletConnect address corrected:",
|
|
@@ -26454,7 +26537,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26454
26537
|
},
|
|
26455
26538
|
[address, setAddress]
|
|
26456
26539
|
);
|
|
26457
|
-
|
|
26540
|
+
React.useEffect(() => {
|
|
26458
26541
|
setActions({
|
|
26459
26542
|
connect,
|
|
26460
26543
|
disconnect,
|
|
@@ -26512,10 +26595,10 @@ function useUrlSync(options) {
|
|
|
26512
26595
|
const { setInputAmount } = useBridgeQuoteStore();
|
|
26513
26596
|
const internalData = useBridgeExternalData();
|
|
26514
26597
|
const currentUrlParams = internalData.urlParams;
|
|
26515
|
-
const [hasInitialized, setHasInitialized] =
|
|
26516
|
-
const isSyncingRef =
|
|
26517
|
-
const lastSyncedParamsRef =
|
|
26518
|
-
const validateParams =
|
|
26598
|
+
const [hasInitialized, setHasInitialized] = React.useState(false);
|
|
26599
|
+
const isSyncingRef = React.useRef(false);
|
|
26600
|
+
const lastSyncedParamsRef = React.useRef({});
|
|
26601
|
+
const validateParams = React.useCallback(
|
|
26519
26602
|
(urlParams) => {
|
|
26520
26603
|
const result = {};
|
|
26521
26604
|
if (!chains?.length || !tokens?.length || !assetMatrix) {
|
|
@@ -26568,7 +26651,7 @@ function useUrlSync(options) {
|
|
|
26568
26651
|
},
|
|
26569
26652
|
[chains, tokens, assetMatrix]
|
|
26570
26653
|
);
|
|
26571
|
-
const syncStateToUrl =
|
|
26654
|
+
const syncStateToUrl = React.useCallback(
|
|
26572
26655
|
(includeAmount = false) => {
|
|
26573
26656
|
if (!enabled || isSyncingRef.current || !hasInitialized) {
|
|
26574
26657
|
return;
|
|
@@ -26590,11 +26673,11 @@ function useUrlSync(options) {
|
|
|
26590
26673
|
},
|
|
26591
26674
|
[enabled, hasInitialized, currentUrlParams, onUrlParamsChange]
|
|
26592
26675
|
);
|
|
26593
|
-
const handleAmountBlur =
|
|
26676
|
+
const handleAmountBlur = React.useCallback(() => {
|
|
26594
26677
|
if (!enabled || !hasInitialized) return;
|
|
26595
26678
|
syncStateToUrl(true);
|
|
26596
26679
|
}, [enabled, hasInitialized, syncStateToUrl]);
|
|
26597
|
-
|
|
26680
|
+
React.useEffect(() => {
|
|
26598
26681
|
if (!enabled || !chains?.length || !tokens?.length) {
|
|
26599
26682
|
return;
|
|
26600
26683
|
}
|
|
@@ -26640,7 +26723,7 @@ function useUrlSync(options) {
|
|
|
26640
26723
|
setInputAmount,
|
|
26641
26724
|
setIsUrlInitialized
|
|
26642
26725
|
]);
|
|
26643
|
-
|
|
26726
|
+
React.useEffect(() => {
|
|
26644
26727
|
if (!enabled || !hasInitialized) return;
|
|
26645
26728
|
syncStateToUrl(false);
|
|
26646
26729
|
}, [
|
|
@@ -26664,7 +26747,7 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26664
26747
|
const { disconnect: evmDisconnect } = wagmi.useDisconnect();
|
|
26665
26748
|
const { data: walletClient } = wagmi.useWalletClient();
|
|
26666
26749
|
const publicClient = wagmi.usePublicClient();
|
|
26667
|
-
const getPublicClientForChain =
|
|
26750
|
+
const getPublicClientForChain = React.useCallback(
|
|
26668
26751
|
(chainId) => {
|
|
26669
26752
|
try {
|
|
26670
26753
|
const client = wagmiConfig.getClient({
|
|
@@ -26684,15 +26767,15 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26684
26767
|
connect: tronConnect,
|
|
26685
26768
|
disconnect: tronDisconnect
|
|
26686
26769
|
} = tronwalletAdapterReactHooks.useWallet();
|
|
26687
|
-
const tronSelectRef =
|
|
26688
|
-
const tronConnectRef =
|
|
26689
|
-
const tronDisconnectRef =
|
|
26690
|
-
|
|
26770
|
+
const tronSelectRef = React.useRef(tronSelect);
|
|
26771
|
+
const tronConnectRef = React.useRef(tronConnect);
|
|
26772
|
+
const tronDisconnectRef = React.useRef(tronDisconnect);
|
|
26773
|
+
React.useEffect(() => {
|
|
26691
26774
|
tronSelectRef.current = tronSelect;
|
|
26692
26775
|
tronConnectRef.current = tronConnect;
|
|
26693
26776
|
tronDisconnectRef.current = tronDisconnect;
|
|
26694
26777
|
}, [tronSelect, tronConnect, tronDisconnect]);
|
|
26695
|
-
const tronLinkActions =
|
|
26778
|
+
const tronLinkActions = React.useMemo(
|
|
26696
26779
|
() => ({
|
|
26697
26780
|
select: (adapterName) => tronSelectRef.current(adapterName),
|
|
26698
26781
|
connect: () => tronConnectRef.current(),
|
|
@@ -26702,14 +26785,14 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26702
26785
|
);
|
|
26703
26786
|
const tronWalletConnect = useTronWalletConnect(props.walletConnectProjectId);
|
|
26704
26787
|
const { setTonConnected, setMetaMaskConnected, setTronConnected } = useConnectedWalletsStore();
|
|
26705
|
-
|
|
26788
|
+
React.useEffect(() => {
|
|
26706
26789
|
setTonConnected(!!tonAddress);
|
|
26707
26790
|
}, [tonAddress, setTonConnected]);
|
|
26708
|
-
|
|
26791
|
+
React.useEffect(() => {
|
|
26709
26792
|
setMetaMaskConnected(!!evmIsConnected);
|
|
26710
26793
|
}, [evmIsConnected, setMetaMaskConnected]);
|
|
26711
26794
|
const isAnyTronConnected = !!tronConnected || !!tronWalletConnect.isConnected;
|
|
26712
|
-
|
|
26795
|
+
React.useEffect(() => {
|
|
26713
26796
|
setTronConnected(isAnyTronConnected);
|
|
26714
26797
|
}, [isAnyTronConnected, setTronConnected]);
|
|
26715
26798
|
useAutoSelectNetwork({
|
|
@@ -26798,7 +26881,7 @@ const EvaaBridgeContent = ({
|
|
|
26798
26881
|
const canSwap = Boolean(
|
|
26799
26882
|
fromChain && toChain && selectedAssetSymbol && isAllowedFromChain(toChain.chainKey)
|
|
26800
26883
|
);
|
|
26801
|
-
const outputAmount =
|
|
26884
|
+
const outputAmount = React.useMemo(() => {
|
|
26802
26885
|
if (!quote || loading) return "";
|
|
26803
26886
|
const srcToken = resolveTokenOnChainFromMatrix$1(
|
|
26804
26887
|
assetMatrix,
|
|
@@ -26820,35 +26903,35 @@ const EvaaBridgeContent = ({
|
|
|
26820
26903
|
fromChain?.chainKey,
|
|
26821
26904
|
toChain?.chainKey
|
|
26822
26905
|
]);
|
|
26823
|
-
|
|
26906
|
+
React.useEffect(() => {
|
|
26824
26907
|
if (chains?.length && onInitialized) {
|
|
26825
26908
|
onInitialized();
|
|
26826
26909
|
}
|
|
26827
26910
|
}, [chains, onInitialized]);
|
|
26828
|
-
const handleAmountChange =
|
|
26911
|
+
const handleAmountChange = React.useCallback(
|
|
26829
26912
|
(newAmount) => {
|
|
26830
26913
|
setAmountAction(newAmount);
|
|
26831
26914
|
},
|
|
26832
26915
|
[setAmountAction]
|
|
26833
26916
|
);
|
|
26834
|
-
const handleFromChainChange =
|
|
26917
|
+
const handleFromChainChange = React.useCallback(
|
|
26835
26918
|
(chain2) => {
|
|
26836
26919
|
if (!chain2) return;
|
|
26837
26920
|
setFromChainAction(chain2);
|
|
26838
26921
|
},
|
|
26839
26922
|
[setFromChainAction]
|
|
26840
26923
|
);
|
|
26841
|
-
const handleToChainChange =
|
|
26924
|
+
const handleToChainChange = React.useCallback(
|
|
26842
26925
|
(chain2) => {
|
|
26843
26926
|
if (!chain2) return;
|
|
26844
26927
|
setToChainAction(chain2);
|
|
26845
26928
|
},
|
|
26846
26929
|
[setToChainAction]
|
|
26847
26930
|
);
|
|
26848
|
-
const handleSwapSides =
|
|
26931
|
+
const handleSwapSides = React.useCallback(() => {
|
|
26849
26932
|
swap.actions.swapSides();
|
|
26850
26933
|
}, [swap.actions]);
|
|
26851
|
-
const destinationChains =
|
|
26934
|
+
const destinationChains = React.useMemo(() => {
|
|
26852
26935
|
if (!chains || !selectedAssetSymbol || !assetMatrix) {
|
|
26853
26936
|
return allowedToChains ?? [];
|
|
26854
26937
|
}
|
|
@@ -26861,7 +26944,7 @@ const EvaaBridgeContent = ({
|
|
|
26861
26944
|
fromChain?.chainKey,
|
|
26862
26945
|
selectedAssetSymbol
|
|
26863
26946
|
]);
|
|
26864
|
-
const sourceChains =
|
|
26947
|
+
const sourceChains = React.useMemo(() => {
|
|
26865
26948
|
if (!chains || !assetMatrix) {
|
|
26866
26949
|
return allowedFromChains ?? [];
|
|
26867
26950
|
}
|
|
@@ -26989,4 +27072,4 @@ exports.useSettingsStore = useSettingsStore;
|
|
|
26989
27072
|
exports.useSwapModel = useSwapModel;
|
|
26990
27073
|
exports.useTokensStore = useTokensStore;
|
|
26991
27074
|
exports.useTransactionStore = useTransactionStore;
|
|
26992
|
-
//# sourceMappingURL=index-
|
|
27075
|
+
//# sourceMappingURL=index-Y5S-J1RC.cjs.map
|