@rash2x/bridge-widget 0.7.7 → 0.7.8
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-Btnz7slS.cjs} +2 -2
- package/dist/{index-x-S2vNi4.cjs.map → index-Btnz7slS.cjs.map} +1 -1
- package/dist/{index-KQ4SsUup.js → index-CEcrJo_G.js} +49 -5
- package/dist/index-CEcrJo_G.js.map +1 -0
- package/dist/{index-D2IOd6mV.js → index-DIK7UXln.js} +2 -2
- package/dist/{index-D2IOd6mV.js.map → index-DIK7UXln.js.map} +1 -1
- package/dist/{index-DnrWUlYr.cjs → index-bZ0S5sNd.cjs} +222 -162
- package/dist/index-bZ0S5sNd.cjs.map +1 -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
|
}
|
|
@@ -6616,7 +6676,7 @@ function ChainStrategyProvider({
|
|
|
6616
6676
|
tronApiKey
|
|
6617
6677
|
}) {
|
|
6618
6678
|
const { chains } = useChainsStore();
|
|
6619
|
-
const chainKeyToId =
|
|
6679
|
+
const chainKeyToId = React.useMemo(() => {
|
|
6620
6680
|
const map = {
|
|
6621
6681
|
...EVM_CHAIN_KEY_TO_ID
|
|
6622
6682
|
};
|
|
@@ -6629,7 +6689,7 @@ function ChainStrategyProvider({
|
|
|
6629
6689
|
}
|
|
6630
6690
|
return map;
|
|
6631
6691
|
}, [chains]);
|
|
6632
|
-
const evmStrategy =
|
|
6692
|
+
const evmStrategy = React.useMemo(
|
|
6633
6693
|
() => new EvmChainStrategy({
|
|
6634
6694
|
evmAddress: evmWallet.address,
|
|
6635
6695
|
evmIsConnected: evmWallet.isConnected,
|
|
@@ -6649,7 +6709,7 @@ function ChainStrategyProvider({
|
|
|
6649
6709
|
chainKeyToId
|
|
6650
6710
|
]
|
|
6651
6711
|
);
|
|
6652
|
-
const tonStrategy =
|
|
6712
|
+
const tonStrategy = React.useMemo(
|
|
6653
6713
|
() => new TonChainStrategy({
|
|
6654
6714
|
tonConnectUI: tonWallet.tonConnectUI,
|
|
6655
6715
|
tonAddress: tonWallet.address,
|
|
@@ -6658,7 +6718,7 @@ function ChainStrategyProvider({
|
|
|
6658
6718
|
}),
|
|
6659
6719
|
[tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]
|
|
6660
6720
|
);
|
|
6661
|
-
const tronStrategy =
|
|
6721
|
+
const tronStrategy = React.useMemo(
|
|
6662
6722
|
() => new TronChainStrategy({
|
|
6663
6723
|
tronLink: {
|
|
6664
6724
|
address: tronWallet.tronLink.address,
|
|
@@ -6688,11 +6748,11 @@ function ChainStrategyProvider({
|
|
|
6688
6748
|
tronApiKey
|
|
6689
6749
|
]
|
|
6690
6750
|
);
|
|
6691
|
-
const chainRegistry =
|
|
6751
|
+
const chainRegistry = React.useMemo(
|
|
6692
6752
|
() => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),
|
|
6693
6753
|
[evmStrategy, tonStrategy, tronStrategy]
|
|
6694
6754
|
);
|
|
6695
|
-
const value =
|
|
6755
|
+
const value = React.useMemo(
|
|
6696
6756
|
() => ({
|
|
6697
6757
|
chainRegistry
|
|
6698
6758
|
}),
|
|
@@ -6910,10 +6970,10 @@ const TokenSelectModal = ({
|
|
|
6910
6970
|
onChangeAsset
|
|
6911
6971
|
}) => {
|
|
6912
6972
|
const { t: t2 } = useBridgeTranslation();
|
|
6913
|
-
const [query, setQuery] =
|
|
6914
|
-
const [tab, setTab] =
|
|
6915
|
-
const [manualTabSwitch, setManualTabSwitch] =
|
|
6916
|
-
const [listHeight, setListHeight] =
|
|
6973
|
+
const [query, setQuery] = React.useState("");
|
|
6974
|
+
const [tab, setTab] = React.useState("my");
|
|
6975
|
+
const [manualTabSwitch, setManualTabSwitch] = React.useState(false);
|
|
6976
|
+
const [listHeight, setListHeight] = React.useState(400);
|
|
6917
6977
|
const { srcAddress } = useAddresses();
|
|
6918
6978
|
const { fromChain, toChain, setFromChain, chains } = useChainsStore();
|
|
6919
6979
|
const { assetMatrix, selectedAssetSymbol } = useTokensStore();
|
|
@@ -6922,20 +6982,20 @@ const TokenSelectModal = ({
|
|
|
6922
6982
|
fromChain?.chainKey,
|
|
6923
6983
|
srcAddress
|
|
6924
6984
|
);
|
|
6925
|
-
const hasSourceWallet =
|
|
6985
|
+
const hasSourceWallet = React.useCallback(() => {
|
|
6926
6986
|
return hasWalletForChain(fromChain?.chainKey);
|
|
6927
6987
|
}, [hasWalletForChain, fromChain?.chainKey]);
|
|
6928
|
-
|
|
6988
|
+
React.useEffect(() => {
|
|
6929
6989
|
if (!hasSourceWallet()) setTab("all");
|
|
6930
6990
|
}, [hasSourceWallet]);
|
|
6931
|
-
const getTokenUsdValue =
|
|
6991
|
+
const getTokenUsdValue = React.useCallback(
|
|
6932
6992
|
(symbol, price) => {
|
|
6933
6993
|
const bal = getBalance(symbol);
|
|
6934
6994
|
return bal > 0 && price ? bal * price : 0;
|
|
6935
6995
|
},
|
|
6936
6996
|
[getBalance]
|
|
6937
6997
|
);
|
|
6938
|
-
const isTokenAvailableOnChain =
|
|
6998
|
+
const isTokenAvailableOnChain = React.useCallback(
|
|
6939
6999
|
(symbol, chainKey) => {
|
|
6940
7000
|
if (!assetMatrix || !chainKey) return false;
|
|
6941
7001
|
const tokensByChain = assetMatrix[symbol.toUpperCase()];
|
|
@@ -6943,7 +7003,7 @@ const TokenSelectModal = ({
|
|
|
6943
7003
|
},
|
|
6944
7004
|
[assetMatrix]
|
|
6945
7005
|
);
|
|
6946
|
-
const findFirstAvailableChain =
|
|
7006
|
+
const findFirstAvailableChain = React.useCallback(
|
|
6947
7007
|
(symbol) => {
|
|
6948
7008
|
if (!assetMatrix || !chains) return void 0;
|
|
6949
7009
|
const tokensByChain = assetMatrix[symbol.toUpperCase()];
|
|
@@ -6956,7 +7016,7 @@ const TokenSelectModal = ({
|
|
|
6956
7016
|
},
|
|
6957
7017
|
[assetMatrix, chains]
|
|
6958
7018
|
);
|
|
6959
|
-
const groupedTokens =
|
|
7019
|
+
const groupedTokens = React.useMemo(() => {
|
|
6960
7020
|
const q3 = query.trim().toLowerCase();
|
|
6961
7021
|
const filtered = q3 ? items.filter(
|
|
6962
7022
|
(a2) => a2.name.toLowerCase().includes(q3) || a2.symbol.toLowerCase().includes(q3)
|
|
@@ -7006,33 +7066,33 @@ const TokenSelectModal = ({
|
|
|
7006
7066
|
]);
|
|
7007
7067
|
const myTokens = groupedTokens.withBalance;
|
|
7008
7068
|
const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
|
|
7009
|
-
|
|
7069
|
+
React.useEffect(() => {
|
|
7010
7070
|
if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
|
|
7011
7071
|
setTab("all");
|
|
7012
7072
|
}
|
|
7013
7073
|
}, [query, tab, myTokens.length, manualTabSwitch]);
|
|
7014
|
-
|
|
7074
|
+
React.useEffect(() => {
|
|
7015
7075
|
if (query.trim() !== "" && tab === "all" && myTokens.length > 0 && !manualTabSwitch) {
|
|
7016
7076
|
setTab("my");
|
|
7017
7077
|
}
|
|
7018
7078
|
}, [query, tab, myTokens.length, manualTabSwitch]);
|
|
7019
|
-
|
|
7079
|
+
React.useEffect(() => {
|
|
7020
7080
|
setManualTabSwitch(false);
|
|
7021
7081
|
}, [query]);
|
|
7022
|
-
const resetState =
|
|
7082
|
+
const resetState = React.useCallback(() => {
|
|
7023
7083
|
setQuery("");
|
|
7024
7084
|
setTab("my");
|
|
7025
7085
|
setManualTabSwitch(false);
|
|
7026
7086
|
}, []);
|
|
7027
|
-
const handleClose =
|
|
7087
|
+
const handleClose = React.useCallback(() => {
|
|
7028
7088
|
resetState();
|
|
7029
7089
|
onClose();
|
|
7030
7090
|
}, [onClose, resetState]);
|
|
7031
|
-
|
|
7091
|
+
React.useEffect(() => {
|
|
7032
7092
|
if (!isOpen) resetState();
|
|
7033
7093
|
}, [isOpen, resetState]);
|
|
7034
|
-
|
|
7035
|
-
const onPick =
|
|
7094
|
+
React.useEffect(() => () => resetState(), [resetState]);
|
|
7095
|
+
const onPick = React.useCallback(
|
|
7036
7096
|
(sym, willChangeSrcChain = false, willChangeDstChain = false, willChangeBothChains = false) => {
|
|
7037
7097
|
onChangeAsset(sym);
|
|
7038
7098
|
if (willChangeBothChains) {
|
|
@@ -7046,7 +7106,7 @@ const TokenSelectModal = ({
|
|
|
7046
7106
|
},
|
|
7047
7107
|
[findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
|
|
7048
7108
|
);
|
|
7049
|
-
const tokensToRender =
|
|
7109
|
+
const tokensToRender = React.useMemo(() => {
|
|
7050
7110
|
if (effectiveTab === "my") {
|
|
7051
7111
|
return myTokens.map((token) => ({
|
|
7052
7112
|
token,
|
|
@@ -7065,21 +7125,21 @@ const TokenSelectModal = ({
|
|
|
7065
7125
|
];
|
|
7066
7126
|
return mainTokens;
|
|
7067
7127
|
}, [effectiveTab, myTokens, groupedTokens]);
|
|
7068
|
-
const willChangeDstTokens =
|
|
7128
|
+
const willChangeDstTokens = React.useMemo(
|
|
7069
7129
|
() => groupedTokens.willChangeDstChain.map((token) => ({
|
|
7070
7130
|
token,
|
|
7071
7131
|
willChangeDst: true
|
|
7072
7132
|
})),
|
|
7073
7133
|
[groupedTokens.willChangeDstChain]
|
|
7074
7134
|
);
|
|
7075
|
-
const willChangeSrcTokens =
|
|
7135
|
+
const willChangeSrcTokens = React.useMemo(
|
|
7076
7136
|
() => groupedTokens.willChangeSrcChain.map((token) => ({
|
|
7077
7137
|
token,
|
|
7078
7138
|
willChangeSrc: true
|
|
7079
7139
|
})),
|
|
7080
7140
|
[groupedTokens.willChangeSrcChain]
|
|
7081
7141
|
);
|
|
7082
|
-
const willChangeBothTokens =
|
|
7142
|
+
const willChangeBothTokens = React.useMemo(
|
|
7083
7143
|
() => groupedTokens.willChangeBothChains.map((token) => ({
|
|
7084
7144
|
token,
|
|
7085
7145
|
willChangeBoth: true
|
|
@@ -7087,7 +7147,7 @@ const TokenSelectModal = ({
|
|
|
7087
7147
|
[groupedTokens.willChangeBothChains]
|
|
7088
7148
|
);
|
|
7089
7149
|
const hasNoResults = tokensToRender.length === 0 && willChangeDstTokens.length === 0 && willChangeSrcTokens.length === 0 && willChangeBothTokens.length === 0;
|
|
7090
|
-
const virtualItems =
|
|
7150
|
+
const virtualItems = React.useMemo(() => {
|
|
7091
7151
|
const items2 = tokensToRender.map(
|
|
7092
7152
|
({ token, willChangeSrc }) => ({
|
|
7093
7153
|
type: "token",
|
|
@@ -7132,7 +7192,7 @@ const TokenSelectModal = ({
|
|
|
7132
7192
|
}
|
|
7133
7193
|
return items2;
|
|
7134
7194
|
}, [effectiveTab, tokensToRender, t2, willChangeDstTokens, willChangeSrcTokens, willChangeBothTokens]);
|
|
7135
|
-
|
|
7195
|
+
React.useLayoutEffect(() => {
|
|
7136
7196
|
const updateHeight = () => {
|
|
7137
7197
|
const container2 = document.getElementById("token-select-list");
|
|
7138
7198
|
if (!container2) return;
|
|
@@ -7155,7 +7215,7 @@ const TokenSelectModal = ({
|
|
|
7155
7215
|
resizeObserver?.disconnect();
|
|
7156
7216
|
};
|
|
7157
7217
|
}, [isOpen, hasSourceWallet]);
|
|
7158
|
-
const VirtualRow =
|
|
7218
|
+
const VirtualRow = React.useCallback(
|
|
7159
7219
|
({ index, style }) => {
|
|
7160
7220
|
const item = virtualItems[index];
|
|
7161
7221
|
if (!item) return null;
|
|
@@ -7199,7 +7259,7 @@ const TokenSelectModal = ({
|
|
|
7199
7259
|
virtualItems
|
|
7200
7260
|
]
|
|
7201
7261
|
);
|
|
7202
|
-
const itemKey =
|
|
7262
|
+
const itemKey = React.useCallback(
|
|
7203
7263
|
(index) => {
|
|
7204
7264
|
const item = virtualItems[index];
|
|
7205
7265
|
if (!item) return index;
|
|
@@ -7276,8 +7336,8 @@ function useBridgeRefresh() {
|
|
|
7276
7336
|
const { fromChain, toChain } = useChainsStore();
|
|
7277
7337
|
const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();
|
|
7278
7338
|
const { hasAnyWallet } = useConnectedWalletsStore();
|
|
7279
|
-
const [spinning, setSpinning] =
|
|
7280
|
-
const refresh =
|
|
7339
|
+
const [spinning, setSpinning] = React.useState(false);
|
|
7340
|
+
const refresh = React.useCallback(async () => {
|
|
7281
7341
|
setSpinning(true);
|
|
7282
7342
|
try {
|
|
7283
7343
|
setQLoading();
|
|
@@ -7330,8 +7390,8 @@ function useBridgeRefresh() {
|
|
|
7330
7390
|
}
|
|
7331
7391
|
const RefreshButton = () => {
|
|
7332
7392
|
const { refresh, spinning } = useBridgeRefresh();
|
|
7333
|
-
const [turns, setTurns] =
|
|
7334
|
-
const handleRefresh =
|
|
7393
|
+
const [turns, setTurns] = React.useState(0);
|
|
7394
|
+
const handleRefresh = React.useCallback(() => {
|
|
7335
7395
|
setTurns((t2) => t2 + 1);
|
|
7336
7396
|
refresh();
|
|
7337
7397
|
}, [refresh]);
|
|
@@ -7360,7 +7420,7 @@ const SelectTokenButton = ({
|
|
|
7360
7420
|
token
|
|
7361
7421
|
}) => {
|
|
7362
7422
|
const { t: t2 } = useBridgeTranslation();
|
|
7363
|
-
const label =
|
|
7423
|
+
const label = React.useMemo(() => {
|
|
7364
7424
|
return token?.symbol ?? t2("bridge.selectToken");
|
|
7365
7425
|
}, [token, t2]);
|
|
7366
7426
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -7398,8 +7458,8 @@ const Toolbar = () => {
|
|
|
7398
7458
|
onOpen: onOpenSettings
|
|
7399
7459
|
} = useModal();
|
|
7400
7460
|
const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
|
|
7401
|
-
const assets =
|
|
7402
|
-
const current =
|
|
7461
|
+
const assets = React.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
|
|
7462
|
+
const current = React.useMemo(() => {
|
|
7403
7463
|
if (!assets.length) return void 0;
|
|
7404
7464
|
if (!selectedAssetSymbol) return assets[0];
|
|
7405
7465
|
const sum = selectedAssetSymbol.toUpperCase();
|
|
@@ -7445,8 +7505,8 @@ const useAutoSelectNetwork = ({
|
|
|
7445
7505
|
}) => {
|
|
7446
7506
|
const { hasAnyWallet } = useConnectedWalletsStore();
|
|
7447
7507
|
const { chains, setFromChain } = useChainsStore();
|
|
7448
|
-
const previousHadWallet =
|
|
7449
|
-
|
|
7508
|
+
const previousHadWallet = React.useRef(hasAnyWallet());
|
|
7509
|
+
React.useEffect(() => {
|
|
7450
7510
|
const currentHasWallet = hasAnyWallet();
|
|
7451
7511
|
const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;
|
|
7452
7512
|
if (isFirstWalletConnection && chains?.length) {
|
|
@@ -26087,7 +26147,7 @@ class WalletConnectModal {
|
|
|
26087
26147
|
}
|
|
26088
26148
|
async initUi() {
|
|
26089
26149
|
if (typeof window !== "undefined") {
|
|
26090
|
-
await Promise.resolve().then(() => require("./index-
|
|
26150
|
+
await Promise.resolve().then(() => require("./index-Btnz7slS.cjs"));
|
|
26091
26151
|
const modal = document.createElement("wcm-modal");
|
|
26092
26152
|
document.body.insertAdjacentElement("beforeend", modal);
|
|
26093
26153
|
OptionsCtrl.setIsUiLoaded(true);
|
|
@@ -26193,16 +26253,16 @@ function isSessionExpiredError(error) {
|
|
|
26193
26253
|
function useTronWalletConnect(projectId) {
|
|
26194
26254
|
const { address, isConnected, isConnecting } = useTronWalletConnectStore();
|
|
26195
26255
|
const { setAddress, setActions, reset } = useTronWalletConnectStore();
|
|
26196
|
-
const providerRef =
|
|
26197
|
-
const modalRef =
|
|
26198
|
-
const abortControllerRef =
|
|
26256
|
+
const providerRef = React.useRef(null);
|
|
26257
|
+
const modalRef = React.useRef(null);
|
|
26258
|
+
const abortControllerRef = React.useRef(null);
|
|
26199
26259
|
const { onClose: closeWalletSelectModal } = useWalletSelectModal();
|
|
26200
26260
|
const appliedTheme = useThemeStore((state2) => state2.appliedTheme);
|
|
26201
|
-
const closeWalletSelectModalRef =
|
|
26261
|
+
const closeWalletSelectModalRef = React.useRef(closeWalletSelectModal);
|
|
26202
26262
|
closeWalletSelectModalRef.current = closeWalletSelectModal;
|
|
26203
|
-
const appliedThemeRef =
|
|
26263
|
+
const appliedThemeRef = React.useRef(appliedTheme);
|
|
26204
26264
|
appliedThemeRef.current = appliedTheme;
|
|
26205
|
-
|
|
26265
|
+
React.useEffect(() => {
|
|
26206
26266
|
if (!projectId || providerRef.current) return;
|
|
26207
26267
|
const initProvider = async () => {
|
|
26208
26268
|
try {
|
|
@@ -26275,7 +26335,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26275
26335
|
}
|
|
26276
26336
|
};
|
|
26277
26337
|
}, [projectId, setAddress]);
|
|
26278
|
-
|
|
26338
|
+
React.useEffect(() => {
|
|
26279
26339
|
if (!projectId || !modalRef.current) return;
|
|
26280
26340
|
const modal = new WalletConnectModal({
|
|
26281
26341
|
projectId,
|
|
@@ -26287,7 +26347,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26287
26347
|
});
|
|
26288
26348
|
modalRef.current = modal;
|
|
26289
26349
|
}, [appliedTheme, projectId]);
|
|
26290
|
-
const connect =
|
|
26350
|
+
const connect = React.useCallback(async () => {
|
|
26291
26351
|
if (!providerRef.current) {
|
|
26292
26352
|
throw new Error(
|
|
26293
26353
|
"WalletConnect not initialized. Please provide a valid project ID."
|
|
@@ -26355,7 +26415,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26355
26415
|
abortControllerRef.current = null;
|
|
26356
26416
|
}
|
|
26357
26417
|
}, [setAddress]);
|
|
26358
|
-
const cancelConnection =
|
|
26418
|
+
const cancelConnection = React.useCallback(() => {
|
|
26359
26419
|
if (abortControllerRef.current) {
|
|
26360
26420
|
abortControllerRef.current.abort();
|
|
26361
26421
|
console.log("TRON WalletConnect connection cancelled");
|
|
@@ -26364,7 +26424,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26364
26424
|
modalRef.current.closeModal();
|
|
26365
26425
|
}
|
|
26366
26426
|
}, []);
|
|
26367
|
-
const disconnect =
|
|
26427
|
+
const disconnect = React.useCallback(async () => {
|
|
26368
26428
|
if (!providerRef.current) return;
|
|
26369
26429
|
try {
|
|
26370
26430
|
await providerRef.current.disconnect();
|
|
@@ -26375,7 +26435,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26375
26435
|
throw error;
|
|
26376
26436
|
}
|
|
26377
26437
|
}, [reset]);
|
|
26378
|
-
const signTransaction =
|
|
26438
|
+
const signTransaction = React.useCallback(
|
|
26379
26439
|
async (transaction2) => {
|
|
26380
26440
|
if (!providerRef.current) {
|
|
26381
26441
|
throw new Error("WalletConnect not initialized");
|
|
@@ -26442,7 +26502,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26442
26502
|
},
|
|
26443
26503
|
[address, setAddress]
|
|
26444
26504
|
);
|
|
26445
|
-
const onAddressCorrected =
|
|
26505
|
+
const onAddressCorrected = React.useCallback(
|
|
26446
26506
|
(correctedAddress) => {
|
|
26447
26507
|
console.log(
|
|
26448
26508
|
"TRON WalletConnect address corrected:",
|
|
@@ -26454,7 +26514,7 @@ function useTronWalletConnect(projectId) {
|
|
|
26454
26514
|
},
|
|
26455
26515
|
[address, setAddress]
|
|
26456
26516
|
);
|
|
26457
|
-
|
|
26517
|
+
React.useEffect(() => {
|
|
26458
26518
|
setActions({
|
|
26459
26519
|
connect,
|
|
26460
26520
|
disconnect,
|
|
@@ -26512,10 +26572,10 @@ function useUrlSync(options) {
|
|
|
26512
26572
|
const { setInputAmount } = useBridgeQuoteStore();
|
|
26513
26573
|
const internalData = useBridgeExternalData();
|
|
26514
26574
|
const currentUrlParams = internalData.urlParams;
|
|
26515
|
-
const [hasInitialized, setHasInitialized] =
|
|
26516
|
-
const isSyncingRef =
|
|
26517
|
-
const lastSyncedParamsRef =
|
|
26518
|
-
const validateParams =
|
|
26575
|
+
const [hasInitialized, setHasInitialized] = React.useState(false);
|
|
26576
|
+
const isSyncingRef = React.useRef(false);
|
|
26577
|
+
const lastSyncedParamsRef = React.useRef({});
|
|
26578
|
+
const validateParams = React.useCallback(
|
|
26519
26579
|
(urlParams) => {
|
|
26520
26580
|
const result = {};
|
|
26521
26581
|
if (!chains?.length || !tokens?.length || !assetMatrix) {
|
|
@@ -26568,7 +26628,7 @@ function useUrlSync(options) {
|
|
|
26568
26628
|
},
|
|
26569
26629
|
[chains, tokens, assetMatrix]
|
|
26570
26630
|
);
|
|
26571
|
-
const syncStateToUrl =
|
|
26631
|
+
const syncStateToUrl = React.useCallback(
|
|
26572
26632
|
(includeAmount = false) => {
|
|
26573
26633
|
if (!enabled || isSyncingRef.current || !hasInitialized) {
|
|
26574
26634
|
return;
|
|
@@ -26590,11 +26650,11 @@ function useUrlSync(options) {
|
|
|
26590
26650
|
},
|
|
26591
26651
|
[enabled, hasInitialized, currentUrlParams, onUrlParamsChange]
|
|
26592
26652
|
);
|
|
26593
|
-
const handleAmountBlur =
|
|
26653
|
+
const handleAmountBlur = React.useCallback(() => {
|
|
26594
26654
|
if (!enabled || !hasInitialized) return;
|
|
26595
26655
|
syncStateToUrl(true);
|
|
26596
26656
|
}, [enabled, hasInitialized, syncStateToUrl]);
|
|
26597
|
-
|
|
26657
|
+
React.useEffect(() => {
|
|
26598
26658
|
if (!enabled || !chains?.length || !tokens?.length) {
|
|
26599
26659
|
return;
|
|
26600
26660
|
}
|
|
@@ -26640,7 +26700,7 @@ function useUrlSync(options) {
|
|
|
26640
26700
|
setInputAmount,
|
|
26641
26701
|
setIsUrlInitialized
|
|
26642
26702
|
]);
|
|
26643
|
-
|
|
26703
|
+
React.useEffect(() => {
|
|
26644
26704
|
if (!enabled || !hasInitialized) return;
|
|
26645
26705
|
syncStateToUrl(false);
|
|
26646
26706
|
}, [
|
|
@@ -26664,7 +26724,7 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26664
26724
|
const { disconnect: evmDisconnect } = wagmi.useDisconnect();
|
|
26665
26725
|
const { data: walletClient } = wagmi.useWalletClient();
|
|
26666
26726
|
const publicClient = wagmi.usePublicClient();
|
|
26667
|
-
const getPublicClientForChain =
|
|
26727
|
+
const getPublicClientForChain = React.useCallback(
|
|
26668
26728
|
(chainId) => {
|
|
26669
26729
|
try {
|
|
26670
26730
|
const client = wagmiConfig.getClient({
|
|
@@ -26684,15 +26744,15 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26684
26744
|
connect: tronConnect,
|
|
26685
26745
|
disconnect: tronDisconnect
|
|
26686
26746
|
} = tronwalletAdapterReactHooks.useWallet();
|
|
26687
|
-
const tronSelectRef =
|
|
26688
|
-
const tronConnectRef =
|
|
26689
|
-
const tronDisconnectRef =
|
|
26690
|
-
|
|
26747
|
+
const tronSelectRef = React.useRef(tronSelect);
|
|
26748
|
+
const tronConnectRef = React.useRef(tronConnect);
|
|
26749
|
+
const tronDisconnectRef = React.useRef(tronDisconnect);
|
|
26750
|
+
React.useEffect(() => {
|
|
26691
26751
|
tronSelectRef.current = tronSelect;
|
|
26692
26752
|
tronConnectRef.current = tronConnect;
|
|
26693
26753
|
tronDisconnectRef.current = tronDisconnect;
|
|
26694
26754
|
}, [tronSelect, tronConnect, tronDisconnect]);
|
|
26695
|
-
const tronLinkActions =
|
|
26755
|
+
const tronLinkActions = React.useMemo(
|
|
26696
26756
|
() => ({
|
|
26697
26757
|
select: (adapterName) => tronSelectRef.current(adapterName),
|
|
26698
26758
|
connect: () => tronConnectRef.current(),
|
|
@@ -26702,14 +26762,14 @@ const EvaaBridgeWithProviders = (props) => {
|
|
|
26702
26762
|
);
|
|
26703
26763
|
const tronWalletConnect = useTronWalletConnect(props.walletConnectProjectId);
|
|
26704
26764
|
const { setTonConnected, setMetaMaskConnected, setTronConnected } = useConnectedWalletsStore();
|
|
26705
|
-
|
|
26765
|
+
React.useEffect(() => {
|
|
26706
26766
|
setTonConnected(!!tonAddress);
|
|
26707
26767
|
}, [tonAddress, setTonConnected]);
|
|
26708
|
-
|
|
26768
|
+
React.useEffect(() => {
|
|
26709
26769
|
setMetaMaskConnected(!!evmIsConnected);
|
|
26710
26770
|
}, [evmIsConnected, setMetaMaskConnected]);
|
|
26711
26771
|
const isAnyTronConnected = !!tronConnected || !!tronWalletConnect.isConnected;
|
|
26712
|
-
|
|
26772
|
+
React.useEffect(() => {
|
|
26713
26773
|
setTronConnected(isAnyTronConnected);
|
|
26714
26774
|
}, [isAnyTronConnected, setTronConnected]);
|
|
26715
26775
|
useAutoSelectNetwork({
|
|
@@ -26798,7 +26858,7 @@ const EvaaBridgeContent = ({
|
|
|
26798
26858
|
const canSwap = Boolean(
|
|
26799
26859
|
fromChain && toChain && selectedAssetSymbol && isAllowedFromChain(toChain.chainKey)
|
|
26800
26860
|
);
|
|
26801
|
-
const outputAmount =
|
|
26861
|
+
const outputAmount = React.useMemo(() => {
|
|
26802
26862
|
if (!quote || loading) return "";
|
|
26803
26863
|
const srcToken = resolveTokenOnChainFromMatrix$1(
|
|
26804
26864
|
assetMatrix,
|
|
@@ -26820,35 +26880,35 @@ const EvaaBridgeContent = ({
|
|
|
26820
26880
|
fromChain?.chainKey,
|
|
26821
26881
|
toChain?.chainKey
|
|
26822
26882
|
]);
|
|
26823
|
-
|
|
26883
|
+
React.useEffect(() => {
|
|
26824
26884
|
if (chains?.length && onInitialized) {
|
|
26825
26885
|
onInitialized();
|
|
26826
26886
|
}
|
|
26827
26887
|
}, [chains, onInitialized]);
|
|
26828
|
-
const handleAmountChange =
|
|
26888
|
+
const handleAmountChange = React.useCallback(
|
|
26829
26889
|
(newAmount) => {
|
|
26830
26890
|
setAmountAction(newAmount);
|
|
26831
26891
|
},
|
|
26832
26892
|
[setAmountAction]
|
|
26833
26893
|
);
|
|
26834
|
-
const handleFromChainChange =
|
|
26894
|
+
const handleFromChainChange = React.useCallback(
|
|
26835
26895
|
(chain2) => {
|
|
26836
26896
|
if (!chain2) return;
|
|
26837
26897
|
setFromChainAction(chain2);
|
|
26838
26898
|
},
|
|
26839
26899
|
[setFromChainAction]
|
|
26840
26900
|
);
|
|
26841
|
-
const handleToChainChange =
|
|
26901
|
+
const handleToChainChange = React.useCallback(
|
|
26842
26902
|
(chain2) => {
|
|
26843
26903
|
if (!chain2) return;
|
|
26844
26904
|
setToChainAction(chain2);
|
|
26845
26905
|
},
|
|
26846
26906
|
[setToChainAction]
|
|
26847
26907
|
);
|
|
26848
|
-
const handleSwapSides =
|
|
26908
|
+
const handleSwapSides = React.useCallback(() => {
|
|
26849
26909
|
swap.actions.swapSides();
|
|
26850
26910
|
}, [swap.actions]);
|
|
26851
|
-
const destinationChains =
|
|
26911
|
+
const destinationChains = React.useMemo(() => {
|
|
26852
26912
|
if (!chains || !selectedAssetSymbol || !assetMatrix) {
|
|
26853
26913
|
return allowedToChains ?? [];
|
|
26854
26914
|
}
|
|
@@ -26861,7 +26921,7 @@ const EvaaBridgeContent = ({
|
|
|
26861
26921
|
fromChain?.chainKey,
|
|
26862
26922
|
selectedAssetSymbol
|
|
26863
26923
|
]);
|
|
26864
|
-
const sourceChains =
|
|
26924
|
+
const sourceChains = React.useMemo(() => {
|
|
26865
26925
|
if (!chains || !assetMatrix) {
|
|
26866
26926
|
return allowedFromChains ?? [];
|
|
26867
26927
|
}
|
|
@@ -26989,4 +27049,4 @@ exports.useSettingsStore = useSettingsStore;
|
|
|
26989
27049
|
exports.useSwapModel = useSwapModel;
|
|
26990
27050
|
exports.useTokensStore = useTokensStore;
|
|
26991
27051
|
exports.useTransactionStore = useTransactionStore;
|
|
26992
|
-
//# sourceMappingURL=index-
|
|
27052
|
+
//# sourceMappingURL=index-bZ0S5sNd.cjs.map
|