@matchain/matchid-sdk-react 0.1.48-alpha.9 → 0.1.48
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/assets/icon/index.d.mts +8 -2
- package/dist/assets/icon/index.d.ts +8 -2
- package/dist/assets/icon/index.js +54 -2
- package/dist/assets/icon/index.js.map +1 -1
- package/dist/assets/icon/index.mjs +5 -1
- package/dist/{chunk-T72FT5NB.mjs → chunk-4I5WVXIN.mjs} +2 -2
- package/dist/chunk-5JHHHLG4.mjs +136 -0
- package/dist/chunk-5JHHHLG4.mjs.map +1 -0
- package/dist/{chunk-USKUYOYJ.mjs → chunk-FB5MHLWX.mjs} +75 -42
- package/dist/chunk-FB5MHLWX.mjs.map +1 -0
- package/dist/{chunk-7UTR37EJ.mjs → chunk-LHNKZISB.mjs} +54 -4
- package/dist/chunk-LHNKZISB.mjs.map +1 -0
- package/dist/{chunk-CI63DTB6.mjs → chunk-YSASIFLY.mjs} +2018 -702
- package/dist/chunk-YSASIFLY.mjs.map +1 -0
- package/dist/components/index.d.mts +4 -3
- package/dist/components/index.d.ts +4 -3
- package/dist/components/index.js +2265 -536
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +14 -3
- package/dist/hooks/api/index.d.mts +2 -2
- package/dist/hooks/api/index.d.ts +2 -2
- package/dist/hooks/api/index.js +363 -204
- package/dist/hooks/api/index.js.map +1 -1
- package/dist/hooks/api/index.mjs +5 -4
- package/dist/hooks/index.d.mts +3 -2
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/index.js +1532 -320
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +8 -3
- package/dist/index-BMfaixEx.d.mts +66 -0
- package/dist/{index-Bbn2Stvu.d.ts → index-BMsj8hJv.d.ts} +4 -3
- package/dist/{index-DcxdJ0m2.d.ts → index-BcEreCxd.d.ts} +1 -1
- package/dist/index-Bpmrd7mh.d.ts +66 -0
- package/dist/{index-C_S7k6z2.d.mts → index-Bvc8cjpN.d.ts} +34 -4
- package/dist/{index-Dzvj-uGt.d.mts → index-C9F6f2iz.d.mts} +4 -3
- package/dist/{index-D-uNr-JV.d.ts → index-C9qYyRgt.d.mts} +34 -4
- package/dist/{index-CB4j_ONH.d.mts → index-Cou96DpL.d.mts} +1 -1
- package/dist/{index-B7A0lN0C.d.mts → index-Cy3K-Yao.d.ts} +21 -6
- package/dist/{index-dhPbMbvL.d.ts → index-D4ju2J_e.d.mts} +21 -6
- package/dist/{index-DDV4F9ka.d.mts → index-DUHkH5t-.d.mts} +114 -65
- package/dist/{index-Bz53bbI_.d.ts → index-DcQm2dkr.d.ts} +114 -65
- package/dist/index.css +613 -10
- package/dist/index.d.mts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +2593 -1104
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -7
- package/dist/types/index.d.mts +2 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/{types-B4BYNw8B.d.mts → types-DzVVzMYU.d.mts} +62 -35
- package/dist/{types-B4BYNw8B.d.ts → types-DzVVzMYU.d.ts} +62 -35
- package/dist/ui/index.d.mts +4 -3
- package/dist/ui/index.d.ts +4 -3
- package/dist/ui/index.js +134 -95
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +2 -2
- package/dist/utils/index.d.mts +26 -0
- package/dist/utils/index.d.ts +26 -0
- package/dist/utils/index.js +181 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +30 -0
- package/dist/utils/index.mjs.map +1 -0
- package/example/src/pages/Wallet/components/MatchWallet.tsx +44 -9
- package/example/src/pages/Wallet/index.tsx +2 -1
- package/package.json +7 -1
- package/dist/chunk-7UTR37EJ.mjs.map +0 -1
- package/dist/chunk-CI63DTB6.mjs.map +0 -1
- package/dist/chunk-USKUYOYJ.mjs.map +0 -1
- package/dist/index-CKyWWkzU.d.mts +0 -60
- package/dist/index-DV_mRu4y.d.ts +0 -60
- /package/dist/{chunk-T72FT5NB.mjs.map → chunk-4I5WVXIN.mjs.map} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AlphaAvatar,
|
|
2
3
|
Button,
|
|
3
4
|
Field,
|
|
4
5
|
HashPanel_default,
|
|
@@ -9,13 +10,28 @@ import {
|
|
|
9
10
|
Overlay,
|
|
10
11
|
Popover,
|
|
11
12
|
Radio,
|
|
13
|
+
fail_default,
|
|
12
14
|
matchlog_default,
|
|
15
|
+
success_default,
|
|
13
16
|
useDownMd,
|
|
17
|
+
useHash,
|
|
14
18
|
useLayout_exports
|
|
15
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-FB5MHLWX.mjs";
|
|
20
|
+
import {
|
|
21
|
+
NumberFormatter,
|
|
22
|
+
encodeBase64,
|
|
23
|
+
formatAddress,
|
|
24
|
+
formatDate,
|
|
25
|
+
getAppClientId,
|
|
26
|
+
getVersion,
|
|
27
|
+
isValidEmail,
|
|
28
|
+
isValidUsername,
|
|
29
|
+
truncateAddress
|
|
30
|
+
} from "./chunk-5JHHHLG4.mjs";
|
|
16
31
|
import {
|
|
17
32
|
ArrowDownIcon,
|
|
18
33
|
ArrowRightIcon,
|
|
34
|
+
ArrowSendIcon,
|
|
19
35
|
BTCDarkIcon,
|
|
20
36
|
BTCLightIcon,
|
|
21
37
|
BitgetIcon,
|
|
@@ -33,8 +49,10 @@ import {
|
|
|
33
49
|
GithubIcon,
|
|
34
50
|
GoogleIcon,
|
|
35
51
|
InfoLineIcon,
|
|
52
|
+
InfoRoundIcon,
|
|
36
53
|
LeatherIcon,
|
|
37
54
|
LinkedinIcon,
|
|
55
|
+
LoadingIcon_default,
|
|
38
56
|
LoginIcon_default,
|
|
39
57
|
OKXIcon,
|
|
40
58
|
SOLDarkIcon,
|
|
@@ -44,6 +62,7 @@ import {
|
|
|
44
62
|
TelegramIcon,
|
|
45
63
|
TonLightIcon,
|
|
46
64
|
TonLightIcon2,
|
|
65
|
+
TransferIcon,
|
|
47
66
|
TronLinkIcon,
|
|
48
67
|
UnLoginIcon_default,
|
|
49
68
|
UnisatIcon,
|
|
@@ -51,7 +70,7 @@ import {
|
|
|
51
70
|
XIcon,
|
|
52
71
|
XverseIcon,
|
|
53
72
|
YoutubeIcon
|
|
54
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-LHNKZISB.mjs";
|
|
55
74
|
import {
|
|
56
75
|
__export
|
|
57
76
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -75,42 +94,20 @@ __export(components_exports, {
|
|
|
75
94
|
SOLModal: () => SOLModal,
|
|
76
95
|
TONModal: () => TONModal,
|
|
77
96
|
TRONModal: () => TRONModal,
|
|
97
|
+
TokenDetail: () => TokenDetail,
|
|
98
|
+
TokenSend: () => TokenSend,
|
|
99
|
+
TokenSendList: () => TokenSendList,
|
|
100
|
+
TransactionList: () => TransactionList,
|
|
78
101
|
UsernameModal: () => UsernameModal,
|
|
102
|
+
WalletAsset: () => WalletAsset,
|
|
79
103
|
WalletModal: () => WalletModal
|
|
80
104
|
});
|
|
81
105
|
|
|
82
106
|
// src/components/EmailModal/index.tsx
|
|
83
|
-
import { useEffect as
|
|
107
|
+
import { useEffect as useEffect15, useState as useState14 } from "react";
|
|
84
108
|
|
|
85
109
|
// src/components/EmailModal/StepEmail.tsx
|
|
86
110
|
import { useEffect, useMemo, useState } from "react";
|
|
87
|
-
|
|
88
|
-
// src/utils/index.ts
|
|
89
|
-
var getVersion = () => {
|
|
90
|
-
return "0.0.2";
|
|
91
|
-
};
|
|
92
|
-
function encodeBase64(input) {
|
|
93
|
-
return btoa(unescape(encodeURIComponent(input)));
|
|
94
|
-
}
|
|
95
|
-
var isValidEmail = (email) => {
|
|
96
|
-
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
|
|
97
|
-
};
|
|
98
|
-
var isValidUsername = (username) => {
|
|
99
|
-
return /^[a-zA-Z0-9_-]+$/.test(username);
|
|
100
|
-
};
|
|
101
|
-
function truncateAddress(address2) {
|
|
102
|
-
if (address2.length <= 6) {
|
|
103
|
-
return address2;
|
|
104
|
-
}
|
|
105
|
-
const start = address2.slice(0, 4);
|
|
106
|
-
const end = address2.slice(-2);
|
|
107
|
-
return `${start}...${end}`;
|
|
108
|
-
}
|
|
109
|
-
function getAppClientId() {
|
|
110
|
-
return "react-sdk-" + getVersion();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// src/components/EmailModal/StepEmail.tsx
|
|
114
111
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
115
112
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
116
113
|
function StepEmail(props) {
|
|
@@ -371,11 +368,11 @@ var unBindApi = ({ type }) => {
|
|
|
371
368
|
data: { type }
|
|
372
369
|
});
|
|
373
370
|
};
|
|
374
|
-
var unBindWalletApi = ({ address
|
|
371
|
+
var unBindWalletApi = ({ address }) => {
|
|
375
372
|
return request_default({
|
|
376
373
|
url: `/api/v1/wallet/unbind`,
|
|
377
374
|
method: "POST",
|
|
378
|
-
data: { address
|
|
375
|
+
data: { address }
|
|
379
376
|
});
|
|
380
377
|
};
|
|
381
378
|
var verifyPohApi = ({
|
|
@@ -433,7 +430,7 @@ var getWalletNonceApi = (data) => {
|
|
|
433
430
|
};
|
|
434
431
|
var loginByWalletApi = ({
|
|
435
432
|
type,
|
|
436
|
-
address
|
|
433
|
+
address,
|
|
437
434
|
signature,
|
|
438
435
|
message,
|
|
439
436
|
connector_type,
|
|
@@ -442,7 +439,7 @@ var loginByWalletApi = ({
|
|
|
442
439
|
return request_default({
|
|
443
440
|
url: `/api/v1/login/wallet`,
|
|
444
441
|
method: "POST",
|
|
445
|
-
data: { type, address
|
|
442
|
+
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
446
443
|
});
|
|
447
444
|
};
|
|
448
445
|
var getWalletInitApi = (data) => {
|
|
@@ -454,7 +451,7 @@ var getWalletInitApi = (data) => {
|
|
|
454
451
|
};
|
|
455
452
|
var toBindWalletApi = ({
|
|
456
453
|
type,
|
|
457
|
-
address
|
|
454
|
+
address,
|
|
458
455
|
signature,
|
|
459
456
|
message,
|
|
460
457
|
connector_type,
|
|
@@ -463,7 +460,7 @@ var toBindWalletApi = ({
|
|
|
463
460
|
return request_default({
|
|
464
461
|
url: `/api/v1/wallet/bind`,
|
|
465
462
|
method: "POST",
|
|
466
|
-
data: { type, address
|
|
463
|
+
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
467
464
|
});
|
|
468
465
|
};
|
|
469
466
|
var getAppConfigApi = () => {
|
|
@@ -566,11 +563,11 @@ var persistedState = persist(
|
|
|
566
563
|
setToken: (token) => set({ token }),
|
|
567
564
|
setAppid: (appid) => set({ appid }),
|
|
568
565
|
setMid: (mid) => set({ mid }),
|
|
569
|
-
logout: () => set({ token: "", did: "", mid: "", address: "", overview: null }),
|
|
566
|
+
logout: () => set({ token: "", did: "", mid: "", address: "", overview: null, assets: [] }),
|
|
570
567
|
setTheme: (theme) => set({ theme }),
|
|
571
568
|
setEndpoints: (endpoints) => set({ endpoints }),
|
|
572
569
|
address: "",
|
|
573
|
-
setAddress: (
|
|
570
|
+
setAddress: (address) => set({ address }),
|
|
574
571
|
locale: "en",
|
|
575
572
|
setLocale: (locale) => set({ locale }),
|
|
576
573
|
wallet: {
|
|
@@ -578,7 +575,9 @@ var persistedState = persist(
|
|
|
578
575
|
},
|
|
579
576
|
setWallet: (wallet) => set({ wallet }),
|
|
580
577
|
chainId: 698,
|
|
581
|
-
setChainId: (chainId) => set({ chainId })
|
|
578
|
+
setChainId: (chainId) => set({ chainId }),
|
|
579
|
+
assets: [],
|
|
580
|
+
setAssets: (assets) => set({ assets })
|
|
582
581
|
}),
|
|
583
582
|
{ name: "match-local" }
|
|
584
583
|
);
|
|
@@ -587,7 +586,7 @@ var localStore = useLocalStore;
|
|
|
587
586
|
var useLocalStore_default = useLocalStore;
|
|
588
587
|
|
|
589
588
|
// src/hooks/useUserInfo.tsx
|
|
590
|
-
import { useMemo as
|
|
589
|
+
import { useMemo as useMemo7 } from "react";
|
|
591
590
|
|
|
592
591
|
// src/MatchContext.tsx
|
|
593
592
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
@@ -600,6 +599,8 @@ __export(hooks_exports, {
|
|
|
600
599
|
useMatchChain: () => useMatchChain,
|
|
601
600
|
useMatchEvents: () => useMatchEvents,
|
|
602
601
|
useMatchWallet: () => useMatchWallet,
|
|
602
|
+
useMatchWalletAssetList: () => useMatchWalletAssetList,
|
|
603
|
+
useMatchWalletAssets: () => useMatchWalletAssets,
|
|
603
604
|
useMatchWalletRecords: () => useMatchWalletRecords,
|
|
604
605
|
useModal: () => useModal,
|
|
605
606
|
useReceipt: () => useReceipt,
|
|
@@ -677,108 +678,112 @@ import { createWalletClient } from "viem";
|
|
|
677
678
|
import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
|
|
678
679
|
import { encodeDeployData } from "viem";
|
|
679
680
|
|
|
680
|
-
// src/
|
|
681
|
-
import {
|
|
681
|
+
// src/context/ModalContext.tsx
|
|
682
|
+
import { useState as useState2, useCallback, createContext, useContext } from "react";
|
|
683
|
+
import { createPortal } from "react-dom";
|
|
684
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
685
|
+
var ModalContext = createContext(null);
|
|
686
|
+
function ModalProvider({ children }) {
|
|
687
|
+
const [modalState, setModalState] = useState2({
|
|
688
|
+
modals: [],
|
|
689
|
+
highestZIndex: 100
|
|
690
|
+
});
|
|
691
|
+
const getNextIndex = useCallback(() => {
|
|
692
|
+
return Math.max(...modalState.modals.map((modal) => modal.index), 0) + 1 || 100;
|
|
693
|
+
}, [modalState]);
|
|
694
|
+
const closeModal = useCallback((index) => {
|
|
695
|
+
setModalState((prevState) => ({
|
|
696
|
+
modals: prevState.modals.filter((modal) => modal.index !== index),
|
|
697
|
+
highestZIndex: prevState.highestZIndex
|
|
698
|
+
}));
|
|
699
|
+
}, []);
|
|
700
|
+
const show = useCallback((content, index) => {
|
|
701
|
+
setModalState((prevState) => {
|
|
702
|
+
const modalIndex = index !== void 0 ? index : getNextIndex();
|
|
703
|
+
const newZIndex = prevState.highestZIndex + 1;
|
|
704
|
+
return {
|
|
705
|
+
modals: [...prevState.modals, {
|
|
706
|
+
visible: true,
|
|
707
|
+
index: modalIndex,
|
|
708
|
+
zIndex: newZIndex,
|
|
709
|
+
content: content({ close: () => closeModal(modalIndex), zIndex: newZIndex })
|
|
710
|
+
}],
|
|
711
|
+
highestZIndex: newZIndex
|
|
712
|
+
};
|
|
713
|
+
});
|
|
714
|
+
}, [getNextIndex, closeModal]);
|
|
715
|
+
const open = useCallback((props) => {
|
|
716
|
+
setModalState((prevState) => {
|
|
717
|
+
const modalIndex = props.index !== void 0 ? props.index : getNextIndex();
|
|
718
|
+
const newZIndex = prevState.highestZIndex + 1;
|
|
719
|
+
return {
|
|
720
|
+
modals: [...prevState.modals, {
|
|
721
|
+
visible: true,
|
|
722
|
+
index: modalIndex,
|
|
723
|
+
zIndex: newZIndex,
|
|
724
|
+
content: /* @__PURE__ */ jsx2(ModalDrawer, { showClose: true, isOpen: true, onClose: () => closeModal(modalIndex), title: props.title, zIndex: newZIndex, onBack: props.onBack, children: /* @__PURE__ */ jsx2(props.content, { close: () => closeModal(modalIndex), zIndex: newZIndex }) })
|
|
725
|
+
}],
|
|
726
|
+
highestZIndex: newZIndex
|
|
727
|
+
};
|
|
728
|
+
});
|
|
729
|
+
}, [getNextIndex, closeModal]);
|
|
730
|
+
const modalElements = modalState.modals.sort((a, b) => b.zIndex - a.zIndex).map(
|
|
731
|
+
(modal) => modal.visible ? createPortal(
|
|
732
|
+
modal.content,
|
|
733
|
+
document.body
|
|
734
|
+
) : null
|
|
735
|
+
);
|
|
736
|
+
return /* @__PURE__ */ jsxs2(ModalContext.Provider, { value: { show, open }, children: [
|
|
737
|
+
children,
|
|
738
|
+
modalElements
|
|
739
|
+
] });
|
|
740
|
+
}
|
|
741
|
+
function useModal() {
|
|
742
|
+
const context = useContext(ModalContext);
|
|
743
|
+
if (!context) {
|
|
744
|
+
throw new Error("useModal must be used within a ModalProvider");
|
|
745
|
+
}
|
|
746
|
+
return context;
|
|
747
|
+
}
|
|
682
748
|
|
|
683
|
-
// src/
|
|
684
|
-
import {
|
|
685
|
-
|
|
686
|
-
var
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
icon: /* @__PURE__ */ jsx2(SOLDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
698
|
-
activeIcon: /* @__PURE__ */ jsx2(SOLLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
699
|
-
name: "SOL",
|
|
700
|
-
method: "sol"
|
|
701
|
-
},
|
|
702
|
-
btc: {
|
|
703
|
-
icon: /* @__PURE__ */ jsx2(BTCDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
704
|
-
activeIcon: /* @__PURE__ */ jsx2(BTCLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
705
|
-
name: "BTC",
|
|
706
|
-
method: "btc"
|
|
707
|
-
},
|
|
708
|
-
tron: {
|
|
709
|
-
icon: /* @__PURE__ */ jsx2(TRXDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
710
|
-
activeIcon: /* @__PURE__ */ jsx2(TRXLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
711
|
-
name: "TRON",
|
|
712
|
-
method: "tron"
|
|
749
|
+
// src/store/useTransactionStore.ts
|
|
750
|
+
import { create as create3 } from "zustand";
|
|
751
|
+
import { devtools as devtools2, persist as persist2 } from "zustand/middleware";
|
|
752
|
+
var persistedState2 = persist2(
|
|
753
|
+
(set, get) => ({
|
|
754
|
+
transactions: {},
|
|
755
|
+
addTransaction: (data) => {
|
|
756
|
+
set((state) => {
|
|
757
|
+
const updatedTransactions = {
|
|
758
|
+
...state.transactions,
|
|
759
|
+
[`${data.chainId}-${data.address}`]: [data.info, ...state.transactions[`${data.chainId}-${data.address}`] || []]
|
|
760
|
+
};
|
|
761
|
+
return { transactions: updatedTransactions };
|
|
762
|
+
});
|
|
713
763
|
},
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
764
|
+
removeTransaction: (data) => {
|
|
765
|
+
set((state) => {
|
|
766
|
+
const updatedTransactions = {
|
|
767
|
+
...state.transactions,
|
|
768
|
+
[`${data.chainId}-${data.address}`]: (state.transactions[`${data.chainId}-${data.address}`] || []).filter((tx) => tx.hash !== data.hash)
|
|
769
|
+
};
|
|
770
|
+
return { transactions: updatedTransactions };
|
|
771
|
+
});
|
|
719
772
|
}
|
|
720
|
-
};
|
|
721
|
-
return {
|
|
722
|
-
walletMap
|
|
723
|
-
};
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
// src/store/useModalStore.ts
|
|
727
|
-
var useSOLModalStore = create3((set) => ({
|
|
728
|
-
isOpen: false,
|
|
729
|
-
type: "",
|
|
730
|
-
open: (type) => set({ isOpen: true, type }),
|
|
731
|
-
close: () => set({ isOpen: false })
|
|
732
|
-
}));
|
|
733
|
-
var useTRONModalStore = create3((set) => ({
|
|
734
|
-
isOpen: false,
|
|
735
|
-
type: "",
|
|
736
|
-
open: (type) => set({ isOpen: true, type }),
|
|
737
|
-
close: () => set({ isOpen: false })
|
|
738
|
-
}));
|
|
739
|
-
var useTONModalStore = create3((set) => ({
|
|
740
|
-
isOpen: false,
|
|
741
|
-
type: "",
|
|
742
|
-
open: (type) => set({ isOpen: true, type }),
|
|
743
|
-
close: () => set({ isOpen: false })
|
|
744
|
-
}));
|
|
745
|
-
var useBTCModalStore = create3((set) => ({
|
|
746
|
-
isOpen: false,
|
|
747
|
-
type: "",
|
|
748
|
-
open: (type) => set({ isOpen: true, type }),
|
|
749
|
-
close: () => set({ isOpen: false })
|
|
750
|
-
}));
|
|
751
|
-
var useCEXBindModalStore = create3((set) => ({
|
|
752
|
-
type: "",
|
|
753
|
-
isOpen: false,
|
|
754
|
-
open: (type) => set({ isOpen: true, type }),
|
|
755
|
-
close: () => set({ isOpen: false })
|
|
756
|
-
}));
|
|
757
|
-
var useHashPanelStore = create3((set) => ({
|
|
758
|
-
isOpen: false,
|
|
759
|
-
hash: null,
|
|
760
|
-
chain: null,
|
|
761
|
-
open: (params) => set({
|
|
762
|
-
isOpen: true,
|
|
763
|
-
hash: params?.hash || null,
|
|
764
|
-
chain: params?.chain || null
|
|
765
773
|
}),
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
var
|
|
769
|
-
|
|
770
|
-
type: "",
|
|
771
|
-
methods: [],
|
|
772
|
-
open: (type, methods = DEFAULT_WALLET_METHODS) => set({ isOpen: true, type, methods }),
|
|
773
|
-
close: () => set({ isOpen: false })
|
|
774
|
-
}));
|
|
774
|
+
{ name: "match-transactions-local" }
|
|
775
|
+
);
|
|
776
|
+
var useTransactionStore = create3(devtools2(persistedState2));
|
|
777
|
+
var useTransactionStore_default = useTransactionStore;
|
|
775
778
|
|
|
776
779
|
// src/hooks/useWallet.tsx
|
|
780
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
777
781
|
var AppClientId = "react-sdk-" + getVersion();
|
|
778
782
|
function useWallet() {
|
|
779
|
-
const { address
|
|
783
|
+
const { address, wallet: walletConfig } = useLocalStore_default();
|
|
780
784
|
const { walletReady } = useStore_default();
|
|
781
|
-
const
|
|
785
|
+
const modal = useModal();
|
|
786
|
+
const { addTransaction } = useTransactionStore_default();
|
|
782
787
|
const isRecovered = async () => {
|
|
783
788
|
const res = await window.matchProvider.waitUntilWalletMessage({
|
|
784
789
|
method: "isRecovered"
|
|
@@ -824,39 +829,44 @@ function useWallet() {
|
|
|
824
829
|
}
|
|
825
830
|
};
|
|
826
831
|
const evmAccount = useMemo2(() => {
|
|
827
|
-
|
|
828
|
-
address
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
chainType: "ethereum" /* Ethereum */,
|
|
843
|
-
chain: {
|
|
844
|
-
id: chain?.id || restTransaction.chainId,
|
|
845
|
-
name: chain?.name,
|
|
846
|
-
nativeCurrency: {
|
|
847
|
-
name: chain?.nativeCurrency?.name || "ETH",
|
|
848
|
-
symbol: chain?.nativeCurrency?.symbol || "ETH",
|
|
849
|
-
decimals: chain?.nativeCurrency?.decimals || 18
|
|
832
|
+
try {
|
|
833
|
+
return address ? toAccount({
|
|
834
|
+
address,
|
|
835
|
+
async signMessage({ message }) {
|
|
836
|
+
return await signMessage2({
|
|
837
|
+
message,
|
|
838
|
+
chainType: "ethereum" /* Ethereum */
|
|
839
|
+
});
|
|
840
|
+
},
|
|
841
|
+
async signTransaction(transaction, options) {
|
|
842
|
+
const { account, chain, ...restTransaction } = transaction;
|
|
843
|
+
console.log("qwe-sign-transaction", restTransaction, options);
|
|
844
|
+
return await signTransaction({
|
|
845
|
+
transaction: {
|
|
846
|
+
...restTransaction
|
|
850
847
|
},
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
848
|
+
chainType: "ethereum" /* Ethereum */,
|
|
849
|
+
chain: {
|
|
850
|
+
id: chain?.id || restTransaction.chainId,
|
|
851
|
+
name: chain?.name,
|
|
852
|
+
nativeCurrency: {
|
|
853
|
+
name: chain?.nativeCurrency?.name || "ETH",
|
|
854
|
+
symbol: chain?.nativeCurrency?.symbol || "ETH",
|
|
855
|
+
decimals: chain?.nativeCurrency?.decimals || 18
|
|
856
|
+
},
|
|
857
|
+
rpcUrls: chain?.rpcUrls
|
|
858
|
+
}
|
|
859
|
+
});
|
|
860
|
+
},
|
|
861
|
+
async signTypedData(typedData) {
|
|
862
|
+
return "0x";
|
|
863
|
+
}
|
|
864
|
+
}) : void 0;
|
|
865
|
+
} catch (error) {
|
|
866
|
+
console.error(`qwe-evm-account-error ${address}`, error);
|
|
867
|
+
return void 0;
|
|
868
|
+
}
|
|
869
|
+
}, [address]);
|
|
860
870
|
useEffect3(() => {
|
|
861
871
|
matchlog_default.log("qwe-evmAccount", evmAccount);
|
|
862
872
|
}, [evmAccount]);
|
|
@@ -922,13 +932,25 @@ function useWallet() {
|
|
|
922
932
|
prepareTransactionRequest
|
|
923
933
|
}
|
|
924
934
|
});
|
|
925
|
-
openHashPanel();
|
|
926
935
|
const txHash = await obj.sendRawTransaction({
|
|
927
936
|
serializedTransaction
|
|
928
937
|
});
|
|
929
|
-
|
|
938
|
+
addTransaction({
|
|
939
|
+
chainId,
|
|
930
940
|
hash: txHash,
|
|
931
|
-
|
|
941
|
+
info: {
|
|
942
|
+
from: evmAccount.address,
|
|
943
|
+
to: restTransaction.to,
|
|
944
|
+
value: (restTransaction.value || 0).toString(),
|
|
945
|
+
input: restTransaction.data,
|
|
946
|
+
timestamp: Math.floor(Date.now() / 1e3).toString(),
|
|
947
|
+
hash: txHash,
|
|
948
|
+
source: "local"
|
|
949
|
+
},
|
|
950
|
+
address: evmAccount.address
|
|
951
|
+
});
|
|
952
|
+
modal.show((props) => {
|
|
953
|
+
return /* @__PURE__ */ jsx3(HashPanel_default, { isOpen: true, onClose: props.close, zIndex: props.zIndex, hash: txHash, chain: _chain });
|
|
932
954
|
});
|
|
933
955
|
clearInterval(window.matchProvider.transactionMessageIntervalMap[transactionId].interval);
|
|
934
956
|
delete window.matchProvider.transactionMessageIntervalMap[transactionId];
|
|
@@ -949,7 +971,7 @@ function useWallet() {
|
|
|
949
971
|
});
|
|
950
972
|
};
|
|
951
973
|
const writeContract = async (parameters2) => {
|
|
952
|
-
const { abi, address:
|
|
974
|
+
const { abi, address: address2, args, dataSuffix, functionName, ...request3 } = parameters2;
|
|
953
975
|
const data = encodeFunctionData({
|
|
954
976
|
abi,
|
|
955
977
|
args,
|
|
@@ -957,7 +979,7 @@ function useWallet() {
|
|
|
957
979
|
});
|
|
958
980
|
return await sendTransaction({
|
|
959
981
|
data: `${data}${dataSuffix ? dataSuffix.replace("0x", "") : ""}`,
|
|
960
|
-
to:
|
|
982
|
+
to: address2,
|
|
961
983
|
...request3
|
|
962
984
|
});
|
|
963
985
|
};
|
|
@@ -971,7 +993,7 @@ function useWallet() {
|
|
|
971
993
|
return {
|
|
972
994
|
walletReady,
|
|
973
995
|
evmAccount,
|
|
974
|
-
address
|
|
996
|
+
address,
|
|
975
997
|
signMessage: signMessage2,
|
|
976
998
|
signTransaction,
|
|
977
999
|
isRecovered,
|
|
@@ -981,10 +1003,10 @@ function useWallet() {
|
|
|
981
1003
|
|
|
982
1004
|
// src/hooks/useCopyClipboard.ts
|
|
983
1005
|
import copy from "copy-to-clipboard";
|
|
984
|
-
import { useCallback, useEffect as useEffect4, useState as
|
|
1006
|
+
import { useCallback as useCallback2, useEffect as useEffect4, useState as useState4 } from "react";
|
|
985
1007
|
function useCopyClipboard(timeout = 500) {
|
|
986
|
-
const [isCopied, setIsCopied] =
|
|
987
|
-
const staticCopy =
|
|
1008
|
+
const [isCopied, setIsCopied] = useState4(false);
|
|
1009
|
+
const staticCopy = useCallback2((text) => {
|
|
988
1010
|
const didCopy = copy(text);
|
|
989
1011
|
setIsCopied(didCopy);
|
|
990
1012
|
}, []);
|
|
@@ -1002,48 +1024,6 @@ function useCopyClipboard(timeout = 500) {
|
|
|
1002
1024
|
return [isCopied, staticCopy];
|
|
1003
1025
|
}
|
|
1004
1026
|
|
|
1005
|
-
// src/context/ModalContext.tsx
|
|
1006
|
-
import { useState as useState4, useCallback as useCallback2, createContext, useContext } from "react";
|
|
1007
|
-
import { createPortal } from "react-dom";
|
|
1008
|
-
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1009
|
-
var ModalContext = createContext(null);
|
|
1010
|
-
function ModalProvider({ children }) {
|
|
1011
|
-
const [showModalState, setShowModalState] = useState4({
|
|
1012
|
-
visible: false,
|
|
1013
|
-
content: null
|
|
1014
|
-
});
|
|
1015
|
-
const closeShowModal = useCallback2(() => {
|
|
1016
|
-
setShowModalState({ visible: false, content: null });
|
|
1017
|
-
}, []);
|
|
1018
|
-
const show = useCallback2((content) => {
|
|
1019
|
-
setShowModalState({
|
|
1020
|
-
visible: true,
|
|
1021
|
-
content: content({ close: closeShowModal })
|
|
1022
|
-
});
|
|
1023
|
-
}, [closeShowModal]);
|
|
1024
|
-
const open = useCallback2((props) => {
|
|
1025
|
-
setShowModalState({
|
|
1026
|
-
visible: true,
|
|
1027
|
-
content: /* @__PURE__ */ jsx3(ModalDrawer, { showClose: true, isOpen: true, onClose: closeShowModal, title: props.title, children: /* @__PURE__ */ jsx3(props.content, { close: closeShowModal }) })
|
|
1028
|
-
});
|
|
1029
|
-
}, [closeShowModal]);
|
|
1030
|
-
const ShowModalComponent = showModalState.visible ? createPortal(
|
|
1031
|
-
showModalState.content,
|
|
1032
|
-
document.body
|
|
1033
|
-
) : null;
|
|
1034
|
-
return /* @__PURE__ */ jsxs2(ModalContext.Provider, { value: { show, open }, children: [
|
|
1035
|
-
children,
|
|
1036
|
-
ShowModalComponent
|
|
1037
|
-
] });
|
|
1038
|
-
}
|
|
1039
|
-
function useModal() {
|
|
1040
|
-
const context = useContext(ModalContext);
|
|
1041
|
-
if (!context) {
|
|
1042
|
-
throw new Error("useModal must be used within a ModalProvider");
|
|
1043
|
-
}
|
|
1044
|
-
return context;
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
1027
|
// src/context/ToastContext.tsx
|
|
1048
1028
|
import { useState as useState5, useCallback as useCallback3, createContext as createContext2, useContext as useContext2 } from "react";
|
|
1049
1029
|
import { createPortal as createPortal2 } from "react-dom";
|
|
@@ -1097,12 +1077,14 @@ function useToast() {
|
|
|
1097
1077
|
// src/hooks/api/wallet.ts
|
|
1098
1078
|
var wallet_exports = {};
|
|
1099
1079
|
__export(wallet_exports, {
|
|
1080
|
+
USER_IMPORT_TOKEN_LIST_KEY: () => USER_IMPORT_TOKEN_LIST_KEY,
|
|
1100
1081
|
getUserWalletTransactionsApi: () => getUserWalletTransactionsApi,
|
|
1101
1082
|
getWalletAssetListApi: () => getWalletAssetListApi,
|
|
1102
1083
|
getWalletListApi: () => getWalletListApi,
|
|
1103
1084
|
useAssetListQuery: () => useAssetListQuery,
|
|
1104
1085
|
useChainListQuery: () => useChainListQuery,
|
|
1105
1086
|
useImportTokenListQuery: () => useImportTokenListQuery,
|
|
1087
|
+
useWalletAssetListQuery: () => useWalletAssetListQuery,
|
|
1106
1088
|
useWalletChainListQuery: () => useWalletChainListQuery,
|
|
1107
1089
|
useWalletNftListQuery: () => useWalletNftListQuery,
|
|
1108
1090
|
userImportTokenApi: () => userImportTokenApi
|
|
@@ -1111,7 +1093,7 @@ import { useQuery } from "@tanstack/react-query";
|
|
|
1111
1093
|
function useChainListQuery(options) {
|
|
1112
1094
|
const { isLogin, token } = useUserInfo();
|
|
1113
1095
|
return useQuery({
|
|
1114
|
-
queryKey: ["match-chain-list", token],
|
|
1096
|
+
queryKey: ["match-user-chain-list", token],
|
|
1115
1097
|
queryFn: async () => {
|
|
1116
1098
|
const res = await getUserChainListApi();
|
|
1117
1099
|
if (!isSuccess(res)) {
|
|
@@ -1129,7 +1111,7 @@ function useAssetListQuery({
|
|
|
1129
1111
|
}) {
|
|
1130
1112
|
const { isLogin, token } = useUserInfo();
|
|
1131
1113
|
return useQuery({
|
|
1132
|
-
queryKey: ["match-
|
|
1114
|
+
queryKey: ["match-user-asset-list", token, chainId],
|
|
1133
1115
|
queryFn: async () => {
|
|
1134
1116
|
const res = await getUserWalletAssetApi({ chain_id: chainId.toString() });
|
|
1135
1117
|
if (!isSuccess(res)) {
|
|
@@ -1141,13 +1123,14 @@ function useAssetListQuery({
|
|
|
1141
1123
|
...options
|
|
1142
1124
|
});
|
|
1143
1125
|
}
|
|
1126
|
+
var USER_IMPORT_TOKEN_LIST_KEY = "match-user-import-token-list";
|
|
1144
1127
|
function useImportTokenListQuery({
|
|
1145
1128
|
chainId,
|
|
1146
1129
|
...options
|
|
1147
1130
|
}) {
|
|
1148
1131
|
const { isLogin, token } = useUserInfo();
|
|
1149
1132
|
return useQuery({
|
|
1150
|
-
queryKey: [
|
|
1133
|
+
queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId],
|
|
1151
1134
|
queryFn: async () => {
|
|
1152
1135
|
const res = await getUserImportTokenListApi({ chain_id: chainId.toString() });
|
|
1153
1136
|
if (!isSuccess(res)) {
|
|
@@ -1176,16 +1159,16 @@ function useWalletChainListQuery(options) {
|
|
|
1176
1159
|
}
|
|
1177
1160
|
function useWalletNftListQuery({
|
|
1178
1161
|
chainId,
|
|
1179
|
-
address
|
|
1162
|
+
address,
|
|
1180
1163
|
...options
|
|
1181
1164
|
}) {
|
|
1182
1165
|
const { isLogin, token } = useUserInfo();
|
|
1183
1166
|
return useQuery({
|
|
1184
|
-
queryKey: ["match-wallet-nft-list", token, chainId,
|
|
1167
|
+
queryKey: ["match-wallet-nft-list", token, chainId, address],
|
|
1185
1168
|
queryFn: async () => {
|
|
1186
1169
|
const res = await getWalletNftListApi({
|
|
1187
1170
|
chain_id: chainId.toString(),
|
|
1188
|
-
address
|
|
1171
|
+
address
|
|
1189
1172
|
});
|
|
1190
1173
|
if (!isSuccess(res)) {
|
|
1191
1174
|
return [];
|
|
@@ -1196,10 +1179,32 @@ function useWalletNftListQuery({
|
|
|
1196
1179
|
...options
|
|
1197
1180
|
});
|
|
1198
1181
|
}
|
|
1182
|
+
function useWalletAssetListQuery({
|
|
1183
|
+
chainId,
|
|
1184
|
+
address,
|
|
1185
|
+
...options
|
|
1186
|
+
}) {
|
|
1187
|
+
const { isLogin, token } = useUserInfo();
|
|
1188
|
+
return useQuery({
|
|
1189
|
+
queryKey: ["match-wallet-asset-list", token, chainId, address],
|
|
1190
|
+
queryFn: async () => {
|
|
1191
|
+
const res = await getWalletAssetListApi({
|
|
1192
|
+
chain_id: chainId,
|
|
1193
|
+
address
|
|
1194
|
+
});
|
|
1195
|
+
if (!isSuccess(res)) {
|
|
1196
|
+
return null;
|
|
1197
|
+
}
|
|
1198
|
+
return res.data;
|
|
1199
|
+
},
|
|
1200
|
+
enabled: isLogin,
|
|
1201
|
+
...options
|
|
1202
|
+
});
|
|
1203
|
+
}
|
|
1199
1204
|
|
|
1200
1205
|
// src/hooks/useMatchChain.tsx
|
|
1201
1206
|
import { useMemo as useMemo3, useState as useState6 } from "react";
|
|
1202
|
-
import { createPublicClient, http } from "viem";
|
|
1207
|
+
import { createPublicClient as createPublicClient2, formatUnits, http as http2, parseUnits } from "viem";
|
|
1203
1208
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1204
1209
|
function useMatchChain() {
|
|
1205
1210
|
const chainListQuery = useChainListQuery();
|
|
@@ -1263,9 +1268,9 @@ function useMatchChain() {
|
|
|
1263
1268
|
if (!chain) {
|
|
1264
1269
|
return null;
|
|
1265
1270
|
}
|
|
1266
|
-
return
|
|
1271
|
+
return createPublicClient2({
|
|
1267
1272
|
chain,
|
|
1268
|
-
transport:
|
|
1273
|
+
transport: http2()
|
|
1269
1274
|
});
|
|
1270
1275
|
}, [chain]);
|
|
1271
1276
|
return {
|
|
@@ -1275,86 +1280,139 @@ function useMatchChain() {
|
|
|
1275
1280
|
chain,
|
|
1276
1281
|
explorerLink,
|
|
1277
1282
|
showChangeNetwork,
|
|
1278
|
-
publicClient
|
|
1283
|
+
publicClient,
|
|
1284
|
+
formatUnits: (value) => {
|
|
1285
|
+
return formatUnits(value, chain?.nativeCurrency.decimals || 18);
|
|
1286
|
+
},
|
|
1287
|
+
parseUnits: (value) => {
|
|
1288
|
+
return parseUnits(value, chain?.nativeCurrency.decimals || 18);
|
|
1289
|
+
}
|
|
1279
1290
|
};
|
|
1280
1291
|
}
|
|
1281
1292
|
|
|
1282
1293
|
// src/hooks/useMatchWallet.tsx
|
|
1283
1294
|
import { QRCode } from "react-qrcode";
|
|
1284
|
-
import { useEffect as
|
|
1295
|
+
import { useEffect as useEffect7, useMemo as useMemo5, useRef, useState as useState8 } from "react";
|
|
1296
|
+
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
1285
1297
|
|
|
1286
|
-
//
|
|
1287
|
-
var
|
|
1298
|
+
// src/config/index.tsx
|
|
1299
|
+
var EMAIL_INTERVAL = 60;
|
|
1300
|
+
var EMAIL_CODE_LENGTH = 6;
|
|
1301
|
+
var NATIVE_TOKEN_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
1288
1302
|
|
|
1289
1303
|
// src/hooks/useMatchWallet.tsx
|
|
1304
|
+
import { erc20Abi as erc20Abi2, formatUnits as formatUnits2 } from "viem";
|
|
1305
|
+
|
|
1306
|
+
// src/store/useContractStore.ts
|
|
1307
|
+
import { create as create4 } from "zustand";
|
|
1308
|
+
import { devtools as devtools3, persist as persist3 } from "zustand/middleware";
|
|
1309
|
+
var persistedState3 = persist3(
|
|
1310
|
+
(set, get) => ({
|
|
1311
|
+
contracts: {},
|
|
1312
|
+
getContract: (chainId, contractAddress) => {
|
|
1313
|
+
const key = `${chainId}-${contractAddress.toLowerCase()}`;
|
|
1314
|
+
return get().contracts[key];
|
|
1315
|
+
},
|
|
1316
|
+
setContractName: (chainId, contractAddress, name) => {
|
|
1317
|
+
const key = `${chainId}-${contractAddress.toLowerCase()}`;
|
|
1318
|
+
set((state) => {
|
|
1319
|
+
const updatedContracts = {
|
|
1320
|
+
...state.contracts,
|
|
1321
|
+
[key]: { ...state.contracts[key], name }
|
|
1322
|
+
};
|
|
1323
|
+
return { contracts: updatedContracts };
|
|
1324
|
+
});
|
|
1325
|
+
},
|
|
1326
|
+
setContractSymbol: (chainId, contractAddress, symbol) => {
|
|
1327
|
+
const key = `${chainId}-${contractAddress.toLowerCase()}`;
|
|
1328
|
+
set((state) => {
|
|
1329
|
+
const updatedContracts = {
|
|
1330
|
+
...state.contracts,
|
|
1331
|
+
[key]: { ...state.contracts[key], symbol }
|
|
1332
|
+
};
|
|
1333
|
+
return { contracts: updatedContracts };
|
|
1334
|
+
});
|
|
1335
|
+
},
|
|
1336
|
+
setContractDecimals: (chainId, contractAddress, decimals) => {
|
|
1337
|
+
const key = `${chainId}-${contractAddress.toLowerCase()}`;
|
|
1338
|
+
set((state) => {
|
|
1339
|
+
const updatedContracts = {
|
|
1340
|
+
...state.contracts,
|
|
1341
|
+
[key]: { ...state.contracts[key], decimals }
|
|
1342
|
+
};
|
|
1343
|
+
return { contracts: updatedContracts };
|
|
1344
|
+
});
|
|
1345
|
+
},
|
|
1346
|
+
setContracts: (data) => {
|
|
1347
|
+
set((state) => {
|
|
1348
|
+
const newContracts = { ...state.contracts };
|
|
1349
|
+
data.forEach(({ chainId, contractAddress, info }) => {
|
|
1350
|
+
const key = `${chainId}-${contractAddress.toLowerCase()}`;
|
|
1351
|
+
newContracts[key] = { ...newContracts[key], ...info };
|
|
1352
|
+
});
|
|
1353
|
+
return { contracts: newContracts };
|
|
1354
|
+
});
|
|
1355
|
+
}
|
|
1356
|
+
}),
|
|
1357
|
+
{ name: "match-contract-local" }
|
|
1358
|
+
);
|
|
1359
|
+
var useContractStore = create4(devtools3(persistedState3));
|
|
1360
|
+
var useContractStore_default = useContractStore;
|
|
1361
|
+
|
|
1362
|
+
// src/hooks/useMatchWallet.tsx
|
|
1363
|
+
import { FormattedMessage as FormattedMessage3, useIntl as useIntl3 } from "react-intl";
|
|
1364
|
+
|
|
1365
|
+
// src/components/ImportToken/index.tsx
|
|
1366
|
+
import { useEffect as useEffect6, useMemo as useMemo4, useState as useState7 } from "react";
|
|
1367
|
+
import { FormattedMessage as FormattedMessage2, useIntl as useIntl2 } from "react-intl";
|
|
1368
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
1369
|
+
import { defineChain, erc20Abi } from "viem";
|
|
1370
|
+
|
|
1371
|
+
// src/hooks/useIsContract.ts
|
|
1372
|
+
import { createPublicClient as createPublicClient3, http as http3 } from "viem";
|
|
1373
|
+
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
1374
|
+
function useIsContract({
|
|
1375
|
+
address,
|
|
1376
|
+
chain,
|
|
1377
|
+
enabled
|
|
1378
|
+
}) {
|
|
1379
|
+
return useQuery2({
|
|
1380
|
+
queryKey: ["is_contract", chain?.id, address],
|
|
1381
|
+
queryFn: async () => {
|
|
1382
|
+
if (!chain) return false;
|
|
1383
|
+
if (!address) return false;
|
|
1384
|
+
const publicClient = createPublicClient3({
|
|
1385
|
+
chain,
|
|
1386
|
+
transport: http3()
|
|
1387
|
+
});
|
|
1388
|
+
const res = await publicClient.getCode({ address });
|
|
1389
|
+
return res !== null && res !== void 0;
|
|
1390
|
+
},
|
|
1391
|
+
enabled
|
|
1392
|
+
});
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
// src/components/ImportToken/index.tsx
|
|
1290
1396
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1291
|
-
|
|
1292
|
-
const
|
|
1293
|
-
const {
|
|
1294
|
-
const [
|
|
1295
|
-
const toast = useToast();
|
|
1296
|
-
const onCopy = () => {
|
|
1297
|
-
setCopied(address2);
|
|
1298
|
-
toast.success("Copied!");
|
|
1299
|
-
};
|
|
1300
|
-
const chainLink = chain.explorerLink("address/" + address2);
|
|
1301
|
-
return /* @__PURE__ */ jsxs5("div", { className: `matchid-receive-modal`, children: [
|
|
1302
|
-
/* @__PURE__ */ jsxs5("div", { className: "matchid-receive-container", children: [
|
|
1303
|
-
/* @__PURE__ */ jsx6("div", { className: `matchid-receive-text`, children: "Receive by scanning the QR code" }),
|
|
1304
|
-
/* @__PURE__ */ jsx6("div", { className: `matchid-qr-container`, children: /* @__PURE__ */ jsx6(
|
|
1305
|
-
QRCode,
|
|
1306
|
-
{
|
|
1307
|
-
margin: "0",
|
|
1308
|
-
className: `matchid-qr-code`,
|
|
1309
|
-
value: address2
|
|
1310
|
-
}
|
|
1311
|
-
) }),
|
|
1312
|
-
/* @__PURE__ */ jsx6(
|
|
1313
|
-
"a",
|
|
1314
|
-
{
|
|
1315
|
-
href: chainLink,
|
|
1316
|
-
target: "_blank",
|
|
1317
|
-
className: `matchid-receive-link`,
|
|
1318
|
-
children: address2
|
|
1319
|
-
}
|
|
1320
|
-
)
|
|
1321
|
-
] }),
|
|
1322
|
-
/* @__PURE__ */ jsx6(Button, { size: "lg", onClick: onCopy, block: true, highlight: true, disabled: copied, children: "Copy Address" })
|
|
1323
|
-
] });
|
|
1324
|
-
};
|
|
1325
|
-
var ImportTokenModal = ({ close }) => {
|
|
1326
|
-
const [address2, setAddress] = useState7("");
|
|
1397
|
+
function ImportToken({ close }) {
|
|
1398
|
+
const [status, setStatus] = useState7("");
|
|
1399
|
+
const { token } = useUserInfo();
|
|
1400
|
+
const [address, setAddress] = useState7("");
|
|
1327
1401
|
const [symbol, setSymbol] = useState7("");
|
|
1328
1402
|
const [decimals, setDecimals] = useState7("");
|
|
1329
1403
|
const [error, setError] = useState7({});
|
|
1330
|
-
const { publicClient, chainId } = useMatchChain();
|
|
1404
|
+
const { publicClient, chainId, chain } = useMatchChain();
|
|
1331
1405
|
const getContractInfo = async () => {
|
|
1332
1406
|
if (!publicClient) return;
|
|
1333
|
-
const erc20Abi = [
|
|
1334
|
-
{
|
|
1335
|
-
name: "decimals",
|
|
1336
|
-
type: "function",
|
|
1337
|
-
stateMutability: "view",
|
|
1338
|
-
inputs: [],
|
|
1339
|
-
outputs: [{ name: "decimals", type: "uint8" }]
|
|
1340
|
-
},
|
|
1341
|
-
{
|
|
1342
|
-
name: "symbol",
|
|
1343
|
-
type: "function",
|
|
1344
|
-
stateMutability: "view",
|
|
1345
|
-
inputs: [],
|
|
1346
|
-
outputs: [{ name: "symbol", type: "string" }]
|
|
1347
|
-
}
|
|
1348
|
-
];
|
|
1349
1407
|
const calls = [
|
|
1350
1408
|
{
|
|
1351
|
-
address
|
|
1409
|
+
address,
|
|
1352
1410
|
abi: erc20Abi,
|
|
1353
1411
|
functionName: "symbol",
|
|
1354
1412
|
args: []
|
|
1355
1413
|
},
|
|
1356
1414
|
{
|
|
1357
|
-
address
|
|
1415
|
+
address,
|
|
1358
1416
|
abi: erc20Abi,
|
|
1359
1417
|
functionName: "decimals",
|
|
1360
1418
|
args: []
|
|
@@ -1375,13 +1433,16 @@ var ImportTokenModal = ({ close }) => {
|
|
|
1375
1433
|
});
|
|
1376
1434
|
}
|
|
1377
1435
|
};
|
|
1436
|
+
const intl = useIntl2();
|
|
1378
1437
|
useEffect6(() => {
|
|
1379
|
-
if (
|
|
1438
|
+
if (address.length === 42) {
|
|
1380
1439
|
const reg = /^0x[0-9a-fA-F]{40}$/;
|
|
1381
|
-
if (!reg.test(
|
|
1440
|
+
if (!reg.test(address)) {
|
|
1382
1441
|
setError({
|
|
1383
1442
|
...error,
|
|
1384
|
-
address:
|
|
1443
|
+
address: intl.formatMessage({
|
|
1444
|
+
id: "tokenAddressError"
|
|
1445
|
+
})
|
|
1385
1446
|
});
|
|
1386
1447
|
} else {
|
|
1387
1448
|
setError({
|
|
@@ -1391,32 +1452,37 @@ var ImportTokenModal = ({ close }) => {
|
|
|
1391
1452
|
publicClient && getContractInfo();
|
|
1392
1453
|
}
|
|
1393
1454
|
}
|
|
1394
|
-
}, [
|
|
1455
|
+
}, [address, publicClient]);
|
|
1395
1456
|
const [loading, setLoading] = useState7(false);
|
|
1396
1457
|
const toast = useToast();
|
|
1458
|
+
const queryClient2 = useQueryClient();
|
|
1397
1459
|
const onImport = async () => {
|
|
1398
1460
|
setLoading(true);
|
|
1399
1461
|
try {
|
|
1400
1462
|
const res = await userImportTokenApi({
|
|
1401
1463
|
chain_id: chainId?.toString() || "",
|
|
1402
1464
|
symbol,
|
|
1403
|
-
address
|
|
1465
|
+
address,
|
|
1404
1466
|
decimals
|
|
1405
1467
|
});
|
|
1406
1468
|
if (isSuccess(res)) {
|
|
1407
|
-
|
|
1408
|
-
|
|
1469
|
+
setStatus("success");
|
|
1470
|
+
queryClient2.invalidateQueries({
|
|
1471
|
+
queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId]
|
|
1472
|
+
});
|
|
1409
1473
|
} else {
|
|
1474
|
+
setStatus("fail");
|
|
1410
1475
|
toast.error(res.message);
|
|
1411
1476
|
}
|
|
1412
1477
|
} catch (error2) {
|
|
1478
|
+
setStatus("fail");
|
|
1413
1479
|
toast.error(error2.message);
|
|
1414
1480
|
} finally {
|
|
1415
1481
|
setLoading(false);
|
|
1416
1482
|
}
|
|
1417
1483
|
};
|
|
1418
1484
|
const canImport = useMemo4(() => {
|
|
1419
|
-
if (!
|
|
1485
|
+
if (!address) {
|
|
1420
1486
|
return false;
|
|
1421
1487
|
}
|
|
1422
1488
|
if (!symbol) {
|
|
@@ -1426,35 +1492,62 @@ var ImportTokenModal = ({ close }) => {
|
|
|
1426
1492
|
return false;
|
|
1427
1493
|
}
|
|
1428
1494
|
const reg = /^0x[0-9a-fA-F]{40}$/;
|
|
1429
|
-
if (!reg.test(
|
|
1495
|
+
if (!reg.test(address)) {
|
|
1430
1496
|
return false;
|
|
1431
1497
|
}
|
|
1432
1498
|
return true;
|
|
1433
|
-
}, [error,
|
|
1499
|
+
}, [error, address, symbol, decimals]);
|
|
1500
|
+
const isContractQuery = useIsContract({
|
|
1501
|
+
//@ts-ignore
|
|
1502
|
+
chain: defineChain(chain),
|
|
1503
|
+
address,
|
|
1504
|
+
enabled: canImport
|
|
1505
|
+
});
|
|
1506
|
+
if (status == "success" || status == "fail") {
|
|
1507
|
+
return /* @__PURE__ */ jsxs5("div", { className: `matchid-import-token-result matchid-flex`, children: [
|
|
1508
|
+
/* @__PURE__ */ jsxs5("div", { className: `matchid-import-token-result-box matchid-flex`, children: [
|
|
1509
|
+
/* @__PURE__ */ jsx6("img", { src: status == "success" ? success_default : fail_default, alt: status == "success" ? "success" : "fail", className: `matchid-import-token-result-img` }),
|
|
1510
|
+
/* @__PURE__ */ jsx6("div", { className: `matchid-import-token-result-text matchid-import-token-result-text-${status}`, children: status == "success" ? /* @__PURE__ */ jsx6(FormattedMessage2, { id: "importSuccess" }) : /* @__PURE__ */ jsx6(FormattedMessage2, { id: "importFail" }) })
|
|
1511
|
+
] }),
|
|
1512
|
+
status == "success" ? /* @__PURE__ */ jsx6(Button, { size: "lg", onClick: close, block: true, highlight: true, children: /* @__PURE__ */ jsx6(FormattedMessage2, { id: "close" }) }) : /* @__PURE__ */ jsx6(Button, { size: "lg", onClick: () => setStatus(""), block: true, highlight: true, children: /* @__PURE__ */ jsx6(FormattedMessage2, { id: "back" }) })
|
|
1513
|
+
] });
|
|
1514
|
+
}
|
|
1434
1515
|
return /* @__PURE__ */ jsxs5("div", { className: `matchid-import-token`, children: [
|
|
1435
1516
|
/* @__PURE__ */ jsxs5("div", { className: "matchid-import-token-form", children: [
|
|
1436
|
-
/* @__PURE__ */ jsx6(Field, { label:
|
|
1517
|
+
/* @__PURE__ */ jsx6(Field, { label: intl.formatMessage({
|
|
1518
|
+
id: "tokenSmartContract"
|
|
1519
|
+
}), error: error.address ? error.address : isContractQuery.isFetched && !isContractQuery.isLoading && !isContractQuery.data && canImport ? "Address isn't a contract address" : "", children: /* @__PURE__ */ jsx6(
|
|
1437
1520
|
Input,
|
|
1438
1521
|
{
|
|
1439
|
-
placeholder:
|
|
1440
|
-
|
|
1522
|
+
placeholder: intl.formatMessage({
|
|
1523
|
+
id: "tokenSmartContractPlaceholder"
|
|
1524
|
+
}),
|
|
1525
|
+
value: address,
|
|
1441
1526
|
onChange: (e) => setAddress(e.target.value),
|
|
1442
1527
|
maxLength: 42
|
|
1443
1528
|
}
|
|
1444
1529
|
) }),
|
|
1445
|
-
/* @__PURE__ */ jsx6(Field, { label:
|
|
1530
|
+
/* @__PURE__ */ jsx6(Field, { label: intl.formatMessage({
|
|
1531
|
+
id: "tokenSymbol"
|
|
1532
|
+
}), error: error.symbol, children: /* @__PURE__ */ jsx6(
|
|
1446
1533
|
Input,
|
|
1447
1534
|
{
|
|
1448
|
-
placeholder:
|
|
1535
|
+
placeholder: intl.formatMessage({
|
|
1536
|
+
id: "tokenSymbolPlaceholder"
|
|
1537
|
+
}),
|
|
1449
1538
|
value: symbol,
|
|
1450
1539
|
onChange: (e) => setSymbol(e.target.value),
|
|
1451
1540
|
maxLength: 16
|
|
1452
1541
|
}
|
|
1453
1542
|
) }),
|
|
1454
|
-
/* @__PURE__ */ jsx6(Field, { label:
|
|
1543
|
+
/* @__PURE__ */ jsx6(Field, { label: intl.formatMessage({
|
|
1544
|
+
id: "tokenDecimals"
|
|
1545
|
+
}), error: error.decimals, children: /* @__PURE__ */ jsx6(
|
|
1455
1546
|
Input,
|
|
1456
1547
|
{
|
|
1457
|
-
placeholder:
|
|
1548
|
+
placeholder: intl.formatMessage({
|
|
1549
|
+
id: "tokenDecimalsPlaceholder"
|
|
1550
|
+
}),
|
|
1458
1551
|
type: "number",
|
|
1459
1552
|
value: decimals,
|
|
1460
1553
|
onChange: (e) => setDecimals(e.target.value)
|
|
@@ -1467,85 +1560,393 @@ var ImportTokenModal = ({ close }) => {
|
|
|
1467
1560
|
size: "lg",
|
|
1468
1561
|
onClick: onImport,
|
|
1469
1562
|
block: true,
|
|
1470
|
-
loading,
|
|
1471
|
-
disabled: !canImport,
|
|
1563
|
+
loading: loading || isContractQuery.isLoading,
|
|
1564
|
+
disabled: !canImport || !isContractQuery.data,
|
|
1472
1565
|
highlight: true,
|
|
1473
|
-
children: "
|
|
1566
|
+
children: /* @__PURE__ */ jsx6(FormattedMessage2, { id: "import" })
|
|
1474
1567
|
}
|
|
1475
1568
|
)
|
|
1476
1569
|
] });
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
// src/hooks/useMatchWallet.tsx
|
|
1573
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1574
|
+
var ReceiveModal = () => {
|
|
1575
|
+
const chain = useMatchChain();
|
|
1576
|
+
const { address } = useWallet();
|
|
1577
|
+
const [copied, setCopied] = useCopyClipboard();
|
|
1578
|
+
const toast = useToast();
|
|
1579
|
+
const intl = useIntl3();
|
|
1580
|
+
const onCopy = () => {
|
|
1581
|
+
setCopied(address);
|
|
1582
|
+
toast.success(intl.formatMessage({
|
|
1583
|
+
id: "copied"
|
|
1584
|
+
}));
|
|
1585
|
+
};
|
|
1586
|
+
const chainLink = chain.explorerLink("address/" + address);
|
|
1587
|
+
return /* @__PURE__ */ jsxs6("div", { className: `matchid-receive-modal`, children: [
|
|
1588
|
+
/* @__PURE__ */ jsxs6("div", { className: "matchid-receive-container", children: [
|
|
1589
|
+
/* @__PURE__ */ jsx7("div", { className: `matchid-receive-text`, children: /* @__PURE__ */ jsx7(FormattedMessage3, { id: "receiveQrcode" }) }),
|
|
1590
|
+
/* @__PURE__ */ jsx7("div", { className: `matchid-qr-container`, children: /* @__PURE__ */ jsx7(
|
|
1591
|
+
QRCode,
|
|
1592
|
+
{
|
|
1593
|
+
margin: "0",
|
|
1594
|
+
className: `matchid-qr-code`,
|
|
1595
|
+
value: address
|
|
1596
|
+
}
|
|
1597
|
+
) }),
|
|
1598
|
+
/* @__PURE__ */ jsx7(
|
|
1599
|
+
"a",
|
|
1600
|
+
{
|
|
1601
|
+
href: chainLink,
|
|
1602
|
+
target: "_blank",
|
|
1603
|
+
className: `matchid-receive-link`,
|
|
1604
|
+
children: address
|
|
1605
|
+
}
|
|
1606
|
+
)
|
|
1607
|
+
] }),
|
|
1608
|
+
/* @__PURE__ */ jsx7(Button, { size: "lg", onClick: onCopy, block: true, highlight: true, disabled: copied, children: /* @__PURE__ */ jsx7(
|
|
1609
|
+
FormattedMessage3,
|
|
1610
|
+
{
|
|
1611
|
+
id: "copyAddress"
|
|
1612
|
+
}
|
|
1613
|
+
) })
|
|
1614
|
+
] });
|
|
1477
1615
|
};
|
|
1478
1616
|
function useMatchWallet() {
|
|
1479
1617
|
const modal = useModal();
|
|
1618
|
+
const intl = useIntl3();
|
|
1480
1619
|
const showReceiveModal = () => {
|
|
1481
1620
|
modal.open({
|
|
1482
|
-
title:
|
|
1621
|
+
title: intl.formatMessage({
|
|
1622
|
+
id: "receive"
|
|
1623
|
+
}),
|
|
1483
1624
|
content: ReceiveModal
|
|
1484
1625
|
});
|
|
1485
1626
|
};
|
|
1486
1627
|
const showImportTokenModal = () => {
|
|
1487
1628
|
modal.open({
|
|
1488
|
-
title:
|
|
1489
|
-
|
|
1629
|
+
title: intl.formatMessage({
|
|
1630
|
+
id: "customizedToken"
|
|
1631
|
+
}),
|
|
1632
|
+
content: ImportToken
|
|
1633
|
+
});
|
|
1634
|
+
};
|
|
1635
|
+
const showSendListModal = () => {
|
|
1636
|
+
modal.open({
|
|
1637
|
+
title: intl.formatMessage({
|
|
1638
|
+
id: "send"
|
|
1639
|
+
}),
|
|
1640
|
+
content: TokenSendList
|
|
1490
1641
|
});
|
|
1491
1642
|
};
|
|
1492
1643
|
return {
|
|
1493
1644
|
showReceiveModal,
|
|
1494
|
-
showImportTokenModal
|
|
1645
|
+
showImportTokenModal,
|
|
1646
|
+
showSendListModal
|
|
1495
1647
|
};
|
|
1496
1648
|
}
|
|
1497
|
-
function useMatchWalletRecords({
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
const
|
|
1501
|
-
const
|
|
1502
|
-
const { chainId } = useMatchChain();
|
|
1649
|
+
function useMatchWalletRecords() {
|
|
1650
|
+
const [hasMore, setHasMore] = useState8(true);
|
|
1651
|
+
const [items, setItems] = useState8([]);
|
|
1652
|
+
const { chainId, publicClient } = useMatchChain();
|
|
1653
|
+
const { address } = useWallet();
|
|
1503
1654
|
const hasMoreRef = useRef(hasMore);
|
|
1655
|
+
const nextPageParamsRef = useRef(void 0);
|
|
1656
|
+
const { contracts, setContracts } = useContractStore_default();
|
|
1504
1657
|
const fetchMoreData = async () => {
|
|
1505
|
-
|
|
1658
|
+
const chainIdStr = chainId ? chainId.toString() : "";
|
|
1659
|
+
if (!hasMoreRef.current || !chainIdStr) {
|
|
1506
1660
|
return;
|
|
1507
1661
|
}
|
|
1508
|
-
const chainIdStr = chainId ? chainId.toString() : "";
|
|
1509
1662
|
const res = await getUserWalletTransactionsApi({
|
|
1510
1663
|
chain_id: chainIdStr,
|
|
1511
|
-
|
|
1512
|
-
offset: items.length
|
|
1664
|
+
...nextPageParamsRef.current
|
|
1513
1665
|
});
|
|
1514
1666
|
if (isSuccess(res)) {
|
|
1515
|
-
if (res.data && res.data.transactions.length > 0) {
|
|
1516
|
-
setItems(items.concat(res.data.transactions));
|
|
1667
|
+
if (res.data && res.data.transactions && res.data.transactions.length > 0) {
|
|
1668
|
+
setItems(items.concat(res.data.transactions || []));
|
|
1517
1669
|
}
|
|
1518
|
-
hasMoreRef.current = res.data && res.data.transactions.length >=
|
|
1519
|
-
setHasMore(
|
|
1670
|
+
hasMoreRef.current = res.data && res.data.transactions && res.data.transactions.length >= 50;
|
|
1671
|
+
setHasMore(hasMoreRef.current);
|
|
1672
|
+
nextPageParamsRef.current = res.data.next_page_params;
|
|
1520
1673
|
}
|
|
1521
1674
|
};
|
|
1522
1675
|
const onInit = async () => {
|
|
1676
|
+
nextPageParamsRef.current = void 0;
|
|
1523
1677
|
setItems([]);
|
|
1524
1678
|
setHasMore(true);
|
|
1525
1679
|
hasMoreRef.current = true;
|
|
1526
1680
|
fetchMoreData();
|
|
1527
1681
|
};
|
|
1528
|
-
|
|
1682
|
+
useEffect7(() => {
|
|
1529
1683
|
if (chainId && address) {
|
|
1530
1684
|
onInit();
|
|
1531
1685
|
}
|
|
1532
1686
|
}, [chainId, address]);
|
|
1687
|
+
const { transactions, removeTransaction } = useTransactionStore_default();
|
|
1688
|
+
const getContractInfoList = async (contractList) => {
|
|
1689
|
+
const contractUnique = Array.from(new Set(contractList)).filter((item) => {
|
|
1690
|
+
const contract = contracts[`${chainId}-${item.toLowerCase()}`];
|
|
1691
|
+
if (!contract) {
|
|
1692
|
+
return true;
|
|
1693
|
+
}
|
|
1694
|
+
if (!contract.symbol && !contract.name) {
|
|
1695
|
+
return true;
|
|
1696
|
+
}
|
|
1697
|
+
if (!contract.decimals) {
|
|
1698
|
+
return true;
|
|
1699
|
+
}
|
|
1700
|
+
return false;
|
|
1701
|
+
});
|
|
1702
|
+
const calls = [];
|
|
1703
|
+
for (const contract of contractUnique) {
|
|
1704
|
+
calls.push({
|
|
1705
|
+
address: contract,
|
|
1706
|
+
abi: erc20Abi2,
|
|
1707
|
+
functionName: "symbol",
|
|
1708
|
+
args: []
|
|
1709
|
+
});
|
|
1710
|
+
calls.push({
|
|
1711
|
+
address: contract,
|
|
1712
|
+
abi: erc20Abi2,
|
|
1713
|
+
functionName: "decimals",
|
|
1714
|
+
args: []
|
|
1715
|
+
});
|
|
1716
|
+
}
|
|
1717
|
+
const results = await publicClient?.multicall({ contracts: calls });
|
|
1718
|
+
if (results) {
|
|
1719
|
+
console.log("contract results", calls, results);
|
|
1720
|
+
const contractMap = [];
|
|
1721
|
+
for (let i = 0; i < contractUnique.length; i++) {
|
|
1722
|
+
const info = {};
|
|
1723
|
+
if (results[i * 2].status == "success") {
|
|
1724
|
+
info.symbol = results[i * 2].result;
|
|
1725
|
+
}
|
|
1726
|
+
if (results[i * 2 + 1].status == "success") {
|
|
1727
|
+
info.decimals = results[i * 2 + 1].result;
|
|
1728
|
+
}
|
|
1729
|
+
contractMap.push({
|
|
1730
|
+
chainId: chainId || 0,
|
|
1731
|
+
contractAddress: contractUnique[i],
|
|
1732
|
+
info
|
|
1733
|
+
});
|
|
1734
|
+
}
|
|
1735
|
+
setContracts(contractMap);
|
|
1736
|
+
}
|
|
1737
|
+
};
|
|
1738
|
+
const list = useMemo5(() => {
|
|
1739
|
+
const localTransactions = transactions[`${chainId}-${address}`] || [];
|
|
1740
|
+
const removeList = localTransactions.filter((n) => items.findIndex((m) => m.hash == n.hash) >= 0);
|
|
1741
|
+
removeList.forEach((item) => {
|
|
1742
|
+
removeTransaction({
|
|
1743
|
+
chainId: chainId || 0,
|
|
1744
|
+
hash: item.hash,
|
|
1745
|
+
address
|
|
1746
|
+
});
|
|
1747
|
+
});
|
|
1748
|
+
const saveList = localTransactions.filter((n) => items.findIndex((m) => m.hash == n.hash) < 0);
|
|
1749
|
+
const list2 = [
|
|
1750
|
+
...saveList,
|
|
1751
|
+
...items
|
|
1752
|
+
].sort((a, b) => {
|
|
1753
|
+
const btimestamp = typeof b.timestamp === "string" ? parseInt(b.timestamp) : b.timestamp;
|
|
1754
|
+
const atimestamp = typeof a.timestamp === "string" ? parseInt(a.timestamp) : a.timestamp;
|
|
1755
|
+
return btimestamp - atimestamp;
|
|
1756
|
+
});
|
|
1757
|
+
const contractList = list2.filter((item) => item.input.toLowerCase().substring(0, 10) == "0xa9059cbb").map((item) => item.to);
|
|
1758
|
+
getContractInfoList(contractList);
|
|
1759
|
+
return list2;
|
|
1760
|
+
}, [transactions, chainId, items, address]);
|
|
1533
1761
|
return {
|
|
1534
|
-
items,
|
|
1762
|
+
items: list,
|
|
1535
1763
|
fetchMoreData,
|
|
1536
1764
|
hasMore
|
|
1537
1765
|
};
|
|
1538
1766
|
}
|
|
1767
|
+
function useMatchWalletAssets({
|
|
1768
|
+
importTokenOptions,
|
|
1769
|
+
assetListOptions
|
|
1770
|
+
} = {}) {
|
|
1771
|
+
const { chainId, chain } = useMatchChain();
|
|
1772
|
+
const importTokenQuery = useImportTokenListQuery({
|
|
1773
|
+
chainId: chainId || 0,
|
|
1774
|
+
...importTokenOptions
|
|
1775
|
+
});
|
|
1776
|
+
const assetListQuery = useAssetListQuery({
|
|
1777
|
+
chainId: chainId || 0,
|
|
1778
|
+
...assetListOptions
|
|
1779
|
+
});
|
|
1780
|
+
const mergedAssets = useMemo5(() => {
|
|
1781
|
+
if (!assetListQuery.data && !importTokenQuery.data) return [];
|
|
1782
|
+
const assetList = (assetListQuery.data || []).map((asset) => ({
|
|
1783
|
+
...asset,
|
|
1784
|
+
isAuto: true
|
|
1785
|
+
}));
|
|
1786
|
+
const importTokens = (importTokenQuery.data || []).map((token) => ({
|
|
1787
|
+
...token,
|
|
1788
|
+
isCustom: true
|
|
1789
|
+
}));
|
|
1790
|
+
const assetMap = /* @__PURE__ */ new Map();
|
|
1791
|
+
assetList.forEach((asset) => {
|
|
1792
|
+
const key = `${asset.chain_id}-${asset.address.toLowerCase()}`;
|
|
1793
|
+
assetMap.set(key, asset);
|
|
1794
|
+
});
|
|
1795
|
+
importTokens.forEach((token) => {
|
|
1796
|
+
const key = `${token.chain_id}-${token.address.toLowerCase()}`;
|
|
1797
|
+
if (assetMap.has(key)) {
|
|
1798
|
+
const existing = assetMap.get(key);
|
|
1799
|
+
assetMap.set(key, {
|
|
1800
|
+
...existing,
|
|
1801
|
+
symbol: token.symbol,
|
|
1802
|
+
decimals: token.decimals,
|
|
1803
|
+
isCustom: true,
|
|
1804
|
+
isAuto: existing.isAuto ?? false
|
|
1805
|
+
});
|
|
1806
|
+
} else {
|
|
1807
|
+
assetMap.set(key, token);
|
|
1808
|
+
}
|
|
1809
|
+
});
|
|
1810
|
+
const list = Array.from(assetMap.values()).sort((a, b) => {
|
|
1811
|
+
return (b.isAuto ? 1 : 0) - (a.isAuto ? 1 : 0);
|
|
1812
|
+
});
|
|
1813
|
+
const nativeToken = list.find((asset) => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase());
|
|
1814
|
+
if (!nativeToken) {
|
|
1815
|
+
list.unshift({
|
|
1816
|
+
chain_id: chain?.id.toString() || "",
|
|
1817
|
+
address: NATIVE_TOKEN_ADDRESS,
|
|
1818
|
+
decimals: chain?.nativeCurrency.decimals || 18,
|
|
1819
|
+
symbol: chain?.nativeCurrency.symbol,
|
|
1820
|
+
name: chain?.nativeCurrency.name,
|
|
1821
|
+
balance: 0,
|
|
1822
|
+
icon: chain?.nativeCurrency.icon
|
|
1823
|
+
});
|
|
1824
|
+
}
|
|
1825
|
+
return list;
|
|
1826
|
+
}, [assetListQuery.data, importTokenQuery.data]);
|
|
1827
|
+
return {
|
|
1828
|
+
importTokenQuery,
|
|
1829
|
+
assetListQuery,
|
|
1830
|
+
mergedAssets
|
|
1831
|
+
};
|
|
1832
|
+
}
|
|
1833
|
+
var MULTICALL_LIMIT = 100;
|
|
1834
|
+
function useMatchWalletAssetList({
|
|
1835
|
+
list
|
|
1836
|
+
}) {
|
|
1837
|
+
const { publicClient, chain } = useMatchChain();
|
|
1838
|
+
const { address } = useWallet();
|
|
1839
|
+
const { assets, setAssets } = useLocalStore_default();
|
|
1840
|
+
const nativeToken = list.find((asset) => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase()) || {
|
|
1841
|
+
chain_id: chain?.id || "",
|
|
1842
|
+
address: NATIVE_TOKEN_ADDRESS,
|
|
1843
|
+
decimals: 18,
|
|
1844
|
+
symbol: chain?.nativeCurrency.symbol,
|
|
1845
|
+
name: chain?.nativeCurrency.name,
|
|
1846
|
+
balance: 0
|
|
1847
|
+
};
|
|
1848
|
+
const nativeBalanceQuery = useQuery3({
|
|
1849
|
+
queryKey: ["nativeBalance", nativeToken?.chain_id],
|
|
1850
|
+
queryFn: async () => {
|
|
1851
|
+
if (!nativeToken || !publicClient) return null;
|
|
1852
|
+
try {
|
|
1853
|
+
return await publicClient.getBalance({
|
|
1854
|
+
address
|
|
1855
|
+
});
|
|
1856
|
+
} catch (error) {
|
|
1857
|
+
console.error("Native Token Balance Error:", error);
|
|
1858
|
+
return null;
|
|
1859
|
+
}
|
|
1860
|
+
},
|
|
1861
|
+
enabled: !!nativeToken && !!publicClient,
|
|
1862
|
+
refetchInterval: 15e3,
|
|
1863
|
+
// Refresh every 15 seconds
|
|
1864
|
+
retry: 3
|
|
1865
|
+
// Retry up to 3 times if failed
|
|
1866
|
+
});
|
|
1867
|
+
const erc20Tokens = useMemo5(() => list.filter((asset) => asset.address !== NATIVE_TOKEN_ADDRESS), [list]);
|
|
1868
|
+
const erc20BalanceQuery = useQuery3({
|
|
1869
|
+
queryKey: ["erc20Balances", erc20Tokens.map((token) => token.address)],
|
|
1870
|
+
queryFn: async () => {
|
|
1871
|
+
if (!erc20Tokens.length || !publicClient) return [];
|
|
1872
|
+
const calls = erc20Tokens.map((token) => ({
|
|
1873
|
+
address: token.address,
|
|
1874
|
+
abi: erc20Abi2,
|
|
1875
|
+
functionName: "balanceOf",
|
|
1876
|
+
args: [address]
|
|
1877
|
+
}));
|
|
1878
|
+
let balances = [];
|
|
1879
|
+
for (let i = 0; i < calls.length; i += MULTICALL_LIMIT) {
|
|
1880
|
+
const batchCalls = calls.slice(i, i + MULTICALL_LIMIT);
|
|
1881
|
+
try {
|
|
1882
|
+
const results = await publicClient.multicall({ contracts: batchCalls });
|
|
1883
|
+
balances.push(...results);
|
|
1884
|
+
} catch (error) {
|
|
1885
|
+
console.error("MultiCall Error:", error);
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
return balances;
|
|
1889
|
+
},
|
|
1890
|
+
enabled: !!publicClient,
|
|
1891
|
+
refetchInterval: 15e3,
|
|
1892
|
+
// Refresh every 15 seconds
|
|
1893
|
+
retry: 3
|
|
1894
|
+
});
|
|
1895
|
+
const enrichedAssets = useMemo5(() => {
|
|
1896
|
+
if (!list) return [];
|
|
1897
|
+
const erc20Balances = erc20BalanceQuery.data || [];
|
|
1898
|
+
return list.map((asset) => {
|
|
1899
|
+
let balanceValue = "0";
|
|
1900
|
+
let balance = 0;
|
|
1901
|
+
const decimals = typeof asset.decimals === "string" ? parseInt(asset.decimals) : asset.decimals;
|
|
1902
|
+
const assetAddress = asset.address.toLowerCase();
|
|
1903
|
+
if (assetAddress === NATIVE_TOKEN_ADDRESS) {
|
|
1904
|
+
balanceValue = nativeBalanceQuery.data?.toString() || "0";
|
|
1905
|
+
balance = nativeBalanceQuery.data ? Number(formatUnits2(nativeBalanceQuery.data, decimals)) : 0;
|
|
1906
|
+
} else {
|
|
1907
|
+
const index = erc20Tokens.findIndex((t) => t.address.toLowerCase() === assetAddress);
|
|
1908
|
+
if (index !== -1 && erc20Balances[index] && erc20Balances[index].status === "success") {
|
|
1909
|
+
balance = Number(formatUnits2(erc20Balances[index].result, decimals));
|
|
1910
|
+
balanceValue = erc20Balances[index].result?.toString() || "0";
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
const value = asset.isAuto ? balance * (asset.price || 0) : 0;
|
|
1914
|
+
return { ...asset, balance, value, balanceValue };
|
|
1915
|
+
});
|
|
1916
|
+
}, [list, nativeBalanceQuery.data, erc20BalanceQuery.data]);
|
|
1917
|
+
useEffect7(() => {
|
|
1918
|
+
const list2 = enrichedAssets.sort((a, b) => {
|
|
1919
|
+
if (a.address === NATIVE_TOKEN_ADDRESS) return -1;
|
|
1920
|
+
if (b.address === NATIVE_TOKEN_ADDRESS) return 1;
|
|
1921
|
+
if (a.isAuto && b.isAuto) return b.value - a.value;
|
|
1922
|
+
if (a.isAuto) return -1;
|
|
1923
|
+
if (b.isAuto) return 1;
|
|
1924
|
+
if (a.isCustom && !a.isAuto && a.balance > 0) return -1;
|
|
1925
|
+
if (b.isCustom && !b.isAuto && b.balance > 0) return 1;
|
|
1926
|
+
return 0;
|
|
1927
|
+
});
|
|
1928
|
+
setAssets(list2);
|
|
1929
|
+
}, [enrichedAssets]);
|
|
1930
|
+
return {
|
|
1931
|
+
list: assets,
|
|
1932
|
+
isLoading: nativeBalanceQuery.isLoading || erc20BalanceQuery.isLoading,
|
|
1933
|
+
isFetched: nativeBalanceQuery.isFetched && erc20BalanceQuery.isFetched,
|
|
1934
|
+
nativeBalanceQuery,
|
|
1935
|
+
erc20BalanceQuery,
|
|
1936
|
+
nativeBalance: nativeBalanceQuery.data,
|
|
1937
|
+
erc20Balances: erc20BalanceQuery.data
|
|
1938
|
+
};
|
|
1939
|
+
}
|
|
1539
1940
|
|
|
1540
1941
|
// src/hooks/useReceipt.tsx
|
|
1541
|
-
import { useState as
|
|
1542
|
-
import { useQuery as
|
|
1543
|
-
import { createPublicClient as
|
|
1942
|
+
import { useState as useState9, useCallback as useCallback4, useEffect as useEffect8 } from "react";
|
|
1943
|
+
import { useQuery as useQuery4 } from "@tanstack/react-query";
|
|
1944
|
+
import { createPublicClient as createPublicClient4, defineChain as defineChain2, http as http4 } from "viem";
|
|
1544
1945
|
var CACHE_TTL = 86400 * 30 * 1e3;
|
|
1545
1946
|
var MAX_CACHE_SIZE = 500;
|
|
1546
1947
|
var STORAGE_KEY = "match_receipt_logs";
|
|
1547
1948
|
function useReceiptCache() {
|
|
1548
|
-
const [cache, setCache] =
|
|
1949
|
+
const [cache, setCache] = useState9(/* @__PURE__ */ new Map());
|
|
1549
1950
|
const isLocalStorageAvailable = (() => {
|
|
1550
1951
|
try {
|
|
1551
1952
|
const testKey = "__test__";
|
|
@@ -1556,7 +1957,7 @@ function useReceiptCache() {
|
|
|
1556
1957
|
return false;
|
|
1557
1958
|
}
|
|
1558
1959
|
})();
|
|
1559
|
-
|
|
1960
|
+
useEffect8(() => {
|
|
1560
1961
|
if (isLocalStorageAvailable) {
|
|
1561
1962
|
try {
|
|
1562
1963
|
const storedData = localStorage.getItem(STORAGE_KEY);
|
|
@@ -1647,8 +2048,8 @@ function useReceipt({
|
|
|
1647
2048
|
const { list } = useMatchChain();
|
|
1648
2049
|
const cache = useReceiptCache();
|
|
1649
2050
|
const chain = list?.find((item) => item.id === chainId);
|
|
1650
|
-
const [shouldRefetch, setShouldRefetch] =
|
|
1651
|
-
const query =
|
|
2051
|
+
const [shouldRefetch, setShouldRefetch] = useState9(true);
|
|
2052
|
+
const query = useQuery4({
|
|
1652
2053
|
queryKey: ["match-tx-receipt", hash, chain],
|
|
1653
2054
|
queryFn: async () => {
|
|
1654
2055
|
if (!chain || !hash) return false;
|
|
@@ -1657,9 +2058,9 @@ function useReceipt({
|
|
|
1657
2058
|
return cache.get(cacheKey);
|
|
1658
2059
|
}
|
|
1659
2060
|
try {
|
|
1660
|
-
const publicClient =
|
|
1661
|
-
chain:
|
|
1662
|
-
transport:
|
|
2061
|
+
const publicClient = createPublicClient4({
|
|
2062
|
+
chain: defineChain2(chain),
|
|
2063
|
+
transport: http4()
|
|
1663
2064
|
});
|
|
1664
2065
|
const receipt = await publicClient.getTransactionReceipt({ hash });
|
|
1665
2066
|
if (!receipt) {
|
|
@@ -1673,7 +2074,7 @@ function useReceipt({
|
|
|
1673
2074
|
},
|
|
1674
2075
|
refetchInterval: shouldRefetch ? 1e4 : false
|
|
1675
2076
|
});
|
|
1676
|
-
|
|
2077
|
+
useEffect8(() => {
|
|
1677
2078
|
if (query.data) {
|
|
1678
2079
|
setShouldRefetch(false);
|
|
1679
2080
|
}
|
|
@@ -1682,14 +2083,14 @@ function useReceipt({
|
|
|
1682
2083
|
}
|
|
1683
2084
|
|
|
1684
2085
|
// src/hooks/useTransaction.tsx
|
|
1685
|
-
import { useState as
|
|
1686
|
-
import { useQuery as
|
|
1687
|
-
import { createPublicClient as
|
|
2086
|
+
import { useState as useState10, useCallback as useCallback5, useEffect as useEffect9 } from "react";
|
|
2087
|
+
import { useQuery as useQuery5 } from "@tanstack/react-query";
|
|
2088
|
+
import { createPublicClient as createPublicClient5, defineChain as defineChain3, http as http5 } from "viem";
|
|
1688
2089
|
var CACHE_TTL2 = 86400 * 30 * 1e3;
|
|
1689
2090
|
var MAX_CACHE_SIZE2 = 500;
|
|
1690
2091
|
var STORAGE_KEY2 = "match_transaction_logs";
|
|
1691
2092
|
function useTransactionCache() {
|
|
1692
|
-
const [cache, setCache] =
|
|
2093
|
+
const [cache, setCache] = useState10(/* @__PURE__ */ new Map());
|
|
1693
2094
|
const isLocalStorageAvailable = (() => {
|
|
1694
2095
|
try {
|
|
1695
2096
|
const testKey = "__test__";
|
|
@@ -1700,7 +2101,7 @@ function useTransactionCache() {
|
|
|
1700
2101
|
return false;
|
|
1701
2102
|
}
|
|
1702
2103
|
})();
|
|
1703
|
-
|
|
2104
|
+
useEffect9(() => {
|
|
1704
2105
|
if (isLocalStorageAvailable) {
|
|
1705
2106
|
try {
|
|
1706
2107
|
const storedData = localStorage.getItem(STORAGE_KEY2);
|
|
@@ -1791,8 +2192,8 @@ function useTransaction({
|
|
|
1791
2192
|
const { list } = useMatchChain();
|
|
1792
2193
|
const cache = useTransactionCache();
|
|
1793
2194
|
const chain = list?.find((item) => item.id === chainId);
|
|
1794
|
-
const [shouldRefetch, setShouldRefetch] =
|
|
1795
|
-
const query =
|
|
2195
|
+
const [shouldRefetch, setShouldRefetch] = useState10(true);
|
|
2196
|
+
const query = useQuery5({
|
|
1796
2197
|
queryKey: ["match-tx-transaction", hash, chain],
|
|
1797
2198
|
queryFn: async () => {
|
|
1798
2199
|
if (!chain || !hash) return false;
|
|
@@ -1801,9 +2202,9 @@ function useTransaction({
|
|
|
1801
2202
|
return cache.get(cacheKey);
|
|
1802
2203
|
}
|
|
1803
2204
|
try {
|
|
1804
|
-
const publicClient =
|
|
1805
|
-
chain:
|
|
1806
|
-
transport:
|
|
2205
|
+
const publicClient = createPublicClient5({
|
|
2206
|
+
chain: defineChain3(chain),
|
|
2207
|
+
transport: http5()
|
|
1807
2208
|
});
|
|
1808
2209
|
const transaction = await publicClient.getTransaction({ hash });
|
|
1809
2210
|
if (!transaction) {
|
|
@@ -1817,7 +2218,7 @@ function useTransaction({
|
|
|
1817
2218
|
},
|
|
1818
2219
|
refetchInterval: shouldRefetch ? 1e4 : false
|
|
1819
2220
|
});
|
|
1820
|
-
|
|
2221
|
+
useEffect9(() => {
|
|
1821
2222
|
if (query.data) {
|
|
1822
2223
|
setShouldRefetch(false);
|
|
1823
2224
|
}
|
|
@@ -1825,28 +2226,113 @@ function useTransaction({
|
|
|
1825
2226
|
return query;
|
|
1826
2227
|
}
|
|
1827
2228
|
|
|
2229
|
+
// src/store/useModalStore.ts
|
|
2230
|
+
import { create as create5 } from "zustand";
|
|
2231
|
+
|
|
2232
|
+
// src/hooks/useConfig.tsx
|
|
2233
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
2234
|
+
var DEFAULT_WALLET_METHODS = ["evm", "sol", "btc", "tron", "ton"];
|
|
2235
|
+
var WALLET_METHODS = ["evm", "sol", "btc", "tron", "ton"];
|
|
2236
|
+
function useWalletConfig() {
|
|
2237
|
+
const isDownMd = useDownMd();
|
|
2238
|
+
const walletMap = {
|
|
2239
|
+
evm: {
|
|
2240
|
+
icon: /* @__PURE__ */ jsx8(EVMDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2241
|
+
activeIcon: /* @__PURE__ */ jsx8(EVMLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2242
|
+
name: "EVM",
|
|
2243
|
+
method: "evm"
|
|
2244
|
+
},
|
|
2245
|
+
sol: {
|
|
2246
|
+
icon: /* @__PURE__ */ jsx8(SOLDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2247
|
+
activeIcon: /* @__PURE__ */ jsx8(SOLLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2248
|
+
name: "SOL",
|
|
2249
|
+
method: "sol"
|
|
2250
|
+
},
|
|
2251
|
+
btc: {
|
|
2252
|
+
icon: /* @__PURE__ */ jsx8(BTCDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2253
|
+
activeIcon: /* @__PURE__ */ jsx8(BTCLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2254
|
+
name: "BTC",
|
|
2255
|
+
method: "btc"
|
|
2256
|
+
},
|
|
2257
|
+
tron: {
|
|
2258
|
+
icon: /* @__PURE__ */ jsx8(TRXDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2259
|
+
activeIcon: /* @__PURE__ */ jsx8(TRXLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2260
|
+
name: "TRON",
|
|
2261
|
+
method: "tron"
|
|
2262
|
+
},
|
|
2263
|
+
ton: {
|
|
2264
|
+
icon: /* @__PURE__ */ jsx8(TonLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2265
|
+
activeIcon: /* @__PURE__ */ jsx8(TonLightIcon2, { size: isDownMd ? 36 : 40 }),
|
|
2266
|
+
name: "TON",
|
|
2267
|
+
method: "ton"
|
|
2268
|
+
}
|
|
2269
|
+
};
|
|
2270
|
+
return {
|
|
2271
|
+
walletMap
|
|
2272
|
+
};
|
|
2273
|
+
}
|
|
2274
|
+
|
|
2275
|
+
// src/store/useModalStore.ts
|
|
2276
|
+
var useSOLModalStore = create5((set) => ({
|
|
2277
|
+
isOpen: false,
|
|
2278
|
+
type: "",
|
|
2279
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2280
|
+
close: () => set({ isOpen: false })
|
|
2281
|
+
}));
|
|
2282
|
+
var useTRONModalStore = create5((set) => ({
|
|
2283
|
+
isOpen: false,
|
|
2284
|
+
type: "",
|
|
2285
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2286
|
+
close: () => set({ isOpen: false })
|
|
2287
|
+
}));
|
|
2288
|
+
var useTONModalStore = create5((set) => ({
|
|
2289
|
+
isOpen: false,
|
|
2290
|
+
type: "",
|
|
2291
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2292
|
+
close: () => set({ isOpen: false })
|
|
2293
|
+
}));
|
|
2294
|
+
var useBTCModalStore = create5((set) => ({
|
|
2295
|
+
isOpen: false,
|
|
2296
|
+
type: "",
|
|
2297
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2298
|
+
close: () => set({ isOpen: false })
|
|
2299
|
+
}));
|
|
2300
|
+
var useCEXBindModalStore = create5((set) => ({
|
|
2301
|
+
type: "",
|
|
2302
|
+
isOpen: false,
|
|
2303
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2304
|
+
close: () => set({ isOpen: false })
|
|
2305
|
+
}));
|
|
2306
|
+
var useWalletModalStore = create5((set) => ({
|
|
2307
|
+
isOpen: false,
|
|
2308
|
+
type: "",
|
|
2309
|
+
methods: [],
|
|
2310
|
+
open: (type, methods = DEFAULT_WALLET_METHODS) => set({ isOpen: true, type, methods }),
|
|
2311
|
+
close: () => set({ isOpen: false })
|
|
2312
|
+
}));
|
|
2313
|
+
|
|
1828
2314
|
// src/components/CEXBindModal/index.tsx
|
|
1829
|
-
import { useEffect as
|
|
1830
|
-
import { FormattedMessage as
|
|
1831
|
-
import { jsx as
|
|
2315
|
+
import { useEffect as useEffect10, useMemo as useMemo6, useState as useState11 } from "react";
|
|
2316
|
+
import { FormattedMessage as FormattedMessage4, useIntl as useIntl4 } from "react-intl";
|
|
2317
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1832
2318
|
function CEXBindModal({
|
|
1833
2319
|
onClose,
|
|
1834
2320
|
type,
|
|
1835
2321
|
isOpen = false,
|
|
1836
2322
|
...props
|
|
1837
2323
|
}) {
|
|
1838
|
-
const intl =
|
|
2324
|
+
const intl = useIntl4();
|
|
1839
2325
|
const { events } = useMatch();
|
|
1840
|
-
const [APIPassphrase, setAPIPassphrase] =
|
|
2326
|
+
const [APIPassphrase, setAPIPassphrase] = useState11("");
|
|
1841
2327
|
const { refreshOverview } = useUserInfo();
|
|
1842
|
-
const [loading, setLoading] =
|
|
1843
|
-
const [key, setKey] =
|
|
1844
|
-
const [secret, setSecret] =
|
|
1845
|
-
const [error, setError] =
|
|
1846
|
-
const needPassphrase =
|
|
2328
|
+
const [loading, setLoading] = useState11(false);
|
|
2329
|
+
const [key, setKey] = useState11("");
|
|
2330
|
+
const [secret, setSecret] = useState11("");
|
|
2331
|
+
const [error, setError] = useState11("");
|
|
2332
|
+
const needPassphrase = useMemo6(() => {
|
|
1847
2333
|
return ["bitget", "okx"].includes(type.toLowerCase());
|
|
1848
2334
|
}, [type]);
|
|
1849
|
-
|
|
2335
|
+
useEffect10(() => {
|
|
1850
2336
|
if (isOpen) {
|
|
1851
2337
|
setSecret("");
|
|
1852
2338
|
setKey("");
|
|
@@ -1883,20 +2369,20 @@ function CEXBindModal({
|
|
|
1883
2369
|
setLoading(false);
|
|
1884
2370
|
}
|
|
1885
2371
|
};
|
|
1886
|
-
return /* @__PURE__ */
|
|
2372
|
+
return /* @__PURE__ */ jsx9(ModalWithHeader, { showClose: true, isOpen, onClose, title: intl.formatMessage({
|
|
1887
2373
|
id: "CEXBindTitle"
|
|
1888
2374
|
}, {
|
|
1889
2375
|
type
|
|
1890
|
-
}), ...props, children: /* @__PURE__ */
|
|
1891
|
-
/* @__PURE__ */
|
|
1892
|
-
/* @__PURE__ */
|
|
1893
|
-
/* @__PURE__ */
|
|
1894
|
-
/* @__PURE__ */
|
|
1895
|
-
/* @__PURE__ */
|
|
2376
|
+
}), ...props, children: /* @__PURE__ */ jsxs7("div", { className: "matchid-cex-modal", children: [
|
|
2377
|
+
/* @__PURE__ */ jsxs7("div", { children: [
|
|
2378
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindAttention" }) }),
|
|
2379
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips1" }) }),
|
|
2380
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips2" }) }),
|
|
2381
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips3" }) })
|
|
1896
2382
|
] }),
|
|
1897
|
-
/* @__PURE__ */
|
|
2383
|
+
/* @__PURE__ */ jsx9(Field, { label: intl.formatMessage({
|
|
1898
2384
|
id: "CEXBindApiKey"
|
|
1899
|
-
}), children: /* @__PURE__ */
|
|
2385
|
+
}), children: /* @__PURE__ */ jsx9(
|
|
1900
2386
|
Input,
|
|
1901
2387
|
{
|
|
1902
2388
|
value: key,
|
|
@@ -1904,9 +2390,9 @@ function CEXBindModal({
|
|
|
1904
2390
|
placeholder: "**** **** ****"
|
|
1905
2391
|
}
|
|
1906
2392
|
) }),
|
|
1907
|
-
/* @__PURE__ */
|
|
2393
|
+
/* @__PURE__ */ jsx9(Field, { label: intl.formatMessage({
|
|
1908
2394
|
id: "CEXBindApiSecretKey"
|
|
1909
|
-
}), error: !needPassphrase && error, children: /* @__PURE__ */
|
|
2395
|
+
}), error: !needPassphrase && error, children: /* @__PURE__ */ jsx9(
|
|
1910
2396
|
Input,
|
|
1911
2397
|
{
|
|
1912
2398
|
value: secret,
|
|
@@ -1914,9 +2400,9 @@ function CEXBindModal({
|
|
|
1914
2400
|
placeholder: "**** **** ****"
|
|
1915
2401
|
}
|
|
1916
2402
|
) }),
|
|
1917
|
-
needPassphrase && /* @__PURE__ */
|
|
2403
|
+
needPassphrase && /* @__PURE__ */ jsx9(Field, { error, label: intl.formatMessage({
|
|
1918
2404
|
id: "CEXBindApiPassphrase"
|
|
1919
|
-
}), children: /* @__PURE__ */
|
|
2405
|
+
}), children: /* @__PURE__ */ jsx9(
|
|
1920
2406
|
Input,
|
|
1921
2407
|
{
|
|
1922
2408
|
value: APIPassphrase,
|
|
@@ -1924,7 +2410,7 @@ function CEXBindModal({
|
|
|
1924
2410
|
placeholder: "**** **** ****"
|
|
1925
2411
|
}
|
|
1926
2412
|
) }),
|
|
1927
|
-
/* @__PURE__ */
|
|
2413
|
+
/* @__PURE__ */ jsx9(
|
|
1928
2414
|
Button,
|
|
1929
2415
|
{
|
|
1930
2416
|
onClick: SubmitApi,
|
|
@@ -1932,14 +2418,14 @@ function CEXBindModal({
|
|
|
1932
2418
|
block: true,
|
|
1933
2419
|
loading,
|
|
1934
2420
|
disabled: !key || !secret,
|
|
1935
|
-
children: /* @__PURE__ */
|
|
2421
|
+
children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "continue" })
|
|
1936
2422
|
}
|
|
1937
2423
|
)
|
|
1938
2424
|
] }) });
|
|
1939
2425
|
}
|
|
1940
2426
|
|
|
1941
2427
|
// src/context/BusinessProvider.tsx
|
|
1942
|
-
import { Fragment, jsx as
|
|
2428
|
+
import { Fragment, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1943
2429
|
function BusinessProvider({ children }) {
|
|
1944
2430
|
const { overview, token } = useUserInfo();
|
|
1945
2431
|
const { type: SOLType, isOpen: SOLIsOpen, close: SOLClose } = useSOLModalStore();
|
|
@@ -1948,13 +2434,12 @@ function BusinessProvider({ children }) {
|
|
|
1948
2434
|
const { type: BTCType, isOpen: BTCIsOpen, close: BTCClose } = useBTCModalStore();
|
|
1949
2435
|
const { type: CEXType, isOpen: CEXIsOpen, close: CEXClose } = useCEXBindModalStore();
|
|
1950
2436
|
const WalletModalStore = useWalletModalStore();
|
|
1951
|
-
const { close: HashPanelClose, ...hashPanelProps } = useHashPanelStore();
|
|
1952
2437
|
const walletModalClose = (func) => {
|
|
1953
2438
|
WalletModalStore.close();
|
|
1954
2439
|
func();
|
|
1955
2440
|
};
|
|
1956
|
-
return /* @__PURE__ */
|
|
1957
|
-
/* @__PURE__ */
|
|
2441
|
+
return /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
2442
|
+
/* @__PURE__ */ jsx10(
|
|
1958
2443
|
SOLModal,
|
|
1959
2444
|
{
|
|
1960
2445
|
isOpen: SOLIsOpen && (SOLType == "login" && !overview && !token || SOLType == "bind" && !!token && !!overview),
|
|
@@ -1964,7 +2449,7 @@ function BusinessProvider({ children }) {
|
|
|
1964
2449
|
zIndex: 199
|
|
1965
2450
|
}
|
|
1966
2451
|
),
|
|
1967
|
-
/* @__PURE__ */
|
|
2452
|
+
/* @__PURE__ */ jsx10(
|
|
1968
2453
|
TRONModal,
|
|
1969
2454
|
{
|
|
1970
2455
|
isOpen: TRONIsOpen && (TRONType == "login" && !overview && !token || TRONType == "bind" && !!token && !!overview),
|
|
@@ -1974,7 +2459,7 @@ function BusinessProvider({ children }) {
|
|
|
1974
2459
|
zIndex: 199
|
|
1975
2460
|
}
|
|
1976
2461
|
),
|
|
1977
|
-
/* @__PURE__ */
|
|
2462
|
+
/* @__PURE__ */ jsx10(
|
|
1978
2463
|
TONModal,
|
|
1979
2464
|
{
|
|
1980
2465
|
isOpen: TONIsOpen && (TONType == "login" && !overview && !token || TONType == "bind" && !!token && !!overview),
|
|
@@ -1984,7 +2469,7 @@ function BusinessProvider({ children }) {
|
|
|
1984
2469
|
zIndex: 199
|
|
1985
2470
|
}
|
|
1986
2471
|
),
|
|
1987
|
-
/* @__PURE__ */
|
|
2472
|
+
/* @__PURE__ */ jsx10(
|
|
1988
2473
|
BTCModal,
|
|
1989
2474
|
{
|
|
1990
2475
|
isOpen: BTCIsOpen && (BTCType == "login" && !overview && !token || BTCType == "bind" && !!token && !!overview),
|
|
@@ -1994,7 +2479,7 @@ function BusinessProvider({ children }) {
|
|
|
1994
2479
|
zIndex: 199
|
|
1995
2480
|
}
|
|
1996
2481
|
),
|
|
1997
|
-
/* @__PURE__ */
|
|
2482
|
+
/* @__PURE__ */ jsx10(
|
|
1998
2483
|
CEXBindModal,
|
|
1999
2484
|
{
|
|
2000
2485
|
isOpen: CEXIsOpen && (!!token && !!overview),
|
|
@@ -2003,8 +2488,7 @@ function BusinessProvider({ children }) {
|
|
|
2003
2488
|
zIndex: 199
|
|
2004
2489
|
}
|
|
2005
2490
|
),
|
|
2006
|
-
/* @__PURE__ */
|
|
2007
|
-
/* @__PURE__ */ jsx8(
|
|
2491
|
+
/* @__PURE__ */ jsx10(
|
|
2008
2492
|
WalletModal,
|
|
2009
2493
|
{
|
|
2010
2494
|
isOpen: WalletModalStore.isOpen && (WalletModalStore.type == "login" && !overview && !token || WalletModalStore.type == "bind" && !!token && !!overview),
|
|
@@ -2019,14 +2503,14 @@ function BusinessProvider({ children }) {
|
|
|
2019
2503
|
}
|
|
2020
2504
|
|
|
2021
2505
|
// src/context/index.tsx
|
|
2022
|
-
import { jsx as
|
|
2506
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
2023
2507
|
var Providers = ({ children }) => {
|
|
2024
|
-
return /* @__PURE__ */
|
|
2508
|
+
return /* @__PURE__ */ jsx11(ToastProvider, { children: /* @__PURE__ */ jsx11(ModalProvider, { children: /* @__PURE__ */ jsx11(BusinessProvider, { children }) }) });
|
|
2025
2509
|
};
|
|
2026
2510
|
var context_default = Providers;
|
|
2027
2511
|
|
|
2028
2512
|
// src/hooks/useWalletInit.ts
|
|
2029
|
-
import { useEffect as
|
|
2513
|
+
import { useEffect as useEffect11, useRef as useRef2 } from "react";
|
|
2030
2514
|
|
|
2031
2515
|
// src/utils/wallet.ts
|
|
2032
2516
|
var sendMessage = ({ method, data, resolve, reject, timeout }) => {
|
|
@@ -2060,10 +2544,10 @@ function useWalletInit({
|
|
|
2060
2544
|
const { endpoints, token, overview, setWallet, wallet, appid, locale, refreshOverview } = useLocalStore_default();
|
|
2061
2545
|
const { setWalletReady, walletReady } = useStore_default();
|
|
2062
2546
|
const iframeReadyRef = useRef2(walletReady);
|
|
2063
|
-
|
|
2547
|
+
useEffect11(() => {
|
|
2064
2548
|
setWallet(config);
|
|
2065
2549
|
}, [config]);
|
|
2066
|
-
|
|
2550
|
+
useEffect11(() => {
|
|
2067
2551
|
matchlog_default.log("sdk.mpc.status", walletReady, iframeReadyRef.current);
|
|
2068
2552
|
iframeReadyRef.current = walletReady;
|
|
2069
2553
|
if (iframeReadyRef.current) {
|
|
@@ -2080,7 +2564,7 @@ function useWalletInit({
|
|
|
2080
2564
|
onReady();
|
|
2081
2565
|
}
|
|
2082
2566
|
}, [walletReady]);
|
|
2083
|
-
|
|
2567
|
+
useEffect11(() => {
|
|
2084
2568
|
if (!endpoints.auth || !appid || !token || !config) {
|
|
2085
2569
|
const existingIframe = getWalletIframe();
|
|
2086
2570
|
if (existingIframe) {
|
|
@@ -2180,7 +2664,7 @@ function useWalletInit({
|
|
|
2180
2664
|
}
|
|
2181
2665
|
}
|
|
2182
2666
|
}, [endpoints.auth, appid, token, config]);
|
|
2183
|
-
|
|
2667
|
+
useEffect11(() => {
|
|
2184
2668
|
const messageHandle = async (e) => {
|
|
2185
2669
|
if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {
|
|
2186
2670
|
return;
|
|
@@ -2261,7 +2745,7 @@ function useWalletInit({
|
|
|
2261
2745
|
}
|
|
2262
2746
|
|
|
2263
2747
|
// src/hooks/useInit.tsx
|
|
2264
|
-
import { useEffect as
|
|
2748
|
+
import { useEffect as useEffect12, useRef as useRef3 } from "react";
|
|
2265
2749
|
function useInit({
|
|
2266
2750
|
theme,
|
|
2267
2751
|
appid,
|
|
@@ -2285,19 +2769,19 @@ function useInit({
|
|
|
2285
2769
|
const searchParams = new URLSearchParams(window.location.search);
|
|
2286
2770
|
const matchToken = searchParams.get("matchToken");
|
|
2287
2771
|
const realEndpoints = endpoints || env_default.endpoints;
|
|
2288
|
-
|
|
2772
|
+
useEffect12(() => {
|
|
2289
2773
|
setTheme(theme);
|
|
2290
2774
|
}, [theme]);
|
|
2291
|
-
|
|
2775
|
+
useEffect12(() => {
|
|
2292
2776
|
setAppid(appid);
|
|
2293
2777
|
}, [appid]);
|
|
2294
|
-
|
|
2778
|
+
useEffect12(() => {
|
|
2295
2779
|
setEndpoints(realEndpoints);
|
|
2296
2780
|
}, [realEndpoints]);
|
|
2297
|
-
|
|
2781
|
+
useEffect12(() => {
|
|
2298
2782
|
setLocale(locale || "en");
|
|
2299
2783
|
}, [locale]);
|
|
2300
|
-
|
|
2784
|
+
useEffect12(() => {
|
|
2301
2785
|
if (matchToken) {
|
|
2302
2786
|
const tokenData = JSON.parse(atob(matchToken));
|
|
2303
2787
|
if (tokenData && tokenData.mid && tokenData.token) {
|
|
@@ -2308,7 +2792,7 @@ function useInit({
|
|
|
2308
2792
|
}
|
|
2309
2793
|
}
|
|
2310
2794
|
}, [matchToken]);
|
|
2311
|
-
|
|
2795
|
+
useEffect12(() => {
|
|
2312
2796
|
const onLoginMessage = (event) => {
|
|
2313
2797
|
const res = event.data;
|
|
2314
2798
|
if (res.event === "login" && res.data && (res.data.token || res.data.token_type && res.data.access_token)) {
|
|
@@ -2345,7 +2829,7 @@ function useInit({
|
|
|
2345
2829
|
overviewLoadingRef.current = false;
|
|
2346
2830
|
}
|
|
2347
2831
|
};
|
|
2348
|
-
|
|
2832
|
+
useEffect12(() => {
|
|
2349
2833
|
if (token) {
|
|
2350
2834
|
loadOverview();
|
|
2351
2835
|
}
|
|
@@ -2428,7 +2912,35 @@ var en_default = {
|
|
|
2428
2912
|
CEXBindApiSecretKey: "API Secret Key",
|
|
2429
2913
|
CEXBindApiPassphrase: "API Passphrase",
|
|
2430
2914
|
cancel: "Cancel",
|
|
2431
|
-
walletLoading: "Wallet service is loading"
|
|
2915
|
+
walletLoading: "Wallet service is loading",
|
|
2916
|
+
tokenDetails: "Token Details",
|
|
2917
|
+
tokenAmountMin: "Amount must be greater than 0.",
|
|
2918
|
+
tokenAmountMax: "Insufficient balance.",
|
|
2919
|
+
tokenAddressError: "Invalid address.",
|
|
2920
|
+
amount: "Amount",
|
|
2921
|
+
amountPlaceholder: "Enter the Amount.",
|
|
2922
|
+
balance: "Balance",
|
|
2923
|
+
receiveTitle: "Received wallet address",
|
|
2924
|
+
receivePlaceholder: "Enter the Received wallet address.",
|
|
2925
|
+
next: "Next",
|
|
2926
|
+
copied: "Copied",
|
|
2927
|
+
receiveQrcode: "Receive by scanning the QR code",
|
|
2928
|
+
copyAddress: "Copy Address",
|
|
2929
|
+
tokenSmartContract: "Token Smart Contract",
|
|
2930
|
+
tokenSmartContractPlaceholder: "Enter the Token Smart Contract.",
|
|
2931
|
+
tokenSymbol: "Token Symbol",
|
|
2932
|
+
tokenSymbolPlaceholder: "Enter the Token Symbol.",
|
|
2933
|
+
tokenDecimals: "Decimals",
|
|
2934
|
+
tokenDecimalsPlaceholder: "Enter the Decimals.",
|
|
2935
|
+
import: "Import",
|
|
2936
|
+
receive: "Receive",
|
|
2937
|
+
customizedToken: "Customized Token",
|
|
2938
|
+
noMoreRecords: "There is no more Records here!",
|
|
2939
|
+
noRecords: "No Records here!",
|
|
2940
|
+
close: "Close",
|
|
2941
|
+
back: "Back",
|
|
2942
|
+
importSuccess: "Import Token Successfully",
|
|
2943
|
+
importFail: "Failed to import Token"
|
|
2432
2944
|
};
|
|
2433
2945
|
|
|
2434
2946
|
// src/i18n/zh.json
|
|
@@ -2480,7 +2992,35 @@ var zh_default = {
|
|
|
2480
2992
|
CEXBindApiSecretKey: "API \u79D8\u94A5",
|
|
2481
2993
|
CEXBindApiPassphrase: "API \u5BC6\u7801\u77ED\u8BED",
|
|
2482
2994
|
cancel: "\u53D6\u6D88",
|
|
2483
|
-
walletLoading: "\u94B1\u5305\u670D\u52A1\u6B63\u5728\u52A0\u8F7D"
|
|
2995
|
+
walletLoading: "\u94B1\u5305\u670D\u52A1\u6B63\u5728\u52A0\u8F7D",
|
|
2996
|
+
tokenDetails: "\u4EE3\u5E01\u8BE6\u60C5",
|
|
2997
|
+
tokenAmountMin: "\u91D1\u989D\u5FC5\u987B\u5927\u4E8E 0\u3002",
|
|
2998
|
+
tokenAmountMax: "\u4F59\u989D\u4E0D\u8DB3\u3002",
|
|
2999
|
+
tokenAddressError: "\u65E0\u6548\u7684\u5730\u5740\u3002",
|
|
3000
|
+
amount: "\u91D1\u989D",
|
|
3001
|
+
amountPlaceholder: "\u8BF7\u8F93\u5165\u91D1\u989D\u3002",
|
|
3002
|
+
balance: "\u4F59\u989D",
|
|
3003
|
+
receiveTitle: "\u63A5\u6536\u94B1\u5305\u5730\u5740",
|
|
3004
|
+
receivePlaceholder: "\u8BF7\u8F93\u5165\u63A5\u6536\u94B1\u5305\u5730\u5740\u3002",
|
|
3005
|
+
next: "\u4E0B\u4E00\u6B65",
|
|
3006
|
+
copied: "\u5DF2\u590D\u5236",
|
|
3007
|
+
receiveQrcode: "\u626B\u63CF QR \u7801\u63A5\u6536",
|
|
3008
|
+
copyAddress: "\u590D\u5236\u5730\u5740",
|
|
3009
|
+
tokenSmartContract: "\u4EE3\u5E01\u667A\u80FD\u5408\u7EA6",
|
|
3010
|
+
tokenSmartContractPlaceholder: "\u8BF7\u8F93\u5165\u4EE3\u5E01\u667A\u80FD\u5408\u7EA6\u3002",
|
|
3011
|
+
tokenSymbol: "\u4EE3\u5E01\u7B26\u53F7",
|
|
3012
|
+
tokenSymbolPlaceholder: "\u8BF7\u8F93\u5165\u4EE3\u5E01\u7B26\u53F7\u3002",
|
|
3013
|
+
tokenDecimals: "\u5C0F\u6570\u4F4D\u6570",
|
|
3014
|
+
tokenDecimalsPlaceholder: "\u8BF7\u8F93\u5165\u5C0F\u6570\u4F4D\u6570\u3002",
|
|
3015
|
+
import: "\u5BFC\u5165",
|
|
3016
|
+
receive: "\u63A5\u6536",
|
|
3017
|
+
customizedToken: "\u81EA\u5B9A\u4E49\u4EE3\u5E01",
|
|
3018
|
+
noMoreRecords: "\u6CA1\u6709\u66F4\u591A\u4EA4\u6613\u8BB0\u5F55\u4E86\uFF01",
|
|
3019
|
+
noRecords: "\u6682\u65E0\u4EA4\u6613\u8BB0\u5F55\uFF01",
|
|
3020
|
+
close: "\u5173\u95ED",
|
|
3021
|
+
back: "\u8FD4\u56DE",
|
|
3022
|
+
importSuccess: "\u6210\u529F\u5BFC\u5165\u4EE3\u5E01",
|
|
3023
|
+
importFail: "\u5BFC\u5165\u4EE3\u5E01\u5931\u8D25"
|
|
2484
3024
|
};
|
|
2485
3025
|
|
|
2486
3026
|
// src/i18n/tw.json
|
|
@@ -2532,7 +3072,35 @@ var tw_default = {
|
|
|
2532
3072
|
CEXBindApiSecretKey: "API \u5BC6\u9470",
|
|
2533
3073
|
CEXBindApiPassphrase: "API \u5BC6\u78BC\u77ED\u8A9E",
|
|
2534
3074
|
cancel: "\u53D6\u6D88",
|
|
2535
|
-
walletLoading: "\u9322\u5305\u670D\u52D9\u6B63\u5728\u52A0\u8F09"
|
|
3075
|
+
walletLoading: "\u9322\u5305\u670D\u52D9\u6B63\u5728\u52A0\u8F09",
|
|
3076
|
+
tokenDetails: "\u4EE3\u5E63\u8A73\u60C5",
|
|
3077
|
+
tokenAmountMin: "\u91D1\u984D\u5FC5\u9808\u5927\u65BC 0\u3002",
|
|
3078
|
+
tokenAmountMax: "\u9918\u984D\u4E0D\u8DB3\u3002",
|
|
3079
|
+
tokenAddressError: "\u7121\u6548\u7684\u5730\u5740\u3002",
|
|
3080
|
+
amount: "\u91D1\u984D",
|
|
3081
|
+
amountPlaceholder: "\u8ACB\u8F38\u5165\u91D1\u984D\u3002",
|
|
3082
|
+
balance: "\u9918\u984D",
|
|
3083
|
+
receiveTitle: "\u63A5\u6536\u9322\u5305\u5730\u5740",
|
|
3084
|
+
receivePlaceholder: "\u8ACB\u8F38\u5165\u63A5\u6536\u9322\u5305\u5730\u5740\u3002",
|
|
3085
|
+
next: "\u4E0B\u4E00\u6B65",
|
|
3086
|
+
copied: "\u5DF2\u8907\u88FD",
|
|
3087
|
+
receiveQrcode: "\u6383\u63CF QR \u78BC\u63A5\u6536",
|
|
3088
|
+
copyAddress: "\u8907\u88FD\u5730\u5740",
|
|
3089
|
+
tokenSmartContract: "\u4EE3\u5E63\u667A\u80FD\u5408\u7D04",
|
|
3090
|
+
tokenSmartContractPlaceholder: "\u8ACB\u8F38\u5165\u4EE3\u5E63\u667A\u80FD\u5408\u7D04\u3002",
|
|
3091
|
+
tokenSymbol: "\u4EE3\u5E63\u7B26\u865F",
|
|
3092
|
+
tokenSymbolPlaceholder: "\u8ACB\u8F38\u5165\u4EE3\u5E63\u7B26\u865F\u3002",
|
|
3093
|
+
tokenDecimals: "\u5C0F\u6578\u4F4D\u6578",
|
|
3094
|
+
tokenDecimalsPlaceholder: "\u8ACB\u8F38\u5165\u5C0F\u6578\u4F4D\u6578\u3002",
|
|
3095
|
+
import: "\u5C0E\u5165",
|
|
3096
|
+
receive: "\u63A5\u6536",
|
|
3097
|
+
customizedToken: "\u81EA\u5B9A\u7FA9\u4EE3\u5E63",
|
|
3098
|
+
noMoreRecords: "\u6C92\u6709\u66F4\u591A\u4EA4\u6613\u8A18\u9304\u4E86\uFF01",
|
|
3099
|
+
noRecords: "\u66AB\u7121\u4EA4\u6613\u8A18\u9304\uFF01",
|
|
3100
|
+
close: "\u95DC\u9589",
|
|
3101
|
+
back: "\u8FD4\u56DE",
|
|
3102
|
+
importSuccess: "\u6210\u529F\u532F\u5165\u4EE3\u5E63",
|
|
3103
|
+
importFail: "\u532F\u5165\u4EE3\u5E63\u5931\u6557"
|
|
2536
3104
|
};
|
|
2537
3105
|
|
|
2538
3106
|
// src/i18n/fr.json
|
|
@@ -2584,7 +3152,35 @@ var fr_default = {
|
|
|
2584
3152
|
CEXBindApiSecretKey: "Cl\xE9 Secr\xE8te API",
|
|
2585
3153
|
CEXBindApiPassphrase: "Phrase secr\xE8te API",
|
|
2586
3154
|
cancel: "Annuler",
|
|
2587
|
-
walletLoading: "Le service de portefeuille est en cours de chargement"
|
|
3155
|
+
walletLoading: "Le service de portefeuille est en cours de chargement",
|
|
3156
|
+
tokenDetails: "D\xE9tails du Token",
|
|
3157
|
+
tokenAmountMin: "Le montant doit \xEAtre sup\xE9rieur \xE0 0.",
|
|
3158
|
+
tokenAmountMax: "Solde insuffisant.",
|
|
3159
|
+
tokenAddressError: "Adresse invalide.",
|
|
3160
|
+
amount: "Montant",
|
|
3161
|
+
amountPlaceholder: "Entrez le montant.",
|
|
3162
|
+
balance: "Solde",
|
|
3163
|
+
receiveTitle: "Adresse du portefeuille re\xE7u",
|
|
3164
|
+
receivePlaceholder: "Entrez l'adresse du portefeuille re\xE7u.",
|
|
3165
|
+
next: "Suivant",
|
|
3166
|
+
copied: "Copi\xE9",
|
|
3167
|
+
receiveQrcode: "Recevoir en scannant le code QR",
|
|
3168
|
+
copyAddress: "Copier l'adresse",
|
|
3169
|
+
tokenSmartContract: "Contrat intelligent du Token",
|
|
3170
|
+
tokenSmartContractPlaceholder: "Entrez le contrat intelligent du Token.",
|
|
3171
|
+
tokenSymbol: "Symbole du Token",
|
|
3172
|
+
tokenSymbolPlaceholder: "Entrez le symbole du Token.",
|
|
3173
|
+
tokenDecimals: "D\xE9cimales",
|
|
3174
|
+
tokenDecimalsPlaceholder: "Entrez les d\xE9cimales.",
|
|
3175
|
+
import: "Importer",
|
|
3176
|
+
receive: "Recevoir",
|
|
3177
|
+
customizedToken: "Token personnalis\xE9",
|
|
3178
|
+
noMoreRecords: "Il n'y a plus d'enregistrements ici !",
|
|
3179
|
+
noRecords: "Il n'y a aucun enregistrement ici !",
|
|
3180
|
+
close: "Fermer",
|
|
3181
|
+
back: "Retour",
|
|
3182
|
+
importSuccess: "Importation du jeton r\xE9ussie",
|
|
3183
|
+
importFail: "\xC9chec de l'importation du jeton"
|
|
2588
3184
|
};
|
|
2589
3185
|
|
|
2590
3186
|
// src/i18n/ja.json
|
|
@@ -2636,7 +3232,35 @@ var ja_default = {
|
|
|
2636
3232
|
CEXBindApiSecretKey: "API \u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30AD\u30FC",
|
|
2637
3233
|
CEXBindApiPassphrase: "API \u30D1\u30B9\u30D5\u30EC\u30FC\u30BA",
|
|
2638
3234
|
cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
|
|
2639
|
-
walletLoading: "\u30A6\u30A9\u30EC\u30C3\u30C8\u30B5\u30FC\u30D3\u30B9\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059"
|
|
3235
|
+
walletLoading: "\u30A6\u30A9\u30EC\u30C3\u30C8\u30B5\u30FC\u30D3\u30B9\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059",
|
|
3236
|
+
tokenDetails: "\u30C8\u30FC\u30AF\u30F3\u306E\u8A73\u7D30",
|
|
3237
|
+
tokenAmountMin: "\u91D1\u984D\u306F0\u3088\u308A\u5927\u304D\u304F\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002",
|
|
3238
|
+
tokenAmountMax: "\u6B8B\u9AD8\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002",
|
|
3239
|
+
tokenAddressError: "\u7121\u52B9\u306A\u30A2\u30C9\u30EC\u30B9\u3067\u3059\u3002",
|
|
3240
|
+
amount: "\u91D1\u984D",
|
|
3241
|
+
amountPlaceholder: "\u91D1\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3242
|
+
balance: "\u6B8B\u9AD8",
|
|
3243
|
+
receiveTitle: "\u53D7\u53D6\u30A6\u30A9\u30EC\u30C3\u30C8\u30A2\u30C9\u30EC\u30B9",
|
|
3244
|
+
receivePlaceholder: "\u53D7\u53D6\u30A6\u30A9\u30EC\u30C3\u30C8\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3245
|
+
next: "\u6B21\u3078",
|
|
3246
|
+
copied: "\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",
|
|
3247
|
+
receiveQrcode: "QR\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u53D7\u3051\u53D6\u308B",
|
|
3248
|
+
copyAddress: "\u30A2\u30C9\u30EC\u30B9\u3092\u30B3\u30D4\u30FC",
|
|
3249
|
+
tokenSmartContract: "\u30C8\u30FC\u30AF\u30F3\u306E\u30B9\u30DE\u30FC\u30C8\u30B3\u30F3\u30C8\u30E9\u30AF\u30C8",
|
|
3250
|
+
tokenSmartContractPlaceholder: "\u30C8\u30FC\u30AF\u30F3\u306E\u30B9\u30DE\u30FC\u30C8\u30B3\u30F3\u30C8\u30E9\u30AF\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3251
|
+
tokenSymbol: "\u30C8\u30FC\u30AF\u30F3\u30B7\u30F3\u30DC\u30EB",
|
|
3252
|
+
tokenSymbolPlaceholder: "\u30C8\u30FC\u30AF\u30F3\u30B7\u30F3\u30DC\u30EB\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3253
|
+
tokenDecimals: "\u5C0F\u6570\u70B9",
|
|
3254
|
+
tokenDecimalsPlaceholder: "\u5C0F\u6570\u70B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3255
|
+
import: "\u30A4\u30F3\u30DD\u30FC\u30C8",
|
|
3256
|
+
receive: "\u53D7\u3051\u53D6\u308B",
|
|
3257
|
+
customizedToken: "\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30C8\u30FC\u30AF\u30F3",
|
|
3258
|
+
noMoreRecords: "\u3053\u308C\u4EE5\u4E0A\u306E\u8A18\u9332\u306F\u3042\u308A\u307E\u305B\u3093\uFF01",
|
|
3259
|
+
noRecords: "\u8A18\u9332\u304C\u3042\u308A\u307E\u305B\u3093\uFF01",
|
|
3260
|
+
close: "\u9589\u3058\u308B",
|
|
3261
|
+
back: "\u623B\u308B",
|
|
3262
|
+
importSuccess: "\u30C8\u30FC\u30AF\u30F3\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
|
|
3263
|
+
importFail: "\u30C8\u30FC\u30AF\u30F3\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
|
|
2640
3264
|
};
|
|
2641
3265
|
|
|
2642
3266
|
// src/i18n/ko.json
|
|
@@ -2688,7 +3312,35 @@ var ko_default = {
|
|
|
2688
3312
|
CEXBindApiSecretKey: "API \uBE44\uBC00 \uD0A4",
|
|
2689
3313
|
CEXBindApiPassphrase: "API \uC554\uD638 \uAD6C\uBB38",
|
|
2690
3314
|
cancel: "\uCDE8\uC18C",
|
|
2691
|
-
walletLoading: "\uC9C0\uAC11 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911"
|
|
3315
|
+
walletLoading: "\uC9C0\uAC11 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",
|
|
3316
|
+
tokenDetails: "\uD1A0\uD070 \uC0C1\uC138\uC815\uBCF4",
|
|
3317
|
+
tokenAmountMin: "\uAE08\uC561\uC740 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4.",
|
|
3318
|
+
tokenAmountMax: "\uC794\uC561\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4.",
|
|
3319
|
+
tokenAddressError: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC8FC\uC18C\uC785\uB2C8\uB2E4.",
|
|
3320
|
+
amount: "\uAE08\uC561",
|
|
3321
|
+
amountPlaceholder: "\uAE08\uC561\uC744 \uC785\uB825\uD558\uC138\uC694.",
|
|
3322
|
+
balance: "\uC794\uC561",
|
|
3323
|
+
receiveTitle: "\uC218\uC2E0 \uC9C0\uAC11 \uC8FC\uC18C",
|
|
3324
|
+
receivePlaceholder: "\uC218\uC2E0 \uC9C0\uAC11 \uC8FC\uC18C\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3325
|
+
next: "\uB2E4\uC74C",
|
|
3326
|
+
copied: "\uBCF5\uC0AC\uB428",
|
|
3327
|
+
receiveQrcode: "QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uC5EC \uBC1B\uAE30",
|
|
3328
|
+
copyAddress: "\uC8FC\uC18C \uBCF5\uC0AC",
|
|
3329
|
+
tokenSmartContract: "\uD1A0\uD070 \uC2A4\uB9C8\uD2B8 \uCEE8\uD2B8\uB799\uD2B8",
|
|
3330
|
+
tokenSmartContractPlaceholder: "\uD1A0\uD070 \uC2A4\uB9C8\uD2B8 \uCEE8\uD2B8\uB799\uD2B8\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3331
|
+
tokenSymbol: "\uD1A0\uD070 \uC2EC\uBCFC",
|
|
3332
|
+
tokenSymbolPlaceholder: "\uD1A0\uD070 \uC2EC\uBCFC\uC744 \uC785\uB825\uD558\uC138\uC694.",
|
|
3333
|
+
tokenDecimals: "\uC18C\uC218\uC810 \uC790\uB9AC\uC218",
|
|
3334
|
+
tokenDecimalsPlaceholder: "\uC18C\uC218\uC810 \uC790\uB9AC\uC218\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3335
|
+
import: "\uAC00\uC838\uC624\uAE30",
|
|
3336
|
+
receive: "\uBC1B\uAE30",
|
|
3337
|
+
customizedToken: "\uB9DE\uCDA4\uD615 \uD1A0\uD070",
|
|
3338
|
+
noMoreRecords: "\uC5EC\uAE30\uC5D0 \uB354 \uC774\uC0C1 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4!",
|
|
3339
|
+
noRecords: "\uC5EC\uAE30\uC5D0 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4!",
|
|
3340
|
+
close: "\uB2EB\uAE30",
|
|
3341
|
+
back: "\uB4A4\uB85C",
|
|
3342
|
+
importSuccess: "\uD1A0\uD070\uC744 \uC131\uACF5\uC801\uC73C\uB85C \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4",
|
|
3343
|
+
importFail: "\uD1A0\uD070 \uAC00\uC838\uC624\uAE30\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4"
|
|
2692
3344
|
};
|
|
2693
3345
|
|
|
2694
3346
|
// src/i18n/vi.json
|
|
@@ -2740,7 +3392,35 @@ var vi_default = {
|
|
|
2740
3392
|
CEXBindApiSecretKey: "Kh\xF3a b\xED m\u1EADt API",
|
|
2741
3393
|
CEXBindApiPassphrase: "C\u1EE5m m\u1EADt kh\u1EA9u API",
|
|
2742
3394
|
cancel: "H\u1EE7y",
|
|
2743
|
-
walletLoading: "D\u1ECBch v\u1EE5 v\xED \u0111ang t\u1EA3i"
|
|
3395
|
+
walletLoading: "D\u1ECBch v\u1EE5 v\xED \u0111ang t\u1EA3i",
|
|
3396
|
+
tokenDetails: "Chi ti\u1EBFt Token",
|
|
3397
|
+
tokenAmountMin: "S\u1ED1 ti\u1EC1n ph\u1EA3i l\u1EDBn h\u01A1n 0.",
|
|
3398
|
+
tokenAmountMax: "S\u1ED1 d\u01B0 kh\xF4ng \u0111\u1EE7.",
|
|
3399
|
+
tokenAddressError: "\u0110\u1ECBa ch\u1EC9 kh\xF4ng h\u1EE3p l\u1EC7.",
|
|
3400
|
+
amount: "S\u1ED1 l\u01B0\u1EE3ng",
|
|
3401
|
+
amountPlaceholder: "Nh\u1EADp s\u1ED1 l\u01B0\u1EE3ng.",
|
|
3402
|
+
balance: "S\u1ED1 d\u01B0",
|
|
3403
|
+
receiveTitle: "\u0110\u1ECBa ch\u1EC9 v\xED nh\u1EADn",
|
|
3404
|
+
receivePlaceholder: "Nh\u1EADp \u0111\u1ECBa ch\u1EC9 v\xED nh\u1EADn.",
|
|
3405
|
+
next: "Ti\u1EBFp theo",
|
|
3406
|
+
copied: "\u0110\xE3 sao ch\xE9p",
|
|
3407
|
+
receiveQrcode: "Nh\u1EADn b\u1EB1ng c\xE1ch qu\xE9t m\xE3 QR",
|
|
3408
|
+
copyAddress: "Sao ch\xE9p \u0111\u1ECBa ch\u1EC9",
|
|
3409
|
+
tokenSmartContract: "H\u1EE3p \u0111\u1ED3ng th\xF4ng minh Token",
|
|
3410
|
+
tokenSmartContractPlaceholder: "Nh\u1EADp h\u1EE3p \u0111\u1ED3ng th\xF4ng minh Token.",
|
|
3411
|
+
tokenSymbol: "K\xFD hi\u1EC7u Token",
|
|
3412
|
+
tokenSymbolPlaceholder: "Nh\u1EADp k\xFD hi\u1EC7u Token.",
|
|
3413
|
+
tokenDecimals: "S\u1ED1 th\u1EADp ph\xE2n",
|
|
3414
|
+
tokenDecimalsPlaceholder: "Nh\u1EADp s\u1ED1 th\u1EADp ph\xE2n.",
|
|
3415
|
+
import: "Nh\u1EADp",
|
|
3416
|
+
receive: "Nh\u1EADn",
|
|
3417
|
+
customizedToken: "Token t\xF9y ch\u1EC9nh",
|
|
3418
|
+
noMoreRecords: "Kh\xF4ng c\xF2n b\u1EA3n ghi n\xE0o \u1EDF \u0111\xE2y!",
|
|
3419
|
+
noRecords: "Kh\xF4ng c\xF3 b\u1EA3n ghi n\xE0o \u1EDF \u0111\xE2y!",
|
|
3420
|
+
close: "\u0110\xF3ng",
|
|
3421
|
+
back: "Quay l\u1EA1i",
|
|
3422
|
+
importSuccess: "Nh\u1EADp Token th\xE0nh c\xF4ng",
|
|
3423
|
+
importFail: "Kh\xF4ng th\u1EC3 nh\u1EADp Token"
|
|
2744
3424
|
};
|
|
2745
3425
|
|
|
2746
3426
|
// src/i18n/es.json
|
|
@@ -2792,7 +3472,35 @@ var es_default = {
|
|
|
2792
3472
|
CEXBindApiSecretKey: "Clave Secreta API",
|
|
2793
3473
|
CEXBindApiPassphrase: "Frase de contrase\xF1a API",
|
|
2794
3474
|
cancel: "Cancelar",
|
|
2795
|
-
walletLoading: "El servicio de cartera se est\xE1 cargando"
|
|
3475
|
+
walletLoading: "El servicio de cartera se est\xE1 cargando",
|
|
3476
|
+
tokenDetails: "Detalles del Token",
|
|
3477
|
+
tokenAmountMin: "La cantidad debe ser mayor que 0.",
|
|
3478
|
+
tokenAmountMax: "Saldo insuficiente.",
|
|
3479
|
+
tokenAddressError: "Direcci\xF3n no v\xE1lida.",
|
|
3480
|
+
amount: "Cantidad",
|
|
3481
|
+
amountPlaceholder: "Ingrese la cantidad.",
|
|
3482
|
+
balance: "Saldo",
|
|
3483
|
+
receiveTitle: "Direcci\xF3n de billetera recibida",
|
|
3484
|
+
receivePlaceholder: "Ingrese la direcci\xF3n de la billetera recibida.",
|
|
3485
|
+
next: "Siguiente",
|
|
3486
|
+
copied: "Copiado",
|
|
3487
|
+
receiveQrcode: "Recibir escaneando el c\xF3digo QR",
|
|
3488
|
+
copyAddress: "Copiar direcci\xF3n",
|
|
3489
|
+
tokenSmartContract: "Contrato inteligente del Token",
|
|
3490
|
+
tokenSmartContractPlaceholder: "Ingrese el contrato inteligente del Token.",
|
|
3491
|
+
tokenSymbol: "S\xEDmbolo del Token",
|
|
3492
|
+
tokenSymbolPlaceholder: "Ingrese el s\xEDmbolo del Token.",
|
|
3493
|
+
tokenDecimals: "Decimales",
|
|
3494
|
+
tokenDecimalsPlaceholder: "Ingrese los decimales.",
|
|
3495
|
+
import: "Importar",
|
|
3496
|
+
receive: "Recibir",
|
|
3497
|
+
customizedToken: "Token personalizado",
|
|
3498
|
+
noMoreRecords: "\xA1No hay m\xE1s registros aqu\xED!",
|
|
3499
|
+
noRecords: "\xA1No hay registros aqu\xED!",
|
|
3500
|
+
close: "Cerrar",
|
|
3501
|
+
back: "Atr\xE1s",
|
|
3502
|
+
importSuccess: "Token importado con \xE9xito",
|
|
3503
|
+
importFail: "Error al importar el token"
|
|
2796
3504
|
};
|
|
2797
3505
|
|
|
2798
3506
|
// src/i18n/pt.json
|
|
@@ -2844,7 +3552,35 @@ var pt_default = {
|
|
|
2844
3552
|
CEXBindApiSecretKey: "Chave Secreta API",
|
|
2845
3553
|
CEXBindApiPassphrase: "Senha de API",
|
|
2846
3554
|
cancel: "Cancelar",
|
|
2847
|
-
walletLoading: "O servi\xE7o de carteira est\xE1 carregando"
|
|
3555
|
+
walletLoading: "O servi\xE7o de carteira est\xE1 carregando",
|
|
3556
|
+
tokenDetails: "Detalhes do Token",
|
|
3557
|
+
tokenAmountMin: "O valor deve ser maior que 0.",
|
|
3558
|
+
tokenAmountMax: "Saldo insuficiente.",
|
|
3559
|
+
tokenAddressError: "Endere\xE7o inv\xE1lido.",
|
|
3560
|
+
amount: "Quantidade",
|
|
3561
|
+
amountPlaceholder: "Digite a quantidade.",
|
|
3562
|
+
balance: "Saldo",
|
|
3563
|
+
receiveTitle: "Endere\xE7o da carteira recebida",
|
|
3564
|
+
receivePlaceholder: "Digite o endere\xE7o da carteira recebida.",
|
|
3565
|
+
next: "Pr\xF3ximo",
|
|
3566
|
+
copied: "Copiado",
|
|
3567
|
+
receiveQrcode: "Receber escaneando o c\xF3digo QR",
|
|
3568
|
+
copyAddress: "Copiar endere\xE7o",
|
|
3569
|
+
tokenSmartContract: "Contrato inteligente do Token",
|
|
3570
|
+
tokenSmartContractPlaceholder: "Digite o contrato inteligente do Token.",
|
|
3571
|
+
tokenSymbol: "S\xEDmbolo do Token",
|
|
3572
|
+
tokenSymbolPlaceholder: "Digite o s\xEDmbolo do Token.",
|
|
3573
|
+
tokenDecimals: "Decimais",
|
|
3574
|
+
tokenDecimalsPlaceholder: "Digite os decimais.",
|
|
3575
|
+
import: "Importar",
|
|
3576
|
+
receive: "Receber",
|
|
3577
|
+
customizedToken: "Token personalizado",
|
|
3578
|
+
noMoreRecords: "N\xE3o h\xE1 mais registros aqui!",
|
|
3579
|
+
noRecords: "N\xE3o h\xE1 registros aqui!",
|
|
3580
|
+
close: "Fechar",
|
|
3581
|
+
back: "Voltar",
|
|
3582
|
+
importSuccess: "Token importado com sucesso",
|
|
3583
|
+
importFail: "Falha ao importar o token"
|
|
2848
3584
|
};
|
|
2849
3585
|
|
|
2850
3586
|
// src/i18n/index.ts
|
|
@@ -2861,7 +3597,7 @@ var messages = {
|
|
|
2861
3597
|
};
|
|
2862
3598
|
|
|
2863
3599
|
// src/MatchContext.tsx
|
|
2864
|
-
import { jsx as
|
|
3600
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
2865
3601
|
var queryClient = new QueryClient();
|
|
2866
3602
|
var MatchContext = createContext3(void 0);
|
|
2867
3603
|
var MatchProvider = ({
|
|
@@ -2883,7 +3619,7 @@ var MatchProvider = ({
|
|
|
2883
3619
|
useWalletInit({
|
|
2884
3620
|
config: wallet
|
|
2885
3621
|
});
|
|
2886
|
-
return /* @__PURE__ */
|
|
3622
|
+
return /* @__PURE__ */ jsx12(IntlProvider, { locale: realLocale, messages: messages[realLocale], children: /* @__PURE__ */ jsx12(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx12(
|
|
2887
3623
|
MatchContext.Provider,
|
|
2888
3624
|
{
|
|
2889
3625
|
value: {
|
|
@@ -2894,7 +3630,7 @@ var MatchProvider = ({
|
|
|
2894
3630
|
theme,
|
|
2895
3631
|
locale: realLocale
|
|
2896
3632
|
},
|
|
2897
|
-
children: /* @__PURE__ */
|
|
3633
|
+
children: /* @__PURE__ */ jsx12(context_default, { children })
|
|
2898
3634
|
}
|
|
2899
3635
|
) }) });
|
|
2900
3636
|
};
|
|
@@ -2916,7 +3652,7 @@ function useUserInfo() {
|
|
|
2916
3652
|
logout: logoutStore,
|
|
2917
3653
|
setOverview,
|
|
2918
3654
|
overview,
|
|
2919
|
-
address
|
|
3655
|
+
address,
|
|
2920
3656
|
endpoints,
|
|
2921
3657
|
locale,
|
|
2922
3658
|
refreshOverview
|
|
@@ -2928,7 +3664,7 @@ function useUserInfo() {
|
|
|
2928
3664
|
const { open: BTCOpen } = useBTCModalStore();
|
|
2929
3665
|
const { open: CEXBindOpen } = useCEXBindModalStore();
|
|
2930
3666
|
const walletModalStore = useWalletModalStore();
|
|
2931
|
-
const isLogin =
|
|
3667
|
+
const isLogin = useMemo7(() => !!token && !!overview, [token, overview]);
|
|
2932
3668
|
const logout = async () => {
|
|
2933
3669
|
try {
|
|
2934
3670
|
await toLogoutApi();
|
|
@@ -2956,11 +3692,11 @@ function useUserInfo() {
|
|
|
2956
3692
|
return loginByMethod("google");
|
|
2957
3693
|
};
|
|
2958
3694
|
const loginByWallet = async () => {
|
|
2959
|
-
return window.open(`${endpoints.auth}login/wallet?appid=${appid}`);
|
|
3695
|
+
return window.open(`${endpoints.auth}login/wallet?appid=${appid}&locale=${locale}`);
|
|
2960
3696
|
};
|
|
2961
3697
|
const loginByTelegram = async () => {
|
|
2962
3698
|
return window.open(
|
|
2963
|
-
`${endpoints.auth}login/telegram?appid=${appid}`,
|
|
3699
|
+
`${endpoints.auth}login/telegram?appid=${appid}&locale=${locale}`,
|
|
2964
3700
|
// Replace with the actual authorization URL
|
|
2965
3701
|
"authWindow",
|
|
2966
3702
|
"width=800,height=600"
|
|
@@ -2971,7 +3707,7 @@ function useUserInfo() {
|
|
|
2971
3707
|
case "wallet":
|
|
2972
3708
|
return walletModalStore.open("login", extra?.methods);
|
|
2973
3709
|
case "evm":
|
|
2974
|
-
return window.open(`${endpoints.auth}login/wallet?appid=${appid}`);
|
|
3710
|
+
return window.open(`${endpoints.auth}login/wallet?appid=${appid}&locale=${locale}`);
|
|
2975
3711
|
case "sol":
|
|
2976
3712
|
return SOLOpen("login");
|
|
2977
3713
|
case "tron":
|
|
@@ -3032,14 +3768,14 @@ function useUserInfo() {
|
|
|
3032
3768
|
if (!token) {
|
|
3033
3769
|
throw new Error("You must login first");
|
|
3034
3770
|
}
|
|
3035
|
-
return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&st=` + encodeURIComponent(encodeBase64(token)));
|
|
3771
|
+
return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)));
|
|
3036
3772
|
};
|
|
3037
3773
|
const bindTelegram = async () => {
|
|
3038
3774
|
if (!token) {
|
|
3039
3775
|
throw new Error("You must login first");
|
|
3040
3776
|
}
|
|
3041
3777
|
const authWindow = window.open(
|
|
3042
|
-
`${endpoints.auth}bind/telegram?appid=${appid}&st=` + encodeURIComponent(encodeBase64(token)),
|
|
3778
|
+
`${endpoints.auth}bind/telegram?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)),
|
|
3043
3779
|
// Replace with the actual authorization URL
|
|
3044
3780
|
"authWindow",
|
|
3045
3781
|
"width=800,height=600"
|
|
@@ -3060,7 +3796,7 @@ function useUserInfo() {
|
|
|
3060
3796
|
case "wallet":
|
|
3061
3797
|
return walletModalStore.open("bind", extra?.methods);
|
|
3062
3798
|
case "evm":
|
|
3063
|
-
return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&st=` + encodeURIComponent(encodeBase64(token)));
|
|
3799
|
+
return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)));
|
|
3064
3800
|
case "sol":
|
|
3065
3801
|
return SOLOpen("bind");
|
|
3066
3802
|
case "tron":
|
|
@@ -3144,7 +3880,7 @@ function useUserInfo() {
|
|
|
3144
3880
|
token,
|
|
3145
3881
|
mid,
|
|
3146
3882
|
did,
|
|
3147
|
-
address
|
|
3883
|
+
address,
|
|
3148
3884
|
isLogin,
|
|
3149
3885
|
logout,
|
|
3150
3886
|
getLoginEmailCode,
|
|
@@ -3160,24 +3896,18 @@ function useUserInfo() {
|
|
|
3160
3896
|
}
|
|
3161
3897
|
|
|
3162
3898
|
// src/components/EmailModal/StepVerify.tsx
|
|
3163
|
-
import { useEffect as
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
var EMAIL_INTERVAL = 60;
|
|
3167
|
-
var EMAIL_CODE_LENGTH = 6;
|
|
3168
|
-
|
|
3169
|
-
// src/components/EmailModal/StepVerify.tsx
|
|
3170
|
-
import { FormattedMessage as FormattedMessage3, useIntl as useIntl3 } from "react-intl";
|
|
3171
|
-
import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
3899
|
+
import { useEffect as useEffect14, useMemo as useMemo8, useRef as useRef4, useState as useState13 } from "react";
|
|
3900
|
+
import { FormattedMessage as FormattedMessage5, useIntl as useIntl5 } from "react-intl";
|
|
3901
|
+
import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
3172
3902
|
function StepVerify(props) {
|
|
3173
|
-
const intl =
|
|
3903
|
+
const intl = useIntl5();
|
|
3174
3904
|
const { getLoginEmailCode, loginByEmail } = useUserInfo();
|
|
3175
|
-
const [error, setError] =
|
|
3176
|
-
const [code, setCode] =
|
|
3177
|
-
const [sending, setSending] =
|
|
3178
|
-
const [submitting, setSubmitting] =
|
|
3905
|
+
const [error, setError] = useState13("");
|
|
3906
|
+
const [code, setCode] = useState13("");
|
|
3907
|
+
const [sending, setSending] = useState13(false);
|
|
3908
|
+
const [submitting, setSubmitting] = useState13(false);
|
|
3179
3909
|
const sendTimeRef = useRef4(0);
|
|
3180
|
-
const [sendBtnText, setSendBtnText] =
|
|
3910
|
+
const [sendBtnText, setSendBtnText] = useState13(intl.formatMessage({
|
|
3181
3911
|
id: "send"
|
|
3182
3912
|
}));
|
|
3183
3913
|
const intervalTime = EMAIL_INTERVAL;
|
|
@@ -3213,7 +3943,7 @@ function StepVerify(props) {
|
|
|
3213
3943
|
setSending(false);
|
|
3214
3944
|
}
|
|
3215
3945
|
};
|
|
3216
|
-
|
|
3946
|
+
useEffect14(() => {
|
|
3217
3947
|
onSend();
|
|
3218
3948
|
return () => {
|
|
3219
3949
|
if (intervalRef.current) {
|
|
@@ -3221,7 +3951,7 @@ function StepVerify(props) {
|
|
|
3221
3951
|
}
|
|
3222
3952
|
};
|
|
3223
3953
|
}, []);
|
|
3224
|
-
const canContinue =
|
|
3954
|
+
const canContinue = useMemo8(() => {
|
|
3225
3955
|
return code.length === codeLength;
|
|
3226
3956
|
}, [code]);
|
|
3227
3957
|
const onContinue = async () => {
|
|
@@ -3245,17 +3975,17 @@ function StepVerify(props) {
|
|
|
3245
3975
|
setSubmitting(false);
|
|
3246
3976
|
}
|
|
3247
3977
|
};
|
|
3248
|
-
return /* @__PURE__ */
|
|
3249
|
-
/* @__PURE__ */
|
|
3250
|
-
/* @__PURE__ */
|
|
3251
|
-
/* @__PURE__ */
|
|
3252
|
-
/* @__PURE__ */
|
|
3253
|
-
/* @__PURE__ */
|
|
3978
|
+
return /* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-box", children: [
|
|
3979
|
+
/* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-header", children: [
|
|
3980
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-icon", children: /* @__PURE__ */ jsx13(EmailLineIcon, { size: isDownMd ? 19 : 24 }) }),
|
|
3981
|
+
/* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-header-content", children: [
|
|
3982
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-value", children: props.email }),
|
|
3983
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-tips", children: /* @__PURE__ */ jsx13(FormattedMessage5, { id: "sendEmailTips" }) })
|
|
3254
3984
|
] })
|
|
3255
3985
|
] }),
|
|
3256
|
-
/* @__PURE__ */
|
|
3986
|
+
/* @__PURE__ */ jsx13(Field, { label: intl.formatMessage({
|
|
3257
3987
|
id: "verificationCode"
|
|
3258
|
-
}), error, children: /* @__PURE__ */
|
|
3988
|
+
}), error, children: /* @__PURE__ */ jsx13(
|
|
3259
3989
|
Input,
|
|
3260
3990
|
{
|
|
3261
3991
|
placeholder: intl.formatMessage({
|
|
@@ -3265,7 +3995,7 @@ function StepVerify(props) {
|
|
|
3265
3995
|
maxLength: codeLength,
|
|
3266
3996
|
onChange: (e) => setCode(e.target.value),
|
|
3267
3997
|
value: code,
|
|
3268
|
-
after: /* @__PURE__ */
|
|
3998
|
+
after: /* @__PURE__ */ jsx13(
|
|
3269
3999
|
Button,
|
|
3270
4000
|
{
|
|
3271
4001
|
highlight: true,
|
|
@@ -3284,13 +4014,13 @@ function StepVerify(props) {
|
|
|
3284
4014
|
)
|
|
3285
4015
|
}
|
|
3286
4016
|
) }),
|
|
3287
|
-
/* @__PURE__ */
|
|
4017
|
+
/* @__PURE__ */ jsx13(Button, { disabled: !canContinue, highlight: true, block: true, size: "lg", onClick: onContinue, children: /* @__PURE__ */ jsx13(FormattedMessage5, { id: "continue" }) })
|
|
3288
4018
|
] });
|
|
3289
4019
|
}
|
|
3290
4020
|
|
|
3291
4021
|
// src/components/EmailModal/index.tsx
|
|
3292
|
-
import { useIntl as
|
|
3293
|
-
import { jsx as
|
|
4022
|
+
import { useIntl as useIntl6 } from "react-intl";
|
|
4023
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
3294
4024
|
function EmailModal({
|
|
3295
4025
|
isOpen = false,
|
|
3296
4026
|
width = 480,
|
|
@@ -3298,16 +4028,16 @@ function EmailModal({
|
|
|
3298
4028
|
onBack,
|
|
3299
4029
|
onLogin
|
|
3300
4030
|
}) {
|
|
3301
|
-
const [step, setStep] =
|
|
3302
|
-
const [emailVal, setEmailVal] =
|
|
3303
|
-
const intl =
|
|
3304
|
-
|
|
4031
|
+
const [step, setStep] = useState14("input");
|
|
4032
|
+
const [emailVal, setEmailVal] = useState14("");
|
|
4033
|
+
const intl = useIntl6();
|
|
4034
|
+
useEffect15(() => {
|
|
3305
4035
|
if (!isOpen) {
|
|
3306
4036
|
setStep("input");
|
|
3307
4037
|
setEmailVal("");
|
|
3308
4038
|
}
|
|
3309
4039
|
}, [isOpen]);
|
|
3310
|
-
return /* @__PURE__ */
|
|
4040
|
+
return /* @__PURE__ */ jsx14(
|
|
3311
4041
|
ModalWithHeader,
|
|
3312
4042
|
{
|
|
3313
4043
|
isOpen,
|
|
@@ -3317,22 +4047,22 @@ function EmailModal({
|
|
|
3317
4047
|
id: "email"
|
|
3318
4048
|
}),
|
|
3319
4049
|
onBack: step == "verify" ? () => setStep("input") : onBack,
|
|
3320
|
-
children: step === "input" ? /* @__PURE__ */
|
|
4050
|
+
children: step === "input" ? /* @__PURE__ */ jsx14(StepEmail, { email: emailVal, onContinue: (email) => {
|
|
3321
4051
|
setEmailVal(email);
|
|
3322
4052
|
setStep("verify");
|
|
3323
|
-
} }) : /* @__PURE__ */
|
|
4053
|
+
} }) : /* @__PURE__ */ jsx14(StepVerify, { email: emailVal, onSuccess: onLogin })
|
|
3324
4054
|
}
|
|
3325
4055
|
);
|
|
3326
4056
|
}
|
|
3327
4057
|
|
|
3328
4058
|
// src/components/LoginBox/index.tsx
|
|
3329
|
-
import { useMemo as
|
|
3330
|
-
import { FormattedMessage as
|
|
4059
|
+
import { useMemo as useMemo9, useState as useState15 } from "react";
|
|
4060
|
+
import { FormattedMessage as FormattedMessage6, useIntl as useIntl7 } from "react-intl";
|
|
3331
4061
|
|
|
3332
4062
|
// src/hooks/useAppConfig.ts
|
|
3333
|
-
import { useQuery as
|
|
4063
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
3334
4064
|
function useAppConfig() {
|
|
3335
|
-
const query =
|
|
4065
|
+
const query = useQuery6({
|
|
3336
4066
|
queryKey: ["appConfig"],
|
|
3337
4067
|
queryFn: async () => {
|
|
3338
4068
|
const res = await getAppConfigApi();
|
|
@@ -3350,7 +4080,7 @@ function useAppConfig() {
|
|
|
3350
4080
|
}
|
|
3351
4081
|
|
|
3352
4082
|
// src/components/LoginBox/index.tsx
|
|
3353
|
-
import { Fragment as Fragment2, jsx as
|
|
4083
|
+
import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3354
4084
|
var RecommendItem = ({
|
|
3355
4085
|
icon,
|
|
3356
4086
|
name,
|
|
@@ -3359,20 +4089,20 @@ var RecommendItem = ({
|
|
|
3359
4089
|
children,
|
|
3360
4090
|
footer
|
|
3361
4091
|
}) => {
|
|
3362
|
-
return /* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3364
|
-
/* @__PURE__ */
|
|
3365
|
-
/* @__PURE__ */
|
|
3366
|
-
/* @__PURE__ */
|
|
4092
|
+
return /* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method", children: [
|
|
4093
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method-item", onClick, children: [
|
|
4094
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method-content", children: [
|
|
4095
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-method-icon", children: icon }),
|
|
4096
|
+
/* @__PURE__ */ jsx15("span", { className: "matchid-login-recommend-method-name", children: name })
|
|
3367
4097
|
] }),
|
|
3368
|
-
footer ? footer : children ? /* @__PURE__ */
|
|
4098
|
+
footer ? footer : children ? /* @__PURE__ */ jsx15(
|
|
3369
4099
|
ArrowDownIcon,
|
|
3370
4100
|
{
|
|
3371
4101
|
className: `matchid-login-recommend-method-arrow ${showChildren ? "matchid-login-recommend-method-arrow-active" : ""}`,
|
|
3372
4102
|
size: 20,
|
|
3373
4103
|
color: "var(--matchid-arrow-color)"
|
|
3374
4104
|
}
|
|
3375
|
-
) : /* @__PURE__ */
|
|
4105
|
+
) : /* @__PURE__ */ jsx15(
|
|
3376
4106
|
ArrowRightIcon,
|
|
3377
4107
|
{
|
|
3378
4108
|
className: "matchid-login-recommend-method-arrow",
|
|
@@ -3381,7 +4111,7 @@ var RecommendItem = ({
|
|
|
3381
4111
|
}
|
|
3382
4112
|
)
|
|
3383
4113
|
] }),
|
|
3384
|
-
children && /* @__PURE__ */
|
|
4114
|
+
children && /* @__PURE__ */ jsx15(
|
|
3385
4115
|
"div",
|
|
3386
4116
|
{
|
|
3387
4117
|
className: `matchid-login-recommend-method-popover ${showChildren ? "matchid-login-recommend-method-popover-active" : ""}`,
|
|
@@ -3397,7 +4127,7 @@ function LoginBox({
|
|
|
3397
4127
|
inModal = false
|
|
3398
4128
|
}) {
|
|
3399
4129
|
const config = useAppConfig();
|
|
3400
|
-
const methodConfig =
|
|
4130
|
+
const methodConfig = useMemo9(() => {
|
|
3401
4131
|
if (recommendMethods || methods || walletMethods) {
|
|
3402
4132
|
return {
|
|
3403
4133
|
recommendMethods: recommendMethods ? recommendMethods : walletMethods ? ["wallet"] : [],
|
|
@@ -3439,82 +4169,82 @@ function LoginBox({
|
|
|
3439
4169
|
walletMethods: walletMethodList
|
|
3440
4170
|
};
|
|
3441
4171
|
}, [config.platform, recommendMethods, methods, walletMethods]);
|
|
3442
|
-
const [emailOpen, setEmailOpen] =
|
|
4172
|
+
const [emailOpen, setEmailOpen] = useState15(false);
|
|
3443
4173
|
const { login } = useUserInfo();
|
|
3444
|
-
const [showWallet, setShowWallet] =
|
|
3445
|
-
const intl =
|
|
4174
|
+
const [showWallet, setShowWallet] = useState15(false);
|
|
4175
|
+
const intl = useIntl7();
|
|
3446
4176
|
const isDownMd = useDownMd();
|
|
3447
4177
|
const methodMap = {
|
|
3448
4178
|
wallet: {
|
|
3449
|
-
icon: /* @__PURE__ */
|
|
4179
|
+
icon: /* @__PURE__ */ jsx15(WalletIcon, { size: isDownMd ? 36 : 40 }),
|
|
3450
4180
|
name: intl.formatMessage({ id: "wallet" }),
|
|
3451
4181
|
onClick: () => setShowWallet(!showWallet),
|
|
3452
4182
|
type: "wallet"
|
|
3453
4183
|
},
|
|
3454
4184
|
email: {
|
|
3455
|
-
icon: /* @__PURE__ */
|
|
4185
|
+
icon: /* @__PURE__ */ jsx15(EmailIcon, { size: isDownMd ? 36 : 40 }),
|
|
3456
4186
|
name: intl.formatMessage({ id: "email" }),
|
|
3457
4187
|
onClick: () => {
|
|
3458
4188
|
setEmailOpen(true);
|
|
3459
4189
|
}
|
|
3460
4190
|
},
|
|
3461
4191
|
google: {
|
|
3462
|
-
icon: /* @__PURE__ */
|
|
4192
|
+
icon: /* @__PURE__ */ jsx15(GoogleIcon, { size: isDownMd ? 36 : 40 }),
|
|
3463
4193
|
name: "Google",
|
|
3464
4194
|
onClick: () => login("google")
|
|
3465
4195
|
},
|
|
3466
4196
|
twitter: {
|
|
3467
|
-
icon: /* @__PURE__ */
|
|
4197
|
+
icon: /* @__PURE__ */ jsx15(XIcon, { size: isDownMd ? 36 : 40 }),
|
|
3468
4198
|
name: "X",
|
|
3469
4199
|
onClick: () => login("twitter")
|
|
3470
4200
|
},
|
|
3471
4201
|
telegram: {
|
|
3472
|
-
icon: /* @__PURE__ */
|
|
4202
|
+
icon: /* @__PURE__ */ jsx15(TelegramIcon, { size: isDownMd ? 36 : 40 }),
|
|
3473
4203
|
name: "Telegram",
|
|
3474
4204
|
onClick: () => login("telegram")
|
|
3475
4205
|
},
|
|
3476
4206
|
github: {
|
|
3477
|
-
icon: /* @__PURE__ */
|
|
4207
|
+
icon: /* @__PURE__ */ jsx15(GithubIcon, { size: isDownMd ? 36 : 40 }),
|
|
3478
4208
|
name: "Github",
|
|
3479
4209
|
onClick: () => login("github")
|
|
3480
4210
|
},
|
|
3481
4211
|
discord: {
|
|
3482
|
-
icon: /* @__PURE__ */
|
|
4212
|
+
icon: /* @__PURE__ */ jsx15(DiscordIcon, { size: isDownMd ? 36 : 40 }),
|
|
3483
4213
|
name: "Discord",
|
|
3484
4214
|
onClick: () => login("discord")
|
|
3485
4215
|
},
|
|
3486
4216
|
linkedin: {
|
|
3487
|
-
icon: /* @__PURE__ */
|
|
4217
|
+
icon: /* @__PURE__ */ jsx15(LinkedinIcon, { size: isDownMd ? 36 : 40 }),
|
|
3488
4218
|
name: "LinkedIn",
|
|
3489
4219
|
onClick: () => login("linkedin")
|
|
3490
4220
|
},
|
|
3491
4221
|
facebook: {
|
|
3492
|
-
icon: /* @__PURE__ */
|
|
4222
|
+
icon: /* @__PURE__ */ jsx15(FacebookIcon, { size: isDownMd ? 36 : 40 }),
|
|
3493
4223
|
name: "Facebook",
|
|
3494
4224
|
onClick: () => login("facebook")
|
|
3495
4225
|
},
|
|
3496
4226
|
youtube: {
|
|
3497
|
-
icon: /* @__PURE__ */
|
|
4227
|
+
icon: /* @__PURE__ */ jsx15(YoutubeIcon, { size: isDownMd ? 36 : 40 }),
|
|
3498
4228
|
name: "Youtube",
|
|
3499
4229
|
onClick: () => login("youtube")
|
|
3500
4230
|
}
|
|
3501
4231
|
};
|
|
3502
4232
|
const { walletMap } = useWalletConfig();
|
|
3503
|
-
return /* @__PURE__ */
|
|
3504
|
-
(!inModal || !emailOpen) && /* @__PURE__ */
|
|
3505
|
-
/* @__PURE__ */
|
|
3506
|
-
return /* @__PURE__ */
|
|
4233
|
+
return /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
4234
|
+
(!inModal || !emailOpen) && /* @__PURE__ */ jsxs10("div", { className: "matchid-login-box", children: [
|
|
4235
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-list", children: methodConfig.recommendMethods.map((m) => {
|
|
4236
|
+
return /* @__PURE__ */ jsx15(
|
|
3507
4237
|
RecommendItem,
|
|
3508
4238
|
{
|
|
3509
4239
|
icon: methodMap[m]?.icon,
|
|
3510
4240
|
name: methodMap[m]?.name,
|
|
3511
4241
|
onClick: methodMap[m]?.onClick,
|
|
3512
4242
|
showChildren: m == "wallet" && showWallet,
|
|
3513
|
-
children: m == "wallet" && /* @__PURE__ */
|
|
3514
|
-
/* @__PURE__ */
|
|
3515
|
-
/* @__PURE__ */
|
|
4243
|
+
children: m == "wallet" && /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
4244
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-divider" }),
|
|
4245
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-list", children: methodConfig.walletMethods.map((n) => {
|
|
3516
4246
|
const m2 = walletMap[n];
|
|
3517
|
-
return /* @__PURE__ */
|
|
4247
|
+
return /* @__PURE__ */ jsxs10(
|
|
3518
4248
|
"div",
|
|
3519
4249
|
{
|
|
3520
4250
|
className: "matchid-login-recommend-wallet-item",
|
|
@@ -3522,16 +4252,16 @@ function LoginBox({
|
|
|
3522
4252
|
login(m2.method);
|
|
3523
4253
|
},
|
|
3524
4254
|
children: [
|
|
3525
|
-
/* @__PURE__ */
|
|
3526
|
-
/* @__PURE__ */
|
|
3527
|
-
/* @__PURE__ */
|
|
4255
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-wallet-item-content", children: [
|
|
4256
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-item-icon", children: m2.icon }),
|
|
4257
|
+
/* @__PURE__ */ jsx15(
|
|
3528
4258
|
"div",
|
|
3529
4259
|
{
|
|
3530
4260
|
className: "matchid-login-recommend-wallet-item-hover-icon",
|
|
3531
4261
|
children: m2.activeIcon
|
|
3532
4262
|
}
|
|
3533
4263
|
),
|
|
3534
|
-
/* @__PURE__ */
|
|
4264
|
+
/* @__PURE__ */ jsx15(
|
|
3535
4265
|
"span",
|
|
3536
4266
|
{
|
|
3537
4267
|
className: "matchid-login-recommend-wallet-item-name",
|
|
@@ -3539,7 +4269,7 @@ function LoginBox({
|
|
|
3539
4269
|
}
|
|
3540
4270
|
)
|
|
3541
4271
|
] }),
|
|
3542
|
-
/* @__PURE__ */
|
|
4272
|
+
/* @__PURE__ */ jsx15(
|
|
3543
4273
|
ArrowRightIcon,
|
|
3544
4274
|
{
|
|
3545
4275
|
className: "matchid-login-recommend-wallet-item-arrow",
|
|
@@ -3557,10 +4287,10 @@ function LoginBox({
|
|
|
3557
4287
|
m
|
|
3558
4288
|
);
|
|
3559
4289
|
}) }),
|
|
3560
|
-
methodConfig.methods.length > 0 && /* @__PURE__ */
|
|
3561
|
-
/* @__PURE__ */
|
|
3562
|
-
/* @__PURE__ */
|
|
3563
|
-
return /* @__PURE__ */
|
|
4290
|
+
methodConfig.methods.length > 0 && /* @__PURE__ */ jsxs10("div", { className: "matchid-login-other", children: [
|
|
4291
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-other-text", children: /* @__PURE__ */ jsx15(FormattedMessage6, { id: "otherLoginMethods" }) }),
|
|
4292
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-method-box", children: methodConfig.methods.map((m) => {
|
|
4293
|
+
return /* @__PURE__ */ jsx15(
|
|
3564
4294
|
"div",
|
|
3565
4295
|
{
|
|
3566
4296
|
className: "matchid-login-method-item",
|
|
@@ -3573,7 +4303,7 @@ function LoginBox({
|
|
|
3573
4303
|
}) })
|
|
3574
4304
|
] })
|
|
3575
4305
|
] }),
|
|
3576
|
-
/* @__PURE__ */
|
|
4306
|
+
/* @__PURE__ */ jsx15(
|
|
3577
4307
|
EmailModal,
|
|
3578
4308
|
{
|
|
3579
4309
|
isOpen: emailOpen,
|
|
@@ -3589,56 +4319,56 @@ function LoginBox({
|
|
|
3589
4319
|
}
|
|
3590
4320
|
|
|
3591
4321
|
// src/components/LoginButton/index.tsx
|
|
3592
|
-
import { useState as
|
|
4322
|
+
import { useState as useState17 } from "react";
|
|
3593
4323
|
|
|
3594
4324
|
// src/components/LoginPanel/index.tsx
|
|
3595
|
-
import { FormattedMessage as
|
|
3596
|
-
import { jsx as
|
|
4325
|
+
import { FormattedMessage as FormattedMessage7 } from "react-intl";
|
|
4326
|
+
import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3597
4327
|
function LoginPanel({
|
|
3598
4328
|
header,
|
|
3599
4329
|
onClose,
|
|
3600
4330
|
...props
|
|
3601
4331
|
}) {
|
|
3602
4332
|
const isDownMd = useDownMd();
|
|
3603
|
-
return /* @__PURE__ */
|
|
3604
|
-
header ? header : /* @__PURE__ */
|
|
3605
|
-
/* @__PURE__ */
|
|
3606
|
-
/* @__PURE__ */
|
|
3607
|
-
/* @__PURE__ */
|
|
4333
|
+
return /* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel", children: [
|
|
4334
|
+
header ? header : /* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel-header", children: [
|
|
4335
|
+
/* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel-header-content", children: [
|
|
4336
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-title", children: /* @__PURE__ */ jsx16(FormattedMessage7, { id: "loginTitle" }) }),
|
|
4337
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-subtilte", children: /* @__PURE__ */ jsx16(FormattedMessage7, { id: "loginTips" }) })
|
|
3608
4338
|
] }),
|
|
3609
|
-
onClose && /* @__PURE__ */
|
|
4339
|
+
onClose && /* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-close", onClick: onClose, children: /* @__PURE__ */ jsx16(CloseRoundIcon, { size: isDownMd ? 24 : 30 }) })
|
|
3610
4340
|
] }),
|
|
3611
|
-
/* @__PURE__ */
|
|
3612
|
-
/* @__PURE__ */
|
|
4341
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-divide" }),
|
|
4342
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-box", children: /* @__PURE__ */ jsx16(LoginBox, { ...props }) })
|
|
3613
4343
|
] });
|
|
3614
4344
|
}
|
|
3615
4345
|
|
|
3616
4346
|
// src/components/LoginModal/index.tsx
|
|
3617
|
-
import { jsx as
|
|
4347
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
3618
4348
|
function LoginModal({
|
|
3619
4349
|
isOpen = false,
|
|
3620
4350
|
width = 480,
|
|
3621
4351
|
...props
|
|
3622
4352
|
}) {
|
|
3623
4353
|
const { isLogin } = useUserInfo();
|
|
3624
|
-
return /* @__PURE__ */
|
|
4354
|
+
return /* @__PURE__ */ jsx17(
|
|
3625
4355
|
Modal,
|
|
3626
4356
|
{
|
|
3627
4357
|
isOpen: isOpen && !isLogin,
|
|
3628
4358
|
width,
|
|
3629
|
-
children: /* @__PURE__ */
|
|
4359
|
+
children: /* @__PURE__ */ jsx17(LoginPanel, { ...props, inModal: true })
|
|
3630
4360
|
}
|
|
3631
4361
|
);
|
|
3632
4362
|
}
|
|
3633
4363
|
|
|
3634
4364
|
// src/components/UserPopover/index.tsx
|
|
3635
|
-
import { useState as
|
|
4365
|
+
import { useState as useState16 } from "react";
|
|
3636
4366
|
|
|
3637
4367
|
// src/assets/icon/ProfileIcon.tsx
|
|
3638
|
-
import { jsx as
|
|
4368
|
+
import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3639
4369
|
function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
3640
|
-
return /* @__PURE__ */
|
|
3641
|
-
/* @__PURE__ */
|
|
4370
|
+
return /* @__PURE__ */ jsxs12("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4371
|
+
/* @__PURE__ */ jsx18(
|
|
3642
4372
|
"path",
|
|
3643
4373
|
{
|
|
3644
4374
|
fillRule: "evenodd",
|
|
@@ -3647,7 +4377,7 @@ function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
|
3647
4377
|
fill: color
|
|
3648
4378
|
}
|
|
3649
4379
|
),
|
|
3650
|
-
/* @__PURE__ */
|
|
4380
|
+
/* @__PURE__ */ jsx18(
|
|
3651
4381
|
"path",
|
|
3652
4382
|
{
|
|
3653
4383
|
fillRule: "evenodd",
|
|
@@ -3660,11 +4390,11 @@ function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
|
3660
4390
|
}
|
|
3661
4391
|
|
|
3662
4392
|
// src/components/UserPopover/index.tsx
|
|
3663
|
-
import { FormattedMessage as
|
|
3664
|
-
import { jsx as
|
|
4393
|
+
import { FormattedMessage as FormattedMessage8, useIntl as useIntl8 } from "react-intl";
|
|
4394
|
+
import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3665
4395
|
function UserContent() {
|
|
3666
|
-
const { logout, address
|
|
3667
|
-
const [logouting, setLogouting] =
|
|
4396
|
+
const { logout, address, username } = useUserInfo();
|
|
4397
|
+
const [logouting, setLogouting] = useState16(false);
|
|
3668
4398
|
const onLogout = async () => {
|
|
3669
4399
|
if (logouting) return;
|
|
3670
4400
|
try {
|
|
@@ -3682,34 +4412,34 @@ function UserContent() {
|
|
|
3682
4412
|
rightIcon,
|
|
3683
4413
|
onClick
|
|
3684
4414
|
}) => {
|
|
3685
|
-
return /* @__PURE__ */
|
|
3686
|
-
/* @__PURE__ */
|
|
4415
|
+
return /* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-item", onClick, children: [
|
|
4416
|
+
/* @__PURE__ */ jsxs13("div", { className: `matchid-user-popover-item-content`, children: [
|
|
3687
4417
|
icon,
|
|
3688
|
-
/* @__PURE__ */
|
|
4418
|
+
/* @__PURE__ */ jsx19("div", { className: "matchid-user-popover-item-text", children })
|
|
3689
4419
|
] }),
|
|
3690
4420
|
rightIcon
|
|
3691
4421
|
] });
|
|
3692
4422
|
};
|
|
3693
4423
|
const UserDivider = () => {
|
|
3694
|
-
return /* @__PURE__ */
|
|
4424
|
+
return /* @__PURE__ */ jsx19("div", { className: `matchid-user-popover-divider` });
|
|
3695
4425
|
};
|
|
3696
|
-
const [usernameOpen, setUsernameOpen] =
|
|
4426
|
+
const [usernameOpen, setUsernameOpen] = useState16(false);
|
|
3697
4427
|
const [copied, setCopied] = useCopyClipboard();
|
|
3698
|
-
const intl =
|
|
3699
|
-
return /* @__PURE__ */
|
|
3700
|
-
/* @__PURE__ */
|
|
3701
|
-
/* @__PURE__ */
|
|
3702
|
-
setCopied(
|
|
3703
|
-
}, icon: copied ? /* @__PURE__ */
|
|
3704
|
-
/* @__PURE__ */
|
|
3705
|
-
/* @__PURE__ */
|
|
4428
|
+
const intl = useIntl8();
|
|
4429
|
+
return /* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-content", children: [
|
|
4430
|
+
/* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-list", children: [
|
|
4431
|
+
/* @__PURE__ */ jsx19(UserItem, { onClick: () => {
|
|
4432
|
+
setCopied(address);
|
|
4433
|
+
}, icon: copied ? /* @__PURE__ */ jsx19(CheckIcon, { size: 20, color: "#0ecb81" }) : /* @__PURE__ */ jsx19(CopyIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ jsx19(CheckIcon, { size: 20, color: "var(--icon-color)" }), children: truncateAddress(address) }),
|
|
4434
|
+
/* @__PURE__ */ jsx19(UserDivider, {}),
|
|
4435
|
+
/* @__PURE__ */ jsx19(UserItem, { onClick: () => {
|
|
3706
4436
|
setUsernameOpen(true);
|
|
3707
|
-
}, icon: /* @__PURE__ */
|
|
4437
|
+
}, icon: /* @__PURE__ */ jsx19(ProfileIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ jsx19(ArrowRightIcon, { size: 20, color: "var(--icon-color)" }), children: username || intl.formatMessage({
|
|
3708
4438
|
id: "setUsername"
|
|
3709
4439
|
}) })
|
|
3710
4440
|
] }),
|
|
3711
|
-
/* @__PURE__ */
|
|
3712
|
-
/* @__PURE__ */
|
|
4441
|
+
/* @__PURE__ */ jsx19(Button, { onClick: onLogout, loading: logouting, children: /* @__PURE__ */ jsx19(FormattedMessage8, { id: "disconnect" }) }),
|
|
4442
|
+
/* @__PURE__ */ jsx19(UsernameModal, { isOpen: usernameOpen, onClose: () => {
|
|
3713
4443
|
setUsernameOpen(false);
|
|
3714
4444
|
}, onSuccess: () => {
|
|
3715
4445
|
setUsernameOpen(false);
|
|
@@ -3720,12 +4450,12 @@ function UserPopover({
|
|
|
3720
4450
|
children,
|
|
3721
4451
|
...props
|
|
3722
4452
|
}) {
|
|
3723
|
-
return /* @__PURE__ */
|
|
4453
|
+
return /* @__PURE__ */ jsx19(Popover, { ...props, content: /* @__PURE__ */ jsx19(UserContent, {}), children });
|
|
3724
4454
|
}
|
|
3725
4455
|
|
|
3726
4456
|
// src/components/LoginButton/index.tsx
|
|
3727
|
-
import { FormattedMessage as
|
|
3728
|
-
import { Fragment as Fragment3, jsx as
|
|
4457
|
+
import { FormattedMessage as FormattedMessage9, useIntl as useIntl9 } from "react-intl";
|
|
4458
|
+
import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3729
4459
|
function LoginButton({
|
|
3730
4460
|
loginRender,
|
|
3731
4461
|
methods,
|
|
@@ -3737,12 +4467,12 @@ function LoginButton({
|
|
|
3737
4467
|
walletMethods,
|
|
3738
4468
|
...props
|
|
3739
4469
|
}) {
|
|
3740
|
-
const intl =
|
|
4470
|
+
const intl = useIntl9();
|
|
3741
4471
|
const { isLogin, username } = useUserInfo();
|
|
3742
|
-
const [loginOpen, setLoginOpen] =
|
|
4472
|
+
const [loginOpen, setLoginOpen] = useState17(false);
|
|
3743
4473
|
if (!isLogin) {
|
|
3744
|
-
return /* @__PURE__ */
|
|
3745
|
-
/* @__PURE__ */
|
|
4474
|
+
return /* @__PURE__ */ jsxs14(Fragment3, { children: [
|
|
4475
|
+
/* @__PURE__ */ jsx20(
|
|
3746
4476
|
LoginModal,
|
|
3747
4477
|
{
|
|
3748
4478
|
methods,
|
|
@@ -3752,32 +4482,32 @@ function LoginButton({
|
|
|
3752
4482
|
onClose: () => setLoginOpen(false)
|
|
3753
4483
|
}
|
|
3754
4484
|
),
|
|
3755
|
-
/* @__PURE__ */
|
|
3756
|
-
/* @__PURE__ */
|
|
3757
|
-
/* @__PURE__ */
|
|
4485
|
+
/* @__PURE__ */ jsxs14(Button, { className: "matchid-unlogin-btn", ...props, highlight: true, onClick: () => setLoginOpen(true), children: [
|
|
4486
|
+
/* @__PURE__ */ jsx20(UnLoginIcon_default, {}),
|
|
4487
|
+
/* @__PURE__ */ jsx20("span", { children: /* @__PURE__ */ jsx20(FormattedMessage9, { id: "login" }) })
|
|
3758
4488
|
] })
|
|
3759
4489
|
] });
|
|
3760
4490
|
}
|
|
3761
|
-
return loginRender ? /* @__PURE__ */
|
|
3762
|
-
/* @__PURE__ */
|
|
3763
|
-
/* @__PURE__ */
|
|
4491
|
+
return loginRender ? /* @__PURE__ */ jsx20(Fragment3, { children: loginRender }) : /* @__PURE__ */ jsx20(UserPopover, { position: popoverPosition, type: popoverType, gap: popoverGap, children: /* @__PURE__ */ jsxs14(Button, { onClick: onLoginClick, className: "matchid-login-btn", ...props, children: [
|
|
4492
|
+
/* @__PURE__ */ jsx20(LoginIcon_default, {}),
|
|
4493
|
+
/* @__PURE__ */ jsx20("span", { children: username ? truncateAddress(username) : "MatchID " + intl.formatMessage({
|
|
3764
4494
|
id: "user"
|
|
3765
4495
|
}) })
|
|
3766
4496
|
] }) });
|
|
3767
4497
|
}
|
|
3768
4498
|
|
|
3769
4499
|
// src/components/UsernameModal/index.tsx
|
|
3770
|
-
import { useEffect as
|
|
3771
|
-
import { FormattedMessage as
|
|
3772
|
-
import { jsx as
|
|
4500
|
+
import { useEffect as useEffect16, useMemo as useMemo10, useState as useState18 } from "react";
|
|
4501
|
+
import { FormattedMessage as FormattedMessage10, useIntl as useIntl10 } from "react-intl";
|
|
4502
|
+
import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3773
4503
|
var ValidItem = ({
|
|
3774
4504
|
success = false,
|
|
3775
4505
|
text
|
|
3776
4506
|
}) => {
|
|
3777
4507
|
const isDownMd = useDownMd();
|
|
3778
|
-
return /* @__PURE__ */
|
|
3779
|
-
success ? /* @__PURE__ */
|
|
3780
|
-
/* @__PURE__ */
|
|
4508
|
+
return /* @__PURE__ */ jsxs15("div", { className: `matchid-valid-status-item matchid-valid-status-${success ? "success" : "error"}`, children: [
|
|
4509
|
+
success ? /* @__PURE__ */ jsx21(CheckRoundIcon, { size: isDownMd ? 12 : 16 }) : /* @__PURE__ */ jsx21(InfoLineIcon, { size: isDownMd ? 12 : 16 }),
|
|
4510
|
+
/* @__PURE__ */ jsx21("span", { children: text })
|
|
3781
4511
|
] });
|
|
3782
4512
|
};
|
|
3783
4513
|
function UsernameModal({
|
|
@@ -3788,23 +4518,23 @@ function UsernameModal({
|
|
|
3788
4518
|
}) {
|
|
3789
4519
|
const { username, refreshOverview } = useUserInfo();
|
|
3790
4520
|
const { isLogin } = useUserInfo();
|
|
3791
|
-
const [val, setVal] =
|
|
3792
|
-
const [error, setError] =
|
|
4521
|
+
const [val, setVal] = useState18(username);
|
|
4522
|
+
const [error, setError] = useState18("");
|
|
3793
4523
|
const isDownMd = useDownMd();
|
|
3794
|
-
|
|
4524
|
+
useEffect16(() => {
|
|
3795
4525
|
if (isOpen) {
|
|
3796
4526
|
setVal(username);
|
|
3797
4527
|
setError("");
|
|
3798
4528
|
}
|
|
3799
4529
|
}, [isOpen]);
|
|
3800
|
-
const isValid =
|
|
4530
|
+
const isValid = useMemo10(() => {
|
|
3801
4531
|
return isValidUsername(val);
|
|
3802
4532
|
}, [val]);
|
|
3803
|
-
const isLength =
|
|
4533
|
+
const isLength = useMemo10(() => {
|
|
3804
4534
|
return val.length >= 2 && val.length <= 32;
|
|
3805
4535
|
}, [val]);
|
|
3806
4536
|
const isSafe = isValid && isLength;
|
|
3807
|
-
const [isSubmitting, setIsSubmitting] =
|
|
4537
|
+
const [isSubmitting, setIsSubmitting] = useState18(false);
|
|
3808
4538
|
const onSubmit = async () => {
|
|
3809
4539
|
if (isSubmitting) return;
|
|
3810
4540
|
try {
|
|
@@ -3824,13 +4554,13 @@ function UsernameModal({
|
|
|
3824
4554
|
setIsSubmitting(false);
|
|
3825
4555
|
}
|
|
3826
4556
|
};
|
|
3827
|
-
const intl =
|
|
3828
|
-
return /* @__PURE__ */
|
|
4557
|
+
const intl = useIntl10();
|
|
4558
|
+
return /* @__PURE__ */ jsx21(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || intl.formatMessage({
|
|
3829
4559
|
id: username ? "editUsernameTitle" : "setUsernameTitle"
|
|
3830
|
-
}), children: /* @__PURE__ */
|
|
3831
|
-
/* @__PURE__ */
|
|
4560
|
+
}), children: /* @__PURE__ */ jsxs15("div", { className: "matchid-username-box", children: [
|
|
4561
|
+
/* @__PURE__ */ jsx21(Field, { label: intl.formatMessage({
|
|
3832
4562
|
id: "username"
|
|
3833
|
-
}), error, children: /* @__PURE__ */
|
|
4563
|
+
}), error, children: /* @__PURE__ */ jsx21(
|
|
3834
4564
|
Input,
|
|
3835
4565
|
{
|
|
3836
4566
|
placeholder: intl.formatMessage({
|
|
@@ -3843,8 +4573,8 @@ function UsernameModal({
|
|
|
3843
4573
|
value: val
|
|
3844
4574
|
}
|
|
3845
4575
|
) }),
|
|
3846
|
-
/* @__PURE__ */
|
|
3847
|
-
/* @__PURE__ */
|
|
4576
|
+
/* @__PURE__ */ jsxs15("div", { className: "matchid-valid", children: [
|
|
4577
|
+
/* @__PURE__ */ jsx21(
|
|
3848
4578
|
ValidItem,
|
|
3849
4579
|
{
|
|
3850
4580
|
success: isValid,
|
|
@@ -3853,21 +4583,21 @@ function UsernameModal({
|
|
|
3853
4583
|
})
|
|
3854
4584
|
}
|
|
3855
4585
|
),
|
|
3856
|
-
/* @__PURE__ */
|
|
4586
|
+
/* @__PURE__ */ jsx21(ValidItem, { success: isLength, text: intl.formatMessage({
|
|
3857
4587
|
id: "usernameLengthError"
|
|
3858
4588
|
}) })
|
|
3859
4589
|
] }),
|
|
3860
|
-
/* @__PURE__ */
|
|
4590
|
+
/* @__PURE__ */ jsx21(Button, { disabled: !isSafe, loading: isSubmitting, style: {
|
|
3861
4591
|
marginTop: isDownMd ? "36px" : "64px"
|
|
3862
|
-
}, onClick: onSubmit, size: "lg", block: true, highlight: true, children: /* @__PURE__ */
|
|
3863
|
-
/* @__PURE__ */
|
|
4592
|
+
}, onClick: onSubmit, size: "lg", block: true, highlight: true, children: /* @__PURE__ */ jsx21(FormattedMessage10, { id: "confirm" }) }),
|
|
4593
|
+
/* @__PURE__ */ jsx21(Button, { style: {
|
|
3864
4594
|
marginTop: isDownMd ? "12px" : "24px"
|
|
3865
|
-
}, onClick: props.onClose, size: "lg", block: true, children: /* @__PURE__ */
|
|
4595
|
+
}, onClick: props.onClose, size: "lg", block: true, children: /* @__PURE__ */ jsx21(FormattedMessage10, { id: "cancel" }) })
|
|
3866
4596
|
] }) });
|
|
3867
4597
|
}
|
|
3868
4598
|
|
|
3869
4599
|
// src/components/SOLModal/index.tsx
|
|
3870
|
-
import React7, { useEffect as
|
|
4600
|
+
import React7, { useEffect as useEffect17, useState as useState19 } from "react";
|
|
3871
4601
|
import { clusterApiUrl } from "@solana/web3.js";
|
|
3872
4602
|
import { useWallet as useWallet2, WalletProvider, ConnectionProvider } from "@solana/wallet-adapter-react";
|
|
3873
4603
|
import { WalletModalProvider, useWalletModal } from "@solana/wallet-adapter-react-ui";
|
|
@@ -3918,10 +4648,10 @@ import {
|
|
|
3918
4648
|
XDEFIWalletAdapter
|
|
3919
4649
|
} from "@solana/wallet-adapter-wallets";
|
|
3920
4650
|
import "@solana/wallet-adapter-react-ui/styles.css";
|
|
3921
|
-
import { useIntl as
|
|
4651
|
+
import { useIntl as useIntl11 } from "react-intl";
|
|
3922
4652
|
|
|
3923
4653
|
// src/components/WalletModalContent/index.tsx
|
|
3924
|
-
import { useMemo as
|
|
4654
|
+
import { useMemo as useMemo11 } from "react";
|
|
3925
4655
|
|
|
3926
4656
|
// src/assets/wallet.ts
|
|
3927
4657
|
var walletErrorImage = "data:image/png;base64,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";
|
|
@@ -3931,7 +4661,7 @@ var walletConnectImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEA
|
|
|
3931
4661
|
var walletSigningImage = "data:image/png;base64,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";
|
|
3932
4662
|
|
|
3933
4663
|
// src/components/WalletModalContent/index.tsx
|
|
3934
|
-
import { jsx as
|
|
4664
|
+
import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3935
4665
|
function WalletModalContent({
|
|
3936
4666
|
status,
|
|
3937
4667
|
error,
|
|
@@ -3939,10 +4669,10 @@ function WalletModalContent({
|
|
|
3939
4669
|
setError,
|
|
3940
4670
|
setVisible,
|
|
3941
4671
|
visible,
|
|
3942
|
-
address
|
|
4672
|
+
address,
|
|
3943
4673
|
connected
|
|
3944
4674
|
}) {
|
|
3945
|
-
const pageData =
|
|
4675
|
+
const pageData = useMemo11(() => {
|
|
3946
4676
|
if (status == "success") {
|
|
3947
4677
|
return {
|
|
3948
4678
|
btnText: "Disconnect Wallet",
|
|
@@ -4000,13 +4730,13 @@ function WalletModalContent({
|
|
|
4000
4730
|
text: "Please Connect your wallet",
|
|
4001
4731
|
statusImage: walletConnectImage
|
|
4002
4732
|
};
|
|
4003
|
-
}, [visible, connected, status, error,
|
|
4004
|
-
return /* @__PURE__ */
|
|
4005
|
-
/* @__PURE__ */
|
|
4006
|
-
/* @__PURE__ */
|
|
4007
|
-
/* @__PURE__ */
|
|
4733
|
+
}, [visible, connected, status, error, address]);
|
|
4734
|
+
return /* @__PURE__ */ jsx22("div", { className: "matchid-wallet-container", children: /* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-box`, children: [
|
|
4735
|
+
/* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-content`, children: [
|
|
4736
|
+
/* @__PURE__ */ jsx22("img", { src: pageData.statusImage }),
|
|
4737
|
+
/* @__PURE__ */ jsx22("div", { className: pageData.isError ? "text-[#F7585E]" : "", children: pageData.text })
|
|
4008
4738
|
] }),
|
|
4009
|
-
/* @__PURE__ */
|
|
4739
|
+
/* @__PURE__ */ jsx22(
|
|
4010
4740
|
Button,
|
|
4011
4741
|
{
|
|
4012
4742
|
block: true,
|
|
@@ -4021,7 +4751,7 @@ function WalletModalContent({
|
|
|
4021
4751
|
}
|
|
4022
4752
|
|
|
4023
4753
|
// src/components/SOLModal/index.tsx
|
|
4024
|
-
import { jsx as
|
|
4754
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
4025
4755
|
function WalletContent({
|
|
4026
4756
|
onSuccess,
|
|
4027
4757
|
type
|
|
@@ -4029,17 +4759,17 @@ function WalletContent({
|
|
|
4029
4759
|
const { setVisible, visible } = useWalletModal();
|
|
4030
4760
|
const wallet = useWallet2();
|
|
4031
4761
|
const { events, login } = useMatch();
|
|
4032
|
-
const [status, setStatus] =
|
|
4762
|
+
const [status, setStatus] = useState19("");
|
|
4033
4763
|
const statusRef = React7.useRef(status);
|
|
4034
|
-
const [error, setError] =
|
|
4035
|
-
|
|
4764
|
+
const [error, setError] = useState19("");
|
|
4765
|
+
useEffect17(() => {
|
|
4036
4766
|
const init = async () => {
|
|
4037
4767
|
await wallet.disconnect();
|
|
4038
4768
|
setVisible(true);
|
|
4039
4769
|
};
|
|
4040
4770
|
init();
|
|
4041
4771
|
}, []);
|
|
4042
|
-
|
|
4772
|
+
useEffect17(() => {
|
|
4043
4773
|
if (wallet.connected) {
|
|
4044
4774
|
console.log("wallet.connected", wallet.connected);
|
|
4045
4775
|
toLoginInWallet();
|
|
@@ -4047,14 +4777,14 @@ function WalletContent({
|
|
|
4047
4777
|
}, [wallet.connected]);
|
|
4048
4778
|
const toLoginInWallet = async () => {
|
|
4049
4779
|
if (statusRef.current) return;
|
|
4050
|
-
const
|
|
4780
|
+
const address = wallet.publicKey?.toBase58() || "";
|
|
4051
4781
|
try {
|
|
4052
4782
|
setStatus("nonce");
|
|
4053
4783
|
statusRef.current = "nonce";
|
|
4054
4784
|
const res = type == "bind" ? await getWalletInitApi({
|
|
4055
|
-
address
|
|
4785
|
+
address,
|
|
4056
4786
|
type: "SOL"
|
|
4057
|
-
}) : await getWalletNonceApi({ address
|
|
4787
|
+
}) : await getWalletNonceApi({ address, type: "SOL" });
|
|
4058
4788
|
if (!isSuccess(res)) {
|
|
4059
4789
|
throw new Error(res.message);
|
|
4060
4790
|
}
|
|
@@ -4067,7 +4797,7 @@ function WalletContent({
|
|
|
4067
4797
|
const signedMessage = await wallet.signMessage(encodedMessage);
|
|
4068
4798
|
let obj = {
|
|
4069
4799
|
type: "SOL",
|
|
4070
|
-
address
|
|
4800
|
+
address,
|
|
4071
4801
|
signature: Buffer.from(signedMessage).toString("base64"),
|
|
4072
4802
|
message,
|
|
4073
4803
|
connector_type: "SOL",
|
|
@@ -4103,7 +4833,7 @@ function WalletContent({
|
|
|
4103
4833
|
statusRef.current = "";
|
|
4104
4834
|
}
|
|
4105
4835
|
};
|
|
4106
|
-
return /* @__PURE__ */
|
|
4836
|
+
return /* @__PURE__ */ jsx23(
|
|
4107
4837
|
WalletModalContent,
|
|
4108
4838
|
{
|
|
4109
4839
|
connected: wallet.connected,
|
|
@@ -4163,20 +4893,20 @@ function SOLConnectModal({
|
|
|
4163
4893
|
onSuccess,
|
|
4164
4894
|
...props
|
|
4165
4895
|
}) {
|
|
4166
|
-
const intl =
|
|
4167
|
-
return /* @__PURE__ */
|
|
4896
|
+
const intl = useIntl11();
|
|
4897
|
+
return /* @__PURE__ */ jsx23(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4168
4898
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4169
4899
|
}, {
|
|
4170
4900
|
name: "SOL"
|
|
4171
|
-
}), children: /* @__PURE__ */
|
|
4901
|
+
}), children: /* @__PURE__ */ jsx23(ConnectionProvider, { endpoint: clusterApiUrl("devnet"), children: /* @__PURE__ */ jsx23(WalletProvider, { wallets, autoConnect: true, children: /* @__PURE__ */ jsx23(WalletModalProvider, { children: /* @__PURE__ */ jsx23(WalletContent, { onSuccess, type }) }) }) }) });
|
|
4172
4902
|
}
|
|
4173
4903
|
function SOLModal(props) {
|
|
4174
|
-
return props.isOpen && /* @__PURE__ */
|
|
4904
|
+
return props.isOpen && /* @__PURE__ */ jsx23(SOLConnectModal, { ...props });
|
|
4175
4905
|
}
|
|
4176
4906
|
|
|
4177
4907
|
// src/components/TRONModal/index.tsx
|
|
4178
|
-
import React8, { useEffect as
|
|
4179
|
-
import { useIntl as
|
|
4908
|
+
import React8, { useEffect as useEffect19, useMemo as useMemo12, useState as useState21 } from "react";
|
|
4909
|
+
import { useIntl as useIntl12 } from "react-intl";
|
|
4180
4910
|
|
|
4181
4911
|
// src/lib/tron/TronLinkAdapter.ts
|
|
4182
4912
|
var TronLinkAdapter = class {
|
|
@@ -4209,7 +4939,7 @@ var TronLinkAdapter = class {
|
|
|
4209
4939
|
};
|
|
4210
4940
|
|
|
4211
4941
|
// src/hooks/useTRONWallet.ts
|
|
4212
|
-
import { useEffect as
|
|
4942
|
+
import { useEffect as useEffect18, useState as useState20 } from "react";
|
|
4213
4943
|
|
|
4214
4944
|
// src/lib/tron/BitgetAdapter.ts
|
|
4215
4945
|
var BitgetAdapter = class {
|
|
@@ -4254,9 +4984,9 @@ var OKXAdapter = class {
|
|
|
4254
4984
|
// src/hooks/useTRONWallet.ts
|
|
4255
4985
|
var useTRONWallet = () => {
|
|
4256
4986
|
const wallets2 = [new TronLinkAdapter(), new BitgetAdapter(), new OKXAdapter()];
|
|
4257
|
-
const [installedWallets, setInstalledWallets] =
|
|
4258
|
-
const [
|
|
4259
|
-
|
|
4987
|
+
const [installedWallets, setInstalledWallets] = useState20([]);
|
|
4988
|
+
const [address, setAddress] = useState20(null);
|
|
4989
|
+
useEffect18(() => {
|
|
4260
4990
|
const getInstalled = async () => {
|
|
4261
4991
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
4262
4992
|
wallet: wallet2,
|
|
@@ -4266,11 +4996,11 @@ var useTRONWallet = () => {
|
|
|
4266
4996
|
};
|
|
4267
4997
|
getInstalled();
|
|
4268
4998
|
}, []);
|
|
4269
|
-
const [wallet, chooseWallet] =
|
|
4999
|
+
const [wallet, chooseWallet] = useState20(null);
|
|
4270
5000
|
const onConnect = async () => {
|
|
4271
5001
|
setAddress(await wallet.connect());
|
|
4272
5002
|
};
|
|
4273
|
-
|
|
5003
|
+
useEffect18(() => {
|
|
4274
5004
|
if (!wallet) {
|
|
4275
5005
|
setAddress(null);
|
|
4276
5006
|
}
|
|
@@ -4280,33 +5010,33 @@ var useTRONWallet = () => {
|
|
|
4280
5010
|
wallets: wallets2,
|
|
4281
5011
|
chooseWallet,
|
|
4282
5012
|
wallet,
|
|
4283
|
-
address
|
|
5013
|
+
address,
|
|
4284
5014
|
onConnect
|
|
4285
5015
|
};
|
|
4286
5016
|
};
|
|
4287
5017
|
|
|
4288
5018
|
// src/components/TRONModal/index.tsx
|
|
4289
|
-
import { jsx as
|
|
5019
|
+
import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
4290
5020
|
function TRONConnectModal({
|
|
4291
5021
|
type = "login",
|
|
4292
5022
|
onSuccess,
|
|
4293
5023
|
...props
|
|
4294
5024
|
}) {
|
|
4295
5025
|
const isDownMd = useDownMd();
|
|
4296
|
-
const intl =
|
|
4297
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address
|
|
5026
|
+
const intl = useIntl12();
|
|
5027
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useTRONWallet();
|
|
4298
5028
|
const iconMaps = {
|
|
4299
|
-
tronlink: /* @__PURE__ */
|
|
4300
|
-
bitget: /* @__PURE__ */
|
|
4301
|
-
okx: /* @__PURE__ */
|
|
5029
|
+
tronlink: /* @__PURE__ */ jsx24(TronLinkIcon, { size: isDownMd ? 36 : 40 }),
|
|
5030
|
+
bitget: /* @__PURE__ */ jsx24(BitgetIcon, { size: isDownMd ? 36 : 40 }),
|
|
5031
|
+
okx: /* @__PURE__ */ jsx24(OKXIcon, { size: isDownMd ? 36 : 40 })
|
|
4302
5032
|
};
|
|
4303
5033
|
const { events, login } = useMatch();
|
|
4304
|
-
const [status, setStatus] =
|
|
5034
|
+
const [status, setStatus] = useState21("");
|
|
4305
5035
|
const statusRef = React8.useRef(status);
|
|
4306
|
-
const [error, setError] =
|
|
4307
|
-
const connected =
|
|
4308
|
-
return !!
|
|
4309
|
-
}, [
|
|
5036
|
+
const [error, setError] = useState21("");
|
|
5037
|
+
const connected = useMemo12(() => {
|
|
5038
|
+
return !!address;
|
|
5039
|
+
}, [address]);
|
|
4310
5040
|
const disconnect = async () => {
|
|
4311
5041
|
setStatus("");
|
|
4312
5042
|
chooseWallet(null);
|
|
@@ -4320,11 +5050,11 @@ function TRONConnectModal({
|
|
|
4320
5050
|
setError("");
|
|
4321
5051
|
};
|
|
4322
5052
|
const toLoginInWallet = async () => {
|
|
4323
|
-
if (statusRef.current || !
|
|
5053
|
+
if (statusRef.current || !address || !wallet) return;
|
|
4324
5054
|
try {
|
|
4325
5055
|
setStatus("nonce");
|
|
4326
5056
|
statusRef.current = "nonce";
|
|
4327
|
-
const res = type == "bind" ? await getWalletInitApi({ address
|
|
5057
|
+
const res = type == "bind" ? await getWalletInitApi({ address, type: "TRON" }) : await getWalletNonceApi({ address, type: "TRON" });
|
|
4328
5058
|
if (!isSuccess(res)) {
|
|
4329
5059
|
throw new Error(res.message);
|
|
4330
5060
|
}
|
|
@@ -4336,7 +5066,7 @@ function TRONConnectModal({
|
|
|
4336
5066
|
const signedMessage = await wallet.signMessage(message);
|
|
4337
5067
|
let obj = {
|
|
4338
5068
|
type: "TRON",
|
|
4339
|
-
address
|
|
5069
|
+
address,
|
|
4340
5070
|
signature: signedMessage,
|
|
4341
5071
|
message,
|
|
4342
5072
|
connector_type: "TRON",
|
|
@@ -4372,7 +5102,7 @@ function TRONConnectModal({
|
|
|
4372
5102
|
statusRef.current = "";
|
|
4373
5103
|
}
|
|
4374
5104
|
};
|
|
4375
|
-
|
|
5105
|
+
useEffect19(() => {
|
|
4376
5106
|
if (wallet) {
|
|
4377
5107
|
console.log("onConnect");
|
|
4378
5108
|
onConnect();
|
|
@@ -4380,36 +5110,36 @@ function TRONConnectModal({
|
|
|
4380
5110
|
setStatus("");
|
|
4381
5111
|
}
|
|
4382
5112
|
}, [wallet]);
|
|
4383
|
-
|
|
4384
|
-
if (
|
|
5113
|
+
useEffect19(() => {
|
|
5114
|
+
if (address) {
|
|
4385
5115
|
toLoginInWallet();
|
|
4386
5116
|
}
|
|
4387
|
-
}, [
|
|
4388
|
-
|
|
5117
|
+
}, [address]);
|
|
5118
|
+
useEffect19(() => {
|
|
4389
5119
|
if (!props.isOpen) {
|
|
4390
5120
|
disconnect();
|
|
4391
5121
|
}
|
|
4392
5122
|
}, [props.isOpen]);
|
|
4393
|
-
return /* @__PURE__ */
|
|
5123
|
+
return /* @__PURE__ */ jsx24(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4394
5124
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4395
5125
|
}, {
|
|
4396
5126
|
name: "TRON"
|
|
4397
|
-
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */
|
|
5127
|
+
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */ jsx24(
|
|
4398
5128
|
WalletModalContent,
|
|
4399
5129
|
{
|
|
4400
5130
|
error,
|
|
4401
5131
|
setError,
|
|
4402
5132
|
status,
|
|
4403
5133
|
disconnect,
|
|
4404
|
-
address:
|
|
5134
|
+
address: address || "",
|
|
4405
5135
|
connected,
|
|
4406
5136
|
visible: true,
|
|
4407
5137
|
setVisible: () => {
|
|
4408
5138
|
}
|
|
4409
5139
|
}
|
|
4410
|
-
) : /* @__PURE__ */
|
|
5140
|
+
) : /* @__PURE__ */ jsx24("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsxs17("div", { className: "matchid-login-recommend-list", children: [
|
|
4411
5141
|
installedWallets.map((wallet2) => {
|
|
4412
|
-
return /* @__PURE__ */
|
|
5142
|
+
return /* @__PURE__ */ jsx24(
|
|
4413
5143
|
RecommendItem,
|
|
4414
5144
|
{
|
|
4415
5145
|
icon: iconMaps[wallet2.walletKey],
|
|
@@ -4422,14 +5152,14 @@ function TRONConnectModal({
|
|
|
4422
5152
|
);
|
|
4423
5153
|
}),
|
|
4424
5154
|
wallets2.filter((wallet2) => !installedWallets.find((installedWallet) => installedWallet.walletKey == wallet2.walletKey)).map((wallet2) => {
|
|
4425
|
-
return /* @__PURE__ */
|
|
5155
|
+
return /* @__PURE__ */ jsx24(
|
|
4426
5156
|
RecommendItem,
|
|
4427
5157
|
{
|
|
4428
5158
|
icon: iconMaps[wallet2.walletKey],
|
|
4429
5159
|
name: wallet2.name,
|
|
4430
5160
|
onClick: () => {
|
|
4431
5161
|
},
|
|
4432
|
-
footer: /* @__PURE__ */
|
|
5162
|
+
footer: /* @__PURE__ */ jsx24(Button, { size: "sm", onClick: () => {
|
|
4433
5163
|
window.open(wallet2.website);
|
|
4434
5164
|
}, children: "Install" })
|
|
4435
5165
|
},
|
|
@@ -4439,12 +5169,12 @@ function TRONConnectModal({
|
|
|
4439
5169
|
] }) }) });
|
|
4440
5170
|
}
|
|
4441
5171
|
function TRONModal(props) {
|
|
4442
|
-
return props.isOpen && /* @__PURE__ */
|
|
5172
|
+
return props.isOpen && /* @__PURE__ */ jsx24(TRONConnectModal, { ...props, type: props.type });
|
|
4443
5173
|
}
|
|
4444
5174
|
|
|
4445
5175
|
// src/components/TONModal/index.tsx
|
|
4446
|
-
import React9, { useEffect as
|
|
4447
|
-
import { useIntl as
|
|
5176
|
+
import React9, { useEffect as useEffect20, useState as useState22 } from "react";
|
|
5177
|
+
import { useIntl as useIntl13 } from "react-intl";
|
|
4448
5178
|
import {
|
|
4449
5179
|
TonConnectUIProvider,
|
|
4450
5180
|
useTonAddress,
|
|
@@ -4452,23 +5182,23 @@ import {
|
|
|
4452
5182
|
useTonConnectUI,
|
|
4453
5183
|
useTonWallet
|
|
4454
5184
|
} from "@tonconnect/ui-react";
|
|
4455
|
-
import { jsx as
|
|
5185
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
4456
5186
|
function WalletContent2({
|
|
4457
5187
|
onSuccess,
|
|
4458
5188
|
type
|
|
4459
5189
|
}) {
|
|
4460
5190
|
const { events, login } = useMatch();
|
|
4461
|
-
const [connected, setConnected] =
|
|
5191
|
+
const [connected, setConnected] = useState22(false);
|
|
4462
5192
|
const wallet = useTonWallet();
|
|
4463
5193
|
const userFriendlyAddress = useTonAddress();
|
|
4464
5194
|
const [tonConnectUI] = useTonConnectUI();
|
|
4465
5195
|
const { state, open, close } = useTonConnectModal();
|
|
4466
|
-
const [status, setStatus] =
|
|
5196
|
+
const [status, setStatus] = useState22("");
|
|
4467
5197
|
const statusRef = React9.useRef(status);
|
|
4468
|
-
const [error, setError] =
|
|
4469
|
-
|
|
5198
|
+
const [error, setError] = useState22("");
|
|
5199
|
+
useEffect20(() => {
|
|
4470
5200
|
const init = async () => {
|
|
4471
|
-
if (
|
|
5201
|
+
if (tonConnectUI.connected) {
|
|
4472
5202
|
await tonConnectUI.disconnect();
|
|
4473
5203
|
}
|
|
4474
5204
|
open();
|
|
@@ -4539,7 +5269,7 @@ function WalletContent2({
|
|
|
4539
5269
|
}
|
|
4540
5270
|
});
|
|
4541
5271
|
}, []);
|
|
4542
|
-
|
|
5272
|
+
useEffect20(() => {
|
|
4543
5273
|
if (wallet) {
|
|
4544
5274
|
setConnected(true);
|
|
4545
5275
|
console.log("Wallet connected:", wallet);
|
|
@@ -4550,7 +5280,7 @@ function WalletContent2({
|
|
|
4550
5280
|
setStatus("");
|
|
4551
5281
|
}
|
|
4552
5282
|
}, [wallet]);
|
|
4553
|
-
|
|
5283
|
+
useEffect20(() => {
|
|
4554
5284
|
console.log({
|
|
4555
5285
|
state,
|
|
4556
5286
|
wallet
|
|
@@ -4579,7 +5309,7 @@ function WalletContent2({
|
|
|
4579
5309
|
}
|
|
4580
5310
|
}
|
|
4581
5311
|
}, [state]);
|
|
4582
|
-
return /* @__PURE__ */
|
|
5312
|
+
return /* @__PURE__ */ jsx25(
|
|
4583
5313
|
WalletModalContent,
|
|
4584
5314
|
{
|
|
4585
5315
|
connected,
|
|
@@ -4589,7 +5319,7 @@ function WalletContent2({
|
|
|
4589
5319
|
setVisible: async (v) => {
|
|
4590
5320
|
console.log("setVisible", v);
|
|
4591
5321
|
if (v) {
|
|
4592
|
-
if (
|
|
5322
|
+
if (tonConnectUI.connected) {
|
|
4593
5323
|
await tonConnectUI.disconnect();
|
|
4594
5324
|
}
|
|
4595
5325
|
setStatus("");
|
|
@@ -4610,28 +5340,28 @@ function TONConnectModal({
|
|
|
4610
5340
|
onSuccess,
|
|
4611
5341
|
...props
|
|
4612
5342
|
}) {
|
|
4613
|
-
const intl =
|
|
5343
|
+
const intl = useIntl13();
|
|
4614
5344
|
const { endpoints, appid } = useLocalStore_default();
|
|
4615
5345
|
const manifestUrl = `${endpoints.back}api/v1/wallet/ton?appid=${appid}&url=` + encodeURIComponent(window.location.origin);
|
|
4616
|
-
return /* @__PURE__ */
|
|
5346
|
+
return /* @__PURE__ */ jsx25(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4617
5347
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4618
5348
|
}, {
|
|
4619
5349
|
name: "TON"
|
|
4620
|
-
}), children: /* @__PURE__ */
|
|
5350
|
+
}), children: /* @__PURE__ */ jsx25(
|
|
4621
5351
|
TonConnectUIProvider,
|
|
4622
5352
|
{
|
|
4623
5353
|
manifestUrl,
|
|
4624
|
-
children: /* @__PURE__ */
|
|
5354
|
+
children: /* @__PURE__ */ jsx25(WalletContent2, { onSuccess, type })
|
|
4625
5355
|
}
|
|
4626
5356
|
) });
|
|
4627
5357
|
}
|
|
4628
5358
|
function TONModal(props) {
|
|
4629
|
-
return props.isOpen && /* @__PURE__ */
|
|
5359
|
+
return props.isOpen && /* @__PURE__ */ jsx25(TONConnectModal, { ...props });
|
|
4630
5360
|
}
|
|
4631
5361
|
|
|
4632
5362
|
// src/components/BTCModal/index.tsx
|
|
4633
|
-
import React10, { useEffect as
|
|
4634
|
-
import { useIntl as
|
|
5363
|
+
import React10, { useEffect as useEffect22, useMemo as useMemo13, useState as useState24 } from "react";
|
|
5364
|
+
import { useIntl as useIntl14 } from "react-intl";
|
|
4635
5365
|
|
|
4636
5366
|
// src/lib/btc/UnisatAdapter.ts
|
|
4637
5367
|
var UnisatAdapter = class {
|
|
@@ -4722,7 +5452,7 @@ var XverseAdapter = class {
|
|
|
4722
5452
|
matchlog_default.log("getAccounts ~ response:", response);
|
|
4723
5453
|
if (response.status === "success") {
|
|
4724
5454
|
const ordinalsAddressItem = response.result.find(
|
|
4725
|
-
(
|
|
5455
|
+
(address) => address.purpose === AddressPurpose.Ordinals
|
|
4726
5456
|
);
|
|
4727
5457
|
this.address = ordinalsAddressItem?.address || "";
|
|
4728
5458
|
return ordinalsAddressItem?.address || "";
|
|
@@ -4785,12 +5515,12 @@ var LeatherAdapter = class {
|
|
|
4785
5515
|
};
|
|
4786
5516
|
|
|
4787
5517
|
// src/hooks/useBTCWallet.ts
|
|
4788
|
-
import { useEffect as
|
|
5518
|
+
import { useEffect as useEffect21, useState as useState23 } from "react";
|
|
4789
5519
|
var useBTCWallet = () => {
|
|
4790
5520
|
const wallets2 = [new UnisatAdapter(), new XverseAdapter(), new LeatherAdapter()];
|
|
4791
|
-
const [installedWallets, setInstalledWallets] =
|
|
4792
|
-
const [
|
|
4793
|
-
|
|
5521
|
+
const [installedWallets, setInstalledWallets] = useState23([]);
|
|
5522
|
+
const [address, setAddress] = useState23(null);
|
|
5523
|
+
useEffect21(() => {
|
|
4794
5524
|
const getInstalled = async () => {
|
|
4795
5525
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
4796
5526
|
wallet: wallet2,
|
|
@@ -4800,11 +5530,11 @@ var useBTCWallet = () => {
|
|
|
4800
5530
|
};
|
|
4801
5531
|
getInstalled();
|
|
4802
5532
|
}, []);
|
|
4803
|
-
const [wallet, chooseWallet] =
|
|
5533
|
+
const [wallet, chooseWallet] = useState23(null);
|
|
4804
5534
|
const onConnect = async () => {
|
|
4805
5535
|
setAddress(await wallet.connect());
|
|
4806
5536
|
};
|
|
4807
|
-
|
|
5537
|
+
useEffect21(() => {
|
|
4808
5538
|
if (!wallet) {
|
|
4809
5539
|
setAddress(null);
|
|
4810
5540
|
}
|
|
@@ -4814,33 +5544,33 @@ var useBTCWallet = () => {
|
|
|
4814
5544
|
wallets: wallets2,
|
|
4815
5545
|
chooseWallet,
|
|
4816
5546
|
wallet,
|
|
4817
|
-
address
|
|
5547
|
+
address,
|
|
4818
5548
|
onConnect
|
|
4819
5549
|
};
|
|
4820
5550
|
};
|
|
4821
5551
|
|
|
4822
5552
|
// src/components/BTCModal/index.tsx
|
|
4823
|
-
import { jsx as
|
|
5553
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4824
5554
|
function BTCConnectModal({
|
|
4825
5555
|
type = "login",
|
|
4826
5556
|
onSuccess,
|
|
4827
5557
|
...props
|
|
4828
5558
|
}) {
|
|
4829
5559
|
const isDownMd = useDownMd();
|
|
4830
|
-
const intl =
|
|
4831
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address
|
|
5560
|
+
const intl = useIntl14();
|
|
5561
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useBTCWallet();
|
|
4832
5562
|
const iconMaps = {
|
|
4833
|
-
leather: /* @__PURE__ */
|
|
4834
|
-
unisat: /* @__PURE__ */
|
|
4835
|
-
xverse: /* @__PURE__ */
|
|
5563
|
+
leather: /* @__PURE__ */ jsx26(LeatherIcon, { size: isDownMd ? 36 : 40 }),
|
|
5564
|
+
unisat: /* @__PURE__ */ jsx26(UnisatIcon, { size: isDownMd ? 36 : 40 }),
|
|
5565
|
+
xverse: /* @__PURE__ */ jsx26(XverseIcon, { size: isDownMd ? 36 : 40 })
|
|
4836
5566
|
};
|
|
4837
5567
|
const { events, login } = useMatch();
|
|
4838
|
-
const [status, setStatus] =
|
|
5568
|
+
const [status, setStatus] = useState24("");
|
|
4839
5569
|
const statusRef = React10.useRef(status);
|
|
4840
|
-
const [error, setError] =
|
|
4841
|
-
const connected =
|
|
4842
|
-
return !!
|
|
4843
|
-
}, [
|
|
5570
|
+
const [error, setError] = useState24("");
|
|
5571
|
+
const connected = useMemo13(() => {
|
|
5572
|
+
return !!address;
|
|
5573
|
+
}, [address]);
|
|
4844
5574
|
const disconnect = async () => {
|
|
4845
5575
|
wallet && wallet.disconnet && wallet.disconnet();
|
|
4846
5576
|
setStatus("");
|
|
@@ -4849,11 +5579,11 @@ function BTCConnectModal({
|
|
|
4849
5579
|
setError("");
|
|
4850
5580
|
};
|
|
4851
5581
|
const toLoginInWallet = async () => {
|
|
4852
|
-
if (statusRef.current || !
|
|
5582
|
+
if (statusRef.current || !address || !wallet) return;
|
|
4853
5583
|
try {
|
|
4854
5584
|
setStatus("nonce");
|
|
4855
5585
|
statusRef.current = "nonce";
|
|
4856
|
-
const res = type == "bind" ? await getWalletInitApi({ address
|
|
5586
|
+
const res = type == "bind" ? await getWalletInitApi({ address, type: "BTC" }) : await getWalletNonceApi({ address, type: "BTC" });
|
|
4857
5587
|
if (!isSuccess(res)) {
|
|
4858
5588
|
throw new Error(res.message);
|
|
4859
5589
|
}
|
|
@@ -4865,7 +5595,7 @@ function BTCConnectModal({
|
|
|
4865
5595
|
const signedMessage = await wallet.signMessage(message);
|
|
4866
5596
|
let obj = {
|
|
4867
5597
|
type: "BTC",
|
|
4868
|
-
address
|
|
5598
|
+
address,
|
|
4869
5599
|
signature: signedMessage,
|
|
4870
5600
|
message,
|
|
4871
5601
|
connector_type: "BTC",
|
|
@@ -4902,7 +5632,7 @@ function BTCConnectModal({
|
|
|
4902
5632
|
statusRef.current = "";
|
|
4903
5633
|
}
|
|
4904
5634
|
};
|
|
4905
|
-
|
|
5635
|
+
useEffect22(() => {
|
|
4906
5636
|
if (wallet) {
|
|
4907
5637
|
console.log("onConnect");
|
|
4908
5638
|
try {
|
|
@@ -4915,12 +5645,12 @@ function BTCConnectModal({
|
|
|
4915
5645
|
setStatus("");
|
|
4916
5646
|
}
|
|
4917
5647
|
}, [wallet]);
|
|
4918
|
-
|
|
4919
|
-
if (
|
|
5648
|
+
useEffect22(() => {
|
|
5649
|
+
if (address) {
|
|
4920
5650
|
toLoginInWallet();
|
|
4921
5651
|
}
|
|
4922
|
-
}, [
|
|
4923
|
-
|
|
5652
|
+
}, [address]);
|
|
5653
|
+
useEffect22(() => {
|
|
4924
5654
|
if (!props.isOpen) {
|
|
4925
5655
|
disconnect();
|
|
4926
5656
|
}
|
|
@@ -4932,26 +5662,26 @@ function BTCConnectModal({
|
|
|
4932
5662
|
statusRef.current = "";
|
|
4933
5663
|
setError("");
|
|
4934
5664
|
};
|
|
4935
|
-
return /* @__PURE__ */
|
|
5665
|
+
return /* @__PURE__ */ jsx26(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4936
5666
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4937
5667
|
}, {
|
|
4938
5668
|
name: "BTC"
|
|
4939
|
-
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */
|
|
5669
|
+
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */ jsx26(
|
|
4940
5670
|
WalletModalContent,
|
|
4941
5671
|
{
|
|
4942
5672
|
error,
|
|
4943
5673
|
setError,
|
|
4944
5674
|
status,
|
|
4945
5675
|
disconnect,
|
|
4946
|
-
address:
|
|
5676
|
+
address: address || "",
|
|
4947
5677
|
connected,
|
|
4948
5678
|
visible: true,
|
|
4949
5679
|
setVisible: () => {
|
|
4950
5680
|
}
|
|
4951
5681
|
}
|
|
4952
|
-
) : /* @__PURE__ */
|
|
5682
|
+
) : /* @__PURE__ */ jsx26("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsxs18("div", { className: "matchid-login-recommend-list", children: [
|
|
4953
5683
|
installedWallets.map((wallet2) => {
|
|
4954
|
-
return /* @__PURE__ */
|
|
5684
|
+
return /* @__PURE__ */ jsx26(
|
|
4955
5685
|
RecommendItem,
|
|
4956
5686
|
{
|
|
4957
5687
|
icon: iconMaps[wallet2.walletKey],
|
|
@@ -4964,14 +5694,14 @@ function BTCConnectModal({
|
|
|
4964
5694
|
);
|
|
4965
5695
|
}),
|
|
4966
5696
|
wallets2.filter((wallet2) => !installedWallets.find((installedWallet) => installedWallet.walletKey == wallet2.walletKey)).map((wallet2) => {
|
|
4967
|
-
return /* @__PURE__ */
|
|
5697
|
+
return /* @__PURE__ */ jsx26(
|
|
4968
5698
|
RecommendItem,
|
|
4969
5699
|
{
|
|
4970
5700
|
icon: iconMaps[wallet2.walletKey],
|
|
4971
5701
|
name: wallet2.name,
|
|
4972
5702
|
onClick: () => {
|
|
4973
5703
|
},
|
|
4974
|
-
footer: /* @__PURE__ */
|
|
5704
|
+
footer: /* @__PURE__ */ jsx26(Button, { size: "sm", onClick: () => {
|
|
4975
5705
|
window.open(wallet2.website);
|
|
4976
5706
|
}, children: "Install" })
|
|
4977
5707
|
},
|
|
@@ -4981,23 +5711,23 @@ function BTCConnectModal({
|
|
|
4981
5711
|
] }) }) });
|
|
4982
5712
|
}
|
|
4983
5713
|
function BTCModal(props) {
|
|
4984
|
-
return props.isOpen && /* @__PURE__ */
|
|
5714
|
+
return props.isOpen && /* @__PURE__ */ jsx26(BTCConnectModal, { ...props });
|
|
4985
5715
|
}
|
|
4986
5716
|
|
|
4987
5717
|
// src/components/WalletModal/index.tsx
|
|
4988
|
-
import { useMemo as
|
|
4989
|
-
import { useIntl as
|
|
4990
|
-
import { jsx as
|
|
5718
|
+
import { useMemo as useMemo14 } from "react";
|
|
5719
|
+
import { useIntl as useIntl15 } from "react-intl";
|
|
5720
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
4991
5721
|
function WalletConnectModal({
|
|
4992
5722
|
type,
|
|
4993
5723
|
methods: _methods,
|
|
4994
5724
|
...props
|
|
4995
5725
|
}) {
|
|
4996
|
-
const intl =
|
|
5726
|
+
const intl = useIntl15();
|
|
4997
5727
|
const { walletMap } = useWalletConfig();
|
|
4998
5728
|
const { bind, login } = useUserInfo();
|
|
4999
5729
|
const config = useAppConfig();
|
|
5000
|
-
const methods =
|
|
5730
|
+
const methods = useMemo14(() => {
|
|
5001
5731
|
if (_methods) return _methods;
|
|
5002
5732
|
if (!config.platform) {
|
|
5003
5733
|
return [];
|
|
@@ -5005,13 +5735,13 @@ function WalletConnectModal({
|
|
|
5005
5735
|
const platform = config.platform.map((p) => p.toLowerCase());
|
|
5006
5736
|
return WALLET_METHODS.filter((m) => platform.includes(m));
|
|
5007
5737
|
}, [config.platform, _methods]);
|
|
5008
|
-
return /* @__PURE__ */
|
|
5738
|
+
return /* @__PURE__ */ jsx27(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
5009
5739
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
5010
5740
|
}, {
|
|
5011
5741
|
name: ""
|
|
5012
|
-
}), children: /* @__PURE__ */
|
|
5742
|
+
}), children: /* @__PURE__ */ jsx27("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsx27("div", { className: "matchid-login-recommend-list", children: methods.map((method, index) => {
|
|
5013
5743
|
const m = walletMap[method];
|
|
5014
|
-
return /* @__PURE__ */
|
|
5744
|
+
return /* @__PURE__ */ jsx27(
|
|
5015
5745
|
RecommendItem,
|
|
5016
5746
|
{
|
|
5017
5747
|
icon: m?.icon,
|
|
@@ -5025,7 +5755,586 @@ function WalletConnectModal({
|
|
|
5025
5755
|
}) }) }) });
|
|
5026
5756
|
}
|
|
5027
5757
|
function WalletModal(props) {
|
|
5028
|
-
return props.isOpen && /* @__PURE__ */
|
|
5758
|
+
return props.isOpen && /* @__PURE__ */ jsx27(WalletConnectModal, { ...props });
|
|
5759
|
+
}
|
|
5760
|
+
|
|
5761
|
+
// src/components/AlphaAvatar/index.tsx
|
|
5762
|
+
import { useEffect as useEffect23, useState as useState25 } from "react";
|
|
5763
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
5764
|
+
function AlphaAvatar2({ name, size = 40, className = "" }) {
|
|
5765
|
+
const [avatar, setAvatar] = useState25(void 0);
|
|
5766
|
+
useEffect23(() => {
|
|
5767
|
+
if (name) {
|
|
5768
|
+
const char = name[0].toUpperCase();
|
|
5769
|
+
setAvatar(char);
|
|
5770
|
+
}
|
|
5771
|
+
}, [name]);
|
|
5772
|
+
return /* @__PURE__ */ jsx28("div", { className: `matchid-alpha-avatar ${className}`, style: {
|
|
5773
|
+
width: size,
|
|
5774
|
+
height: size,
|
|
5775
|
+
fontSize: Math.ceil(size / 2)
|
|
5776
|
+
}, children: avatar });
|
|
5777
|
+
}
|
|
5778
|
+
|
|
5779
|
+
// src/components/WalletAsset/index.tsx
|
|
5780
|
+
import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5781
|
+
function WalletAsset({
|
|
5782
|
+
onAssetClick,
|
|
5783
|
+
matchWalletAssetsOptions
|
|
5784
|
+
}) {
|
|
5785
|
+
const walletAssets = useMatchWalletAssets(matchWalletAssetsOptions);
|
|
5786
|
+
const matchWalletAssetList = useMatchWalletAssetList({
|
|
5787
|
+
list: walletAssets.mergedAssets
|
|
5788
|
+
});
|
|
5789
|
+
const { list } = useMatchChain();
|
|
5790
|
+
return /* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-list", children: matchWalletAssetList.list.map((n, index) => {
|
|
5791
|
+
const clickFunc = onAssetClick && onAssetClick(n);
|
|
5792
|
+
const chain = list?.find((m) => m.id.toString() === n.chain_id);
|
|
5793
|
+
const getFooterColor = () => {
|
|
5794
|
+
if (!n.price_change_24h) {
|
|
5795
|
+
return "";
|
|
5796
|
+
}
|
|
5797
|
+
if (n.price_change_24h > 0) {
|
|
5798
|
+
return "matchid-wallet-asset-up";
|
|
5799
|
+
}
|
|
5800
|
+
if (n.price_change_24h < 0) {
|
|
5801
|
+
return "matchid-wallet-asset-down";
|
|
5802
|
+
}
|
|
5803
|
+
return "";
|
|
5804
|
+
};
|
|
5805
|
+
return /* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-item`, onClick: clickFunc, style: {
|
|
5806
|
+
cursor: clickFunc ? "pointer" : "default"
|
|
5807
|
+
}, children: [
|
|
5808
|
+
/* @__PURE__ */ jsxs19("div", { className: "matchid-wallet-asset-logo", title: n.symbol || n.name || "", children: [
|
|
5809
|
+
n.icon ? /* @__PURE__ */ jsx29("img", { src: n.icon, alt: n.symbol, className: `matchid-wallet-asset-icon` }) : /* @__PURE__ */ jsx29(
|
|
5810
|
+
AlphaAvatar2,
|
|
5811
|
+
{
|
|
5812
|
+
className: `matchid-wallet-asset-icon`,
|
|
5813
|
+
size: 40,
|
|
5814
|
+
name: n.symbol || n.name || ""
|
|
5815
|
+
}
|
|
5816
|
+
),
|
|
5817
|
+
chain?.iconUrl && /* @__PURE__ */ jsx29("img", { src: chain.iconUrl, alt: chain.name, className: `matchid-wallet-asset-chain` })
|
|
5818
|
+
] }),
|
|
5819
|
+
/* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-info`, children: [
|
|
5820
|
+
/* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-name`, children: n.symbol }),
|
|
5821
|
+
"price" in n && /* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-content`, children: [
|
|
5822
|
+
/* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-price", children: /* @__PURE__ */ jsx29(
|
|
5823
|
+
NumberFormatter,
|
|
5824
|
+
{
|
|
5825
|
+
value: n.price,
|
|
5826
|
+
prefix: "$ ",
|
|
5827
|
+
tFixNum: 2
|
|
5828
|
+
}
|
|
5829
|
+
) }),
|
|
5830
|
+
/* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-value", children: /* @__PURE__ */ jsx29(
|
|
5831
|
+
NumberFormatter,
|
|
5832
|
+
{
|
|
5833
|
+
value: n.value,
|
|
5834
|
+
prefix: "$ ",
|
|
5835
|
+
tFixNum: 2
|
|
5836
|
+
}
|
|
5837
|
+
) })
|
|
5838
|
+
] }),
|
|
5839
|
+
/* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-footer`, children: [
|
|
5840
|
+
/* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-balance`, children: /* @__PURE__ */ jsx29(
|
|
5841
|
+
NumberFormatter,
|
|
5842
|
+
{
|
|
5843
|
+
value: n.balance,
|
|
5844
|
+
tFixNum: 3
|
|
5845
|
+
}
|
|
5846
|
+
) }),
|
|
5847
|
+
"price_change_24h" in n && /* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-change ${getFooterColor()}`, children: /* @__PURE__ */ jsx29(
|
|
5848
|
+
NumberFormatter,
|
|
5849
|
+
{
|
|
5850
|
+
prefix: `${(n?.price_change_24h || 0) < 0 ? "-" : "+"} `,
|
|
5851
|
+
value: Math.abs(n.price_change_24h || 0),
|
|
5852
|
+
suffix: "%",
|
|
5853
|
+
tFixNum: 3
|
|
5854
|
+
}
|
|
5855
|
+
) })
|
|
5856
|
+
] })
|
|
5857
|
+
] })
|
|
5858
|
+
] }, index);
|
|
5859
|
+
}) });
|
|
5860
|
+
}
|
|
5861
|
+
|
|
5862
|
+
// src/components/TokenSend/index.tsx
|
|
5863
|
+
import { useEffect as useEffect24, useMemo as useMemo15, useState as useState26 } from "react";
|
|
5864
|
+
import { defineChain as defineChain4, encodeFunctionData as encodeFunctionData2, erc20Abi as erc20Abi3, http as http6, parseUnits as parseUnits2 } from "viem";
|
|
5865
|
+
import { FormattedMessage as FormattedMessage11, useIntl as useIntl16 } from "react-intl";
|
|
5866
|
+
import { jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
5867
|
+
function Input2({
|
|
5868
|
+
onChange,
|
|
5869
|
+
placeholder,
|
|
5870
|
+
value,
|
|
5871
|
+
maxLength,
|
|
5872
|
+
type,
|
|
5873
|
+
error,
|
|
5874
|
+
size = "df"
|
|
5875
|
+
}) {
|
|
5876
|
+
return /* @__PURE__ */ jsxs20("div", { className: `matchid-token-input-box ${"matchid-token-input-" + size}`, children: [
|
|
5877
|
+
/* @__PURE__ */ jsx30(
|
|
5878
|
+
"input",
|
|
5879
|
+
{
|
|
5880
|
+
placeholder,
|
|
5881
|
+
onChange,
|
|
5882
|
+
maxLength,
|
|
5883
|
+
type,
|
|
5884
|
+
value,
|
|
5885
|
+
className: `matchid-token-input ${error ? "matchid-token-input-error" : ""}`
|
|
5886
|
+
}
|
|
5887
|
+
),
|
|
5888
|
+
error && /* @__PURE__ */ jsx30("div", { className: "matchid-token-input-error-text", children: error })
|
|
5889
|
+
] });
|
|
5890
|
+
}
|
|
5891
|
+
function TokenSend({
|
|
5892
|
+
onClose,
|
|
5893
|
+
zIndex,
|
|
5894
|
+
token,
|
|
5895
|
+
onBack
|
|
5896
|
+
}) {
|
|
5897
|
+
const { list: chainList } = useMatchChain();
|
|
5898
|
+
const intl = useIntl16();
|
|
5899
|
+
const { createWalletClient: createWalletClient2 } = useWallet();
|
|
5900
|
+
const isNative = token.address.toLowerCase() == NATIVE_TOKEN_ADDRESS;
|
|
5901
|
+
const chain = useMemo15(() => {
|
|
5902
|
+
return chainList?.find((m) => m.id.toString() === token.chain_id);
|
|
5903
|
+
}, [chainList, token.chain_id]);
|
|
5904
|
+
const walletClient = useMemo15(() => {
|
|
5905
|
+
return createWalletClient2({
|
|
5906
|
+
// @ts-ignore
|
|
5907
|
+
chain: defineChain4(chain),
|
|
5908
|
+
transport: http6()
|
|
5909
|
+
});
|
|
5910
|
+
}, [chain]);
|
|
5911
|
+
const [amount, setAmount] = useState26("");
|
|
5912
|
+
const [address, setAddress] = useState26("");
|
|
5913
|
+
const [loading, setLoading] = useState26(false);
|
|
5914
|
+
const [sending, setSending] = useState26(false);
|
|
5915
|
+
const [txError, setTxError] = useState26("");
|
|
5916
|
+
const transaction = useMemo15(() => {
|
|
5917
|
+
const reg = /^0x[a-fA-F0-9]{40}$/;
|
|
5918
|
+
if (!amount || !address || !reg.test(address)) {
|
|
5919
|
+
return;
|
|
5920
|
+
}
|
|
5921
|
+
const viemChain = defineChain4(chain);
|
|
5922
|
+
const to = isNative ? address : token.address;
|
|
5923
|
+
const value = isNative ? parseUnits2(amount, parseInt(token?.decimals || "18")) : BigInt(0);
|
|
5924
|
+
const data = isNative ? "0x" : encodeFunctionData2({
|
|
5925
|
+
abi: erc20Abi3,
|
|
5926
|
+
functionName: "transfer",
|
|
5927
|
+
args: [address, parseUnits2(amount, parseInt(token?.decimals || "18"))]
|
|
5928
|
+
});
|
|
5929
|
+
return {
|
|
5930
|
+
to,
|
|
5931
|
+
value,
|
|
5932
|
+
data,
|
|
5933
|
+
chain: viemChain
|
|
5934
|
+
};
|
|
5935
|
+
}, [amount, address]);
|
|
5936
|
+
const onCal = async () => {
|
|
5937
|
+
try {
|
|
5938
|
+
setLoading(true);
|
|
5939
|
+
await walletClient?.prepareTransactionRequest(transaction);
|
|
5940
|
+
} catch (error2) {
|
|
5941
|
+
console.error(error2);
|
|
5942
|
+
setTxError(error2.details || error2.message);
|
|
5943
|
+
} finally {
|
|
5944
|
+
setLoading(false);
|
|
5945
|
+
}
|
|
5946
|
+
};
|
|
5947
|
+
const error = useMemo15(() => {
|
|
5948
|
+
setTxError("");
|
|
5949
|
+
let amountError = "";
|
|
5950
|
+
let addressError = "";
|
|
5951
|
+
if (amount) {
|
|
5952
|
+
if (parseFloat(amount) <= 0) {
|
|
5953
|
+
amountError = intl.formatMessage({
|
|
5954
|
+
id: "tokenAmountMin"
|
|
5955
|
+
});
|
|
5956
|
+
} else if ("balance" in token && parseFloat(amount) > (token.balance || 0)) {
|
|
5957
|
+
amountError = intl.formatMessage({
|
|
5958
|
+
id: "tokenAmountMax"
|
|
5959
|
+
});
|
|
5960
|
+
}
|
|
5961
|
+
}
|
|
5962
|
+
if (address) {
|
|
5963
|
+
if (address.length < 42) {
|
|
5964
|
+
addressError = intl.formatMessage({
|
|
5965
|
+
id: "tokenAddressError"
|
|
5966
|
+
});
|
|
5967
|
+
} else {
|
|
5968
|
+
const reg = /^0x[a-fA-F0-9]{40}$/;
|
|
5969
|
+
if (!reg.test(address)) {
|
|
5970
|
+
addressError = intl.formatMessage({
|
|
5971
|
+
id: "tokenAddressError"
|
|
5972
|
+
});
|
|
5973
|
+
}
|
|
5974
|
+
}
|
|
5975
|
+
}
|
|
5976
|
+
if (amount && address && !amountError && !addressError && walletClient) {
|
|
5977
|
+
onCal();
|
|
5978
|
+
}
|
|
5979
|
+
return {
|
|
5980
|
+
amount: amountError,
|
|
5981
|
+
address: addressError
|
|
5982
|
+
};
|
|
5983
|
+
}, [amount, token, chain, address, walletClient]);
|
|
5984
|
+
const onChangeAmount = (e) => {
|
|
5985
|
+
const value = e.target.value;
|
|
5986
|
+
if (value.match(/^\d*\.?\d*$/)) {
|
|
5987
|
+
setAmount(value);
|
|
5988
|
+
}
|
|
5989
|
+
};
|
|
5990
|
+
const canSend = useMemo15(() => {
|
|
5991
|
+
return !error.amount && !error.address && amount && address;
|
|
5992
|
+
}, [error]);
|
|
5993
|
+
const onNext = async () => {
|
|
5994
|
+
setSending(true);
|
|
5995
|
+
if (transaction) {
|
|
5996
|
+
await walletClient?.sendTransaction(transaction);
|
|
5997
|
+
}
|
|
5998
|
+
onClose();
|
|
5999
|
+
};
|
|
6000
|
+
useEffect24(() => {
|
|
6001
|
+
const receiveMessage = (event) => {
|
|
6002
|
+
if (event.data) {
|
|
6003
|
+
if (event.data.source == "match-wallet") {
|
|
6004
|
+
if (event.data.method == "sendTransaction" && event.data.messageId == "openIframe") {
|
|
6005
|
+
onBack();
|
|
6006
|
+
setSending(false);
|
|
6007
|
+
}
|
|
6008
|
+
}
|
|
6009
|
+
}
|
|
6010
|
+
};
|
|
6011
|
+
window.addEventListener("message", receiveMessage);
|
|
6012
|
+
return () => {
|
|
6013
|
+
window.removeEventListener("message", receiveMessage);
|
|
6014
|
+
};
|
|
6015
|
+
}, []);
|
|
6016
|
+
return /* @__PURE__ */ jsx30(ModalDrawer, { isOpen: true, onClose, zIndex, title: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "send" }), onBack, children: /* @__PURE__ */ jsxs20("div", { className: `matchid-token-send-box`, children: [
|
|
6017
|
+
/* @__PURE__ */ jsxs20("div", { className: "matchid-token-send-content", children: [
|
|
6018
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-content`, children: [
|
|
6019
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-header`, children: [
|
|
6020
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-amount-title`, children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "amount" }) }),
|
|
6021
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-chain`, children: [
|
|
6022
|
+
token.icon ? /* @__PURE__ */ jsx30(
|
|
6023
|
+
"img",
|
|
6024
|
+
{
|
|
6025
|
+
src: token?.icon,
|
|
6026
|
+
alt: token?.symbol,
|
|
6027
|
+
className: `matchid-token-amount-chain-icon`
|
|
6028
|
+
}
|
|
6029
|
+
) : /* @__PURE__ */ jsx30(AlphaAvatar, { name: token.symbol || token.name || "", size: 16 }),
|
|
6030
|
+
/* @__PURE__ */ jsx30("span", { children: token?.symbol })
|
|
6031
|
+
] })
|
|
6032
|
+
] }),
|
|
6033
|
+
/* @__PURE__ */ jsx30(
|
|
6034
|
+
Input2,
|
|
6035
|
+
{
|
|
6036
|
+
type: "text",
|
|
6037
|
+
onChange: onChangeAmount,
|
|
6038
|
+
placeholder: intl.formatMessage({
|
|
6039
|
+
id: "amountPlaceholder"
|
|
6040
|
+
}),
|
|
6041
|
+
value: amount,
|
|
6042
|
+
maxLength: 40,
|
|
6043
|
+
error: error.amount || txError
|
|
6044
|
+
}
|
|
6045
|
+
),
|
|
6046
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-footer`, children: [
|
|
6047
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-title`, children: [
|
|
6048
|
+
/* @__PURE__ */ jsx30(FormattedMessage11, { id: "balance" }),
|
|
6049
|
+
":"
|
|
6050
|
+
] }),
|
|
6051
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-amount-value`, children: /* @__PURE__ */ jsx30(NumberFormatter, { value: token.balance, tFixNum: 10, suffix: " " + token.symbol }) })
|
|
6052
|
+
] }),
|
|
6053
|
+
/* @__PURE__ */ jsx30(TransferIcon, { className: "matchid-token-amount-transfer" })
|
|
6054
|
+
] }),
|
|
6055
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-address-content`, children: [
|
|
6056
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-address-header`, children: /* @__PURE__ */ jsx30("div", { className: `matchid-token-address-title`, children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "receiveTitle" }) }) }),
|
|
6057
|
+
/* @__PURE__ */ jsx30(
|
|
6058
|
+
Input2,
|
|
6059
|
+
{
|
|
6060
|
+
type: "text",
|
|
6061
|
+
size: "sm",
|
|
6062
|
+
onChange: (e) => setAddress(e.target.value),
|
|
6063
|
+
placeholder: intl.formatMessage({
|
|
6064
|
+
id: "receivePlaceholder"
|
|
6065
|
+
}),
|
|
6066
|
+
value: address,
|
|
6067
|
+
maxLength: 42,
|
|
6068
|
+
error: error.address
|
|
6069
|
+
}
|
|
6070
|
+
)
|
|
6071
|
+
] })
|
|
6072
|
+
] }),
|
|
6073
|
+
/* @__PURE__ */ jsx30(
|
|
6074
|
+
Button,
|
|
6075
|
+
{
|
|
6076
|
+
size: "lg",
|
|
6077
|
+
block: true,
|
|
6078
|
+
highlight: true,
|
|
6079
|
+
disabled: !canSend || !!txError,
|
|
6080
|
+
onClick: onNext,
|
|
6081
|
+
loading: loading || sending,
|
|
6082
|
+
children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "next" })
|
|
6083
|
+
}
|
|
6084
|
+
)
|
|
6085
|
+
] }) });
|
|
6086
|
+
}
|
|
6087
|
+
|
|
6088
|
+
// src/components/TokenDetail/index.tsx
|
|
6089
|
+
import { FormattedMessage as FormattedMessage12, useIntl as useIntl17 } from "react-intl";
|
|
6090
|
+
import { jsx as jsx31, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
6091
|
+
function TokenDetail({
|
|
6092
|
+
onClose,
|
|
6093
|
+
token
|
|
6094
|
+
}) {
|
|
6095
|
+
const { list: chainList } = useMatchChain();
|
|
6096
|
+
const modal = useModal();
|
|
6097
|
+
const chain = chainList?.find((m) => m.id.toString() === token.chain_id);
|
|
6098
|
+
const onSend = () => {
|
|
6099
|
+
modal.show((props) => {
|
|
6100
|
+
return /* @__PURE__ */ jsx31(TokenSend, { onClose: () => {
|
|
6101
|
+
props.close();
|
|
6102
|
+
onClose();
|
|
6103
|
+
}, onBack: props.close, zIndex: props.zIndex, token });
|
|
6104
|
+
});
|
|
6105
|
+
};
|
|
6106
|
+
const intl = useIntl17();
|
|
6107
|
+
return /* @__PURE__ */ jsx31(ModalDrawer, { isOpen: true, title: intl.formatMessage({
|
|
6108
|
+
id: "tokenDetails"
|
|
6109
|
+
}), onClose, children: /* @__PURE__ */ jsxs21("div", { className: `matchid-token-detail`, children: [
|
|
6110
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-main`, children: [
|
|
6111
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-info`, children: [
|
|
6112
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-logo`, children: [
|
|
6113
|
+
token.icon ? /* @__PURE__ */ jsx31("img", { src: token.icon, alt: token.symbol, className: `matchid-token-icon` }) : /* @__PURE__ */ jsx31(AlphaAvatar, { className: `matchid-token-icon`, size: 48, name: token.symbol || token.name || "" }),
|
|
6114
|
+
chain?.iconUrl && /* @__PURE__ */ jsx31("img", { src: chain.iconUrl, alt: chain.name, className: `matchid-token-chain` })
|
|
6115
|
+
] }),
|
|
6116
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-name`, children: [
|
|
6117
|
+
/* @__PURE__ */ jsx31(NumberFormatter, { value: token.balance, tFixNum: 10 }),
|
|
6118
|
+
" ",
|
|
6119
|
+
token.symbol
|
|
6120
|
+
] })
|
|
6121
|
+
] }),
|
|
6122
|
+
token.address.toLowerCase() != NATIVE_TOKEN_ADDRESS && /* @__PURE__ */ jsxs21("div", { className: `matchid-token-contract`, children: [
|
|
6123
|
+
/* @__PURE__ */ jsx31("div", { className: "matchid-token-contract-title", children: "Contract address" }),
|
|
6124
|
+
/* @__PURE__ */ jsx31("div", { className: "matchid-token-contract-address", children: token.address })
|
|
6125
|
+
] })
|
|
6126
|
+
] }),
|
|
6127
|
+
/* @__PURE__ */ jsx31(Button, { size: "lg", block: true, highlight: true, onClick: onSend, children: /* @__PURE__ */ jsx31(FormattedMessage12, { id: "send" }) })
|
|
6128
|
+
] }) });
|
|
6129
|
+
}
|
|
6130
|
+
|
|
6131
|
+
// src/components/TokenSendList/index.tsx
|
|
6132
|
+
import { useState as useState27 } from "react";
|
|
6133
|
+
import { FormattedMessage as FormattedMessage13 } from "react-intl";
|
|
6134
|
+
import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
6135
|
+
function TokenSendList({ close }) {
|
|
6136
|
+
const walletAssets = useMatchWalletAssets();
|
|
6137
|
+
const matchWalletAssetList = useMatchWalletAssetList({
|
|
6138
|
+
list: walletAssets.mergedAssets
|
|
6139
|
+
});
|
|
6140
|
+
const { list } = useMatchChain();
|
|
6141
|
+
const [checked, setChecked] = useState27();
|
|
6142
|
+
const modal = useModal();
|
|
6143
|
+
const onNext = () => {
|
|
6144
|
+
checked && modal.show((props) => {
|
|
6145
|
+
return /* @__PURE__ */ jsx32(TokenSend, { onClose: () => {
|
|
6146
|
+
props.close();
|
|
6147
|
+
close();
|
|
6148
|
+
}, onBack: props.close, zIndex: props.zIndex, token: checked });
|
|
6149
|
+
});
|
|
6150
|
+
};
|
|
6151
|
+
return /* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-list-box", children: [
|
|
6152
|
+
/* @__PURE__ */ jsx32("div", { className: "matchid-token-send-list", children: matchWalletAssetList.list.map((n, index) => {
|
|
6153
|
+
const chain = list?.find((m) => m.id.toString() === n.chain_id);
|
|
6154
|
+
return /* @__PURE__ */ jsxs22(
|
|
6155
|
+
"div",
|
|
6156
|
+
{
|
|
6157
|
+
className: `matchid-token-send-item ${checked?.address == n.address ? "matchid-token-send-chekced" : ""}`,
|
|
6158
|
+
onClick: () => {
|
|
6159
|
+
setChecked(n);
|
|
6160
|
+
},
|
|
6161
|
+
children: [
|
|
6162
|
+
/* @__PURE__ */ jsx32(Radio, { checked: checked?.address == n.address }),
|
|
6163
|
+
/* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-content", children: [
|
|
6164
|
+
/* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-logo", children: [
|
|
6165
|
+
n.icon ? /* @__PURE__ */ jsx32("img", { src: n.icon, alt: n.symbol, className: `matchid-token-send-icon` }) : /* @__PURE__ */ jsx32(
|
|
6166
|
+
AlphaAvatar2,
|
|
6167
|
+
{
|
|
6168
|
+
className: `matchid-token-send-icon`,
|
|
6169
|
+
size: 40,
|
|
6170
|
+
name: n.symbol || n.name || ""
|
|
6171
|
+
}
|
|
6172
|
+
),
|
|
6173
|
+
chain?.iconUrl && /* @__PURE__ */ jsx32(
|
|
6174
|
+
"img",
|
|
6175
|
+
{
|
|
6176
|
+
src: chain.iconUrl,
|
|
6177
|
+
alt: chain.name,
|
|
6178
|
+
className: `matchid-token-send-chain`
|
|
6179
|
+
}
|
|
6180
|
+
)
|
|
6181
|
+
] }),
|
|
6182
|
+
/* @__PURE__ */ jsxs22("div", { className: `matchid-token-send-info`, children: [
|
|
6183
|
+
/* @__PURE__ */ jsx32("div", { className: `matchid-token-send-name`, children: n.symbol }),
|
|
6184
|
+
/* @__PURE__ */ jsx32("div", { className: `matchid-token-send-balance`, children: /* @__PURE__ */ jsx32(NumberFormatter, { value: n.balance, tFixNum: 3 }) })
|
|
6185
|
+
] })
|
|
6186
|
+
] })
|
|
6187
|
+
]
|
|
6188
|
+
},
|
|
6189
|
+
index
|
|
6190
|
+
);
|
|
6191
|
+
}) }),
|
|
6192
|
+
/* @__PURE__ */ jsx32(Button, { size: "lg", highlight: true, block: true, disabled: !checked, onClick: onNext, children: /* @__PURE__ */ jsx32(FormattedMessage13, { id: "next" }) })
|
|
6193
|
+
] });
|
|
6194
|
+
}
|
|
6195
|
+
|
|
6196
|
+
// src/components/TransactionList/index.tsx
|
|
6197
|
+
import InfiniteScroll from "react-infinite-scroll-component";
|
|
6198
|
+
import { useEffect as useEffect25, useMemo as useMemo16, useState as useState28 } from "react";
|
|
6199
|
+
import { decodeFunctionData, defineChain as defineChain5, formatUnits as formatUnits3 } from "viem";
|
|
6200
|
+
import { erc20Abi as erc20Abi4 } from "viem";
|
|
6201
|
+
import { FormattedMessage as FormattedMessage14 } from "react-intl";
|
|
6202
|
+
import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
6203
|
+
var Item = ({ data }) => {
|
|
6204
|
+
const { address } = useWallet();
|
|
6205
|
+
const isOut = data.from.toLowerCase() == address.toLowerCase();
|
|
6206
|
+
const { chain, chainId, explorerLink, formatUnits: chainFormatUnits } = useMatchChain();
|
|
6207
|
+
const { contracts } = useContractStore_default();
|
|
6208
|
+
const [shouldRefetch, setShouldRefetch] = useState28(true);
|
|
6209
|
+
const transferType = useMemo16(() => {
|
|
6210
|
+
const methodId = data.input.substring(2, 10);
|
|
6211
|
+
if (methodId == "095ea7b3") {
|
|
6212
|
+
return "erc20_approve";
|
|
6213
|
+
}
|
|
6214
|
+
if (methodId == "a9059cbb") {
|
|
6215
|
+
return "erc20_transfer";
|
|
6216
|
+
}
|
|
6217
|
+
return "unknown";
|
|
6218
|
+
}, [data.input]);
|
|
6219
|
+
const to = useMemo16(() => {
|
|
6220
|
+
if (!isOut) {
|
|
6221
|
+
return data.from;
|
|
6222
|
+
}
|
|
6223
|
+
if (transferType == "erc20_transfer") {
|
|
6224
|
+
const decodeData = decodeFunctionData({
|
|
6225
|
+
abi: erc20Abi4,
|
|
6226
|
+
data: data.input
|
|
6227
|
+
});
|
|
6228
|
+
return decodeData.args[0];
|
|
6229
|
+
}
|
|
6230
|
+
return data.to;
|
|
6231
|
+
}, [data.input, transferType, data.to, isOut]);
|
|
6232
|
+
const amount = useMemo16(() => {
|
|
6233
|
+
if (transferType == "erc20_transfer") {
|
|
6234
|
+
const decodeData = decodeFunctionData({
|
|
6235
|
+
abi: erc20Abi4,
|
|
6236
|
+
data: data.input
|
|
6237
|
+
});
|
|
6238
|
+
const value = decodeData.args[1];
|
|
6239
|
+
return formatUnits3(value, contracts[`${chainId}-${data.to.toLowerCase()}`]?.decimals || 18);
|
|
6240
|
+
}
|
|
6241
|
+
return chainFormatUnits(BigInt(data.value));
|
|
6242
|
+
}, [data.input, transferType, data.value, contracts, chainId, data.to]);
|
|
6243
|
+
const hashQuery = useHash({
|
|
6244
|
+
hash: data.hash,
|
|
6245
|
+
//@ts-ignore
|
|
6246
|
+
chain: defineChain5(chain),
|
|
6247
|
+
refetchInterval: shouldRefetch ? 3e3 : false,
|
|
6248
|
+
enabled: shouldRefetch && data.source == "local"
|
|
6249
|
+
});
|
|
6250
|
+
const status = useMemo16(() => {
|
|
6251
|
+
if (data.source == "matchain") {
|
|
6252
|
+
switch (data.extra.status) {
|
|
6253
|
+
case "ok":
|
|
6254
|
+
return "success";
|
|
6255
|
+
case "error":
|
|
6256
|
+
return "error";
|
|
6257
|
+
}
|
|
6258
|
+
} else if (data.source == "auto") {
|
|
6259
|
+
if (data.extra.receipt_status == 1) {
|
|
6260
|
+
return "success";
|
|
6261
|
+
} else {
|
|
6262
|
+
return "error";
|
|
6263
|
+
}
|
|
6264
|
+
} else {
|
|
6265
|
+
if (hashQuery.data == 1) {
|
|
6266
|
+
return "success";
|
|
6267
|
+
}
|
|
6268
|
+
if (hashQuery.data == -1) {
|
|
6269
|
+
return "error";
|
|
6270
|
+
}
|
|
6271
|
+
if (Date.now() / 1e3 - parseInt(data.timestamp) > 3600) {
|
|
6272
|
+
return "error";
|
|
6273
|
+
}
|
|
6274
|
+
}
|
|
6275
|
+
return "loading";
|
|
6276
|
+
}, [data.extra?.status, data.source, hashQuery.data]);
|
|
6277
|
+
useEffect25(() => {
|
|
6278
|
+
if (data.hash) {
|
|
6279
|
+
setShouldRefetch(status == "loading");
|
|
6280
|
+
}
|
|
6281
|
+
}, [status, data.hash]);
|
|
6282
|
+
const symbol = useMemo16(() => {
|
|
6283
|
+
if (transferType == "erc20_transfer") {
|
|
6284
|
+
const contract = contracts[`${chainId}-${data.to.toLowerCase()}`];
|
|
6285
|
+
return contract?.symbol || contract?.name || "unknown";
|
|
6286
|
+
}
|
|
6287
|
+
return chain?.nativeCurrency.symbol || chain?.nativeCurrency.name;
|
|
6288
|
+
}, [transferType, chain, contracts, chainId, data.to]);
|
|
6289
|
+
return /* @__PURE__ */ jsxs23(
|
|
6290
|
+
"a",
|
|
6291
|
+
{
|
|
6292
|
+
href: explorerLink(`tx/${data.hash}`),
|
|
6293
|
+
target: "_blank",
|
|
6294
|
+
className: `matchid-transaction-item`,
|
|
6295
|
+
children: [
|
|
6296
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transacton-item-container`, children: [
|
|
6297
|
+
/* @__PURE__ */ jsx33("div", { className: "matchid-transaction-item-icon", children: /* @__PURE__ */ jsx33(ArrowSendIcon, { className: !isOut ? "rotate-180" : "" }) }),
|
|
6298
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transaction-item-details`, children: [
|
|
6299
|
+
/* @__PURE__ */ jsx33("div", { className: `matchid-transaction-item-address`, children: formatAddress(to, 6, 4) }),
|
|
6300
|
+
/* @__PURE__ */ jsx33(
|
|
6301
|
+
"div",
|
|
6302
|
+
{
|
|
6303
|
+
className: `matchid-transaction-item-timestamp`,
|
|
6304
|
+
children: formatDate(data.timestamp, "MM/DD HH:mm:ss")
|
|
6305
|
+
}
|
|
6306
|
+
)
|
|
6307
|
+
] })
|
|
6308
|
+
] }),
|
|
6309
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transaction-item-amount ${"matchid-transaction-item-" + status}`, children: [
|
|
6310
|
+
/* @__PURE__ */ jsx33(NumberFormatter, { value: amount, tFixNum: 6, prefix: isOut ? "-" : "+", suffix: " " + symbol }),
|
|
6311
|
+
status == "loading" && /* @__PURE__ */ jsx33(LoadingIcon_default, { color: "#000000", size: 16, rotate: true }),
|
|
6312
|
+
status == "success" && /* @__PURE__ */ jsx33(CheckRoundIcon, { size: 16 }),
|
|
6313
|
+
status == "error" && /* @__PURE__ */ jsx33(InfoRoundIcon, { size: 16 })
|
|
6314
|
+
] })
|
|
6315
|
+
]
|
|
6316
|
+
}
|
|
6317
|
+
);
|
|
6318
|
+
};
|
|
6319
|
+
function TransactionList({
|
|
6320
|
+
scrollableTarget
|
|
6321
|
+
}) {
|
|
6322
|
+
const { fetchMoreData, hasMore, items } = useMatchWalletRecords();
|
|
6323
|
+
return /* @__PURE__ */ jsx33(
|
|
6324
|
+
InfiniteScroll,
|
|
6325
|
+
{
|
|
6326
|
+
scrollableTarget,
|
|
6327
|
+
dataLength: items.length,
|
|
6328
|
+
next: fetchMoreData,
|
|
6329
|
+
hasMore,
|
|
6330
|
+
loader: /* @__PURE__ */ jsxs23("div", { className: "matchid-list-nomore", children: [
|
|
6331
|
+
/* @__PURE__ */ jsx33(LoadingIcon_default, { rotate: true, size: 16, color: "black" }),
|
|
6332
|
+
"Loading..."
|
|
6333
|
+
] }),
|
|
6334
|
+
endMessage: items.length > 0 ? /* @__PURE__ */ jsx33("div", { className: `matchid-list-nomore`, children: /* @__PURE__ */ jsx33(FormattedMessage14, { id: "noMoreRecords" }) }) : /* @__PURE__ */ jsx33("div", { className: `matchid-list-nomore`, children: /* @__PURE__ */ jsx33(FormattedMessage14, { id: "noRecords" }) }),
|
|
6335
|
+
children: items.length == 0 && !hasMore ? /* @__PURE__ */ jsx33("div", { className: "mt-[150px]" }) : /* @__PURE__ */ jsx33("div", { className: `matchid-transaction-list`, children: items.map((item, index) => /* @__PURE__ */ jsx33(Item, { data: item }, index)) })
|
|
6336
|
+
}
|
|
6337
|
+
);
|
|
5029
6338
|
}
|
|
5030
6339
|
|
|
5031
6340
|
export {
|
|
@@ -5041,9 +6350,9 @@ export {
|
|
|
5041
6350
|
mintPassportNftApi,
|
|
5042
6351
|
useUserInfo,
|
|
5043
6352
|
useMatchEvents,
|
|
6353
|
+
useModal,
|
|
5044
6354
|
useWallet,
|
|
5045
6355
|
useCopyClipboard,
|
|
5046
|
-
useModal,
|
|
5047
6356
|
useToast,
|
|
5048
6357
|
wallet_exports,
|
|
5049
6358
|
useMatchChain,
|
|
@@ -5058,13 +6367,20 @@ export {
|
|
|
5058
6367
|
TONModal,
|
|
5059
6368
|
BTCModal,
|
|
5060
6369
|
WalletModal,
|
|
6370
|
+
WalletAsset,
|
|
6371
|
+
TokenSend,
|
|
6372
|
+
TokenDetail,
|
|
6373
|
+
TokenSendList,
|
|
6374
|
+
TransactionList,
|
|
5061
6375
|
components_exports,
|
|
5062
6376
|
useMatchWallet,
|
|
5063
6377
|
useMatchWalletRecords,
|
|
6378
|
+
useMatchWalletAssets,
|
|
6379
|
+
useMatchWalletAssetList,
|
|
5064
6380
|
useReceipt,
|
|
5065
6381
|
useTransaction,
|
|
5066
6382
|
hooks_exports,
|
|
5067
6383
|
MatchProvider,
|
|
5068
6384
|
useMatch
|
|
5069
6385
|
};
|
|
5070
|
-
//# sourceMappingURL=chunk-
|
|
6386
|
+
//# sourceMappingURL=chunk-YSASIFLY.mjs.map
|