@matchain/matchid-sdk-react 0.1.48-alpha.3 → 0.1.48-alpha.30
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 +12 -2
- package/dist/assets/icon/index.d.ts +12 -2
- package/dist/assets/icon/index.js +93 -2
- package/dist/assets/icon/index.js.map +1 -1
- package/dist/assets/icon/index.mjs +9 -1
- package/dist/chunk-5JHHHLG4.mjs +136 -0
- package/dist/chunk-5JHHHLG4.mjs.map +1 -0
- package/dist/{chunk-LNSJ3ZXG.mjs → chunk-FB5MHLWX.mjs} +75 -42
- package/dist/chunk-FB5MHLWX.mjs.map +1 -0
- package/dist/{chunk-V3WGYFWQ.mjs → chunk-KIVNILBF.mjs} +2307 -668
- package/dist/chunk-KIVNILBF.mjs.map +1 -0
- package/dist/{chunk-A5D3NKTK.mjs → chunk-LHNKZISB.mjs} +91 -4
- package/dist/chunk-LHNKZISB.mjs.map +1 -0
- package/dist/{chunk-LPQROHSB.mjs → chunk-YJV23RET.mjs} +2 -2
- package/dist/components/index.d.mts +4 -3
- package/dist/components/index.d.ts +4 -3
- package/dist/components/index.js +2262 -529
- 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 +390 -193
- package/dist/hooks/api/index.js.map +1 -1
- package/dist/hooks/api/index.mjs +5 -4
- package/dist/hooks/index.d.mts +4 -2
- package/dist/hooks/index.d.ts +4 -2
- package/dist/hooks/index.js +1862 -245
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +10 -3
- package/dist/index-BMfaixEx.d.mts +66 -0
- package/dist/{index-DCeOyAw8.d.ts → index-BMsj8hJv.d.ts} +4 -3
- package/dist/{index-Bzcc-y8m.d.ts → index-BcEreCxd.d.ts} +1 -1
- package/dist/index-Bpmrd7mh.d.ts +66 -0
- package/dist/{index-BHvCA7F9.d.ts → index-Bvc8cjpN.d.ts} +34 -4
- package/dist/{index-BvLpvebq.d.mts → index-C9F6f2iz.d.mts} +4 -3
- package/dist/{index-BZrddrq-.d.mts → index-C9qYyRgt.d.mts} +34 -4
- package/dist/{index-DbG5IjhP.d.mts → index-Cou96DpL.d.mts} +1 -1
- package/dist/{index-Cwx2p8th.d.ts → index-Cy3K-Yao.d.ts} +31 -8
- package/dist/{index-B8DYrhSW.d.mts → index-D4ju2J_e.d.mts} +31 -8
- package/dist/index-DUHkH5t-.d.mts +3317 -0
- package/dist/index-DcQm2dkr.d.ts +3317 -0
- package/dist/index.css +620 -6
- package/dist/index.d.mts +9 -8
- package/dist/index.d.ts +9 -8
- package/dist/index.js +2875 -1041
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -10
- package/dist/types/index.d.mts +2 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/{types-CHkU0WHZ.d.mts → types-DzVVzMYU.d.mts} +74 -36
- package/dist/{types-CHkU0WHZ.d.ts → types-DzVVzMYU.d.ts} +74 -36
- package/dist/ui/index.d.mts +4 -3
- package/dist/ui/index.d.ts +4 -3
- package/dist/ui/index.js +140 -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 +45 -9
- package/example/src/pages/Wallet/index.tsx +2 -1
- package/package.json +7 -1
- package/dist/chunk-A5D3NKTK.mjs.map +0 -1
- package/dist/chunk-LNSJ3ZXG.mjs.map +0 -1
- package/dist/chunk-V3WGYFWQ.mjs.map +0 -1
- package/dist/index-B-s1k4Da.d.mts +0 -59
- package/dist/index-DG_gyw1q.d.ts +0 -59
- package/dist/index-DKyt0for.d.mts +0 -181
- package/dist/index-TkB89QxX.d.ts +0 -181
- /package/dist/{chunk-LPQROHSB.mjs.map → chunk-YJV23RET.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,
|
|
@@ -32,8 +48,11 @@ import {
|
|
|
32
48
|
FacebookIcon,
|
|
33
49
|
GithubIcon,
|
|
34
50
|
GoogleIcon,
|
|
51
|
+
InfoLineIcon,
|
|
52
|
+
InfoRoundIcon,
|
|
35
53
|
LeatherIcon,
|
|
36
54
|
LinkedinIcon,
|
|
55
|
+
LoadingIcon_default,
|
|
37
56
|
LoginIcon_default,
|
|
38
57
|
OKXIcon,
|
|
39
58
|
SOLDarkIcon,
|
|
@@ -43,6 +62,7 @@ import {
|
|
|
43
62
|
TelegramIcon,
|
|
44
63
|
TonLightIcon,
|
|
45
64
|
TonLightIcon2,
|
|
65
|
+
TransferIcon,
|
|
46
66
|
TronLinkIcon,
|
|
47
67
|
UnLoginIcon_default,
|
|
48
68
|
UnisatIcon,
|
|
@@ -50,7 +70,7 @@ import {
|
|
|
50
70
|
XIcon,
|
|
51
71
|
XverseIcon,
|
|
52
72
|
YoutubeIcon
|
|
53
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-LHNKZISB.mjs";
|
|
54
74
|
import {
|
|
55
75
|
__export
|
|
56
76
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -74,42 +94,20 @@ __export(components_exports, {
|
|
|
74
94
|
SOLModal: () => SOLModal,
|
|
75
95
|
TONModal: () => TONModal,
|
|
76
96
|
TRONModal: () => TRONModal,
|
|
97
|
+
TokenDetail: () => TokenDetail,
|
|
98
|
+
TokenSend: () => TokenSend,
|
|
99
|
+
TokenSendList: () => TokenSendList,
|
|
100
|
+
TransactionList: () => TransactionList,
|
|
77
101
|
UsernameModal: () => UsernameModal,
|
|
102
|
+
WalletAsset: () => WalletAsset,
|
|
78
103
|
WalletModal: () => WalletModal
|
|
79
104
|
});
|
|
80
105
|
|
|
81
106
|
// src/components/EmailModal/index.tsx
|
|
82
|
-
import { useEffect as
|
|
107
|
+
import { useEffect as useEffect15, useState as useState14 } from "react";
|
|
83
108
|
|
|
84
109
|
// src/components/EmailModal/StepEmail.tsx
|
|
85
110
|
import { useEffect, useMemo, useState } from "react";
|
|
86
|
-
|
|
87
|
-
// src/utils/index.ts
|
|
88
|
-
var getVersion = () => {
|
|
89
|
-
return "0.0.2";
|
|
90
|
-
};
|
|
91
|
-
function encodeBase64(input) {
|
|
92
|
-
return btoa(unescape(encodeURIComponent(input)));
|
|
93
|
-
}
|
|
94
|
-
var isValidEmail = (email) => {
|
|
95
|
-
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
|
|
96
|
-
};
|
|
97
|
-
var isValidUsername = (username) => {
|
|
98
|
-
return /^[a-zA-Z0-9_-]+$/.test(username);
|
|
99
|
-
};
|
|
100
|
-
function truncateAddress(address2) {
|
|
101
|
-
if (address2.length <= 6) {
|
|
102
|
-
return address2;
|
|
103
|
-
}
|
|
104
|
-
const start = address2.slice(0, 4);
|
|
105
|
-
const end = address2.slice(-2);
|
|
106
|
-
return `${start}...${end}`;
|
|
107
|
-
}
|
|
108
|
-
function getAppClientId() {
|
|
109
|
-
return "react-sdk-" + getVersion();
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// src/components/EmailModal/StepEmail.tsx
|
|
113
111
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
114
112
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
115
113
|
function StepEmail(props) {
|
|
@@ -370,11 +368,11 @@ var unBindApi = ({ type }) => {
|
|
|
370
368
|
data: { type }
|
|
371
369
|
});
|
|
372
370
|
};
|
|
373
|
-
var unBindWalletApi = ({ address
|
|
371
|
+
var unBindWalletApi = ({ address }) => {
|
|
374
372
|
return request_default({
|
|
375
373
|
url: `/api/v1/wallet/unbind`,
|
|
376
374
|
method: "POST",
|
|
377
|
-
data: { address
|
|
375
|
+
data: { address }
|
|
378
376
|
});
|
|
379
377
|
};
|
|
380
378
|
var verifyPohApi = ({
|
|
@@ -432,7 +430,7 @@ var getWalletNonceApi = (data) => {
|
|
|
432
430
|
};
|
|
433
431
|
var loginByWalletApi = ({
|
|
434
432
|
type,
|
|
435
|
-
address
|
|
433
|
+
address,
|
|
436
434
|
signature,
|
|
437
435
|
message,
|
|
438
436
|
connector_type,
|
|
@@ -441,7 +439,7 @@ var loginByWalletApi = ({
|
|
|
441
439
|
return request_default({
|
|
442
440
|
url: `/api/v1/login/wallet`,
|
|
443
441
|
method: "POST",
|
|
444
|
-
data: { type, address
|
|
442
|
+
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
445
443
|
});
|
|
446
444
|
};
|
|
447
445
|
var getWalletInitApi = (data) => {
|
|
@@ -453,7 +451,7 @@ var getWalletInitApi = (data) => {
|
|
|
453
451
|
};
|
|
454
452
|
var toBindWalletApi = ({
|
|
455
453
|
type,
|
|
456
|
-
address
|
|
454
|
+
address,
|
|
457
455
|
signature,
|
|
458
456
|
message,
|
|
459
457
|
connector_type,
|
|
@@ -462,7 +460,7 @@ var toBindWalletApi = ({
|
|
|
462
460
|
return request_default({
|
|
463
461
|
url: `/api/v1/wallet/bind`,
|
|
464
462
|
method: "POST",
|
|
465
|
-
data: { type, address
|
|
463
|
+
data: { type, address, signature, message, connector_type, wallet_client_type }
|
|
466
464
|
});
|
|
467
465
|
};
|
|
468
466
|
var getAppConfigApi = () => {
|
|
@@ -525,6 +523,13 @@ var getWalletChainListApi = () => {
|
|
|
525
523
|
method: "POST"
|
|
526
524
|
});
|
|
527
525
|
};
|
|
526
|
+
var getWalletNftListApi = (data) => {
|
|
527
|
+
return request_default({
|
|
528
|
+
url: `/api/v1/wallet/nfts`,
|
|
529
|
+
method: "POST",
|
|
530
|
+
data
|
|
531
|
+
});
|
|
532
|
+
};
|
|
528
533
|
|
|
529
534
|
// src/store/useLocalStore.ts
|
|
530
535
|
var persistedState = persist(
|
|
@@ -558,11 +563,11 @@ var persistedState = persist(
|
|
|
558
563
|
setToken: (token) => set({ token }),
|
|
559
564
|
setAppid: (appid) => set({ appid }),
|
|
560
565
|
setMid: (mid) => set({ mid }),
|
|
561
|
-
logout: () => set({ token: "", did: "", mid: "", address: "", overview: null }),
|
|
566
|
+
logout: () => set({ token: "", did: "", mid: "", address: "", overview: null, assets: [] }),
|
|
562
567
|
setTheme: (theme) => set({ theme }),
|
|
563
568
|
setEndpoints: (endpoints) => set({ endpoints }),
|
|
564
569
|
address: "",
|
|
565
|
-
setAddress: (
|
|
570
|
+
setAddress: (address) => set({ address }),
|
|
566
571
|
locale: "en",
|
|
567
572
|
setLocale: (locale) => set({ locale }),
|
|
568
573
|
wallet: {
|
|
@@ -570,7 +575,9 @@ var persistedState = persist(
|
|
|
570
575
|
},
|
|
571
576
|
setWallet: (wallet) => set({ wallet }),
|
|
572
577
|
chainId: 698,
|
|
573
|
-
setChainId: (chainId) => set({ chainId })
|
|
578
|
+
setChainId: (chainId) => set({ chainId }),
|
|
579
|
+
assets: [],
|
|
580
|
+
setAssets: (assets) => set({ assets })
|
|
574
581
|
}),
|
|
575
582
|
{ name: "match-local" }
|
|
576
583
|
);
|
|
@@ -579,7 +586,7 @@ var localStore = useLocalStore;
|
|
|
579
586
|
var useLocalStore_default = useLocalStore;
|
|
580
587
|
|
|
581
588
|
// src/hooks/useUserInfo.tsx
|
|
582
|
-
import { useMemo as
|
|
589
|
+
import { useMemo as useMemo7 } from "react";
|
|
583
590
|
|
|
584
591
|
// src/MatchContext.tsx
|
|
585
592
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
@@ -592,10 +599,13 @@ __export(hooks_exports, {
|
|
|
592
599
|
useMatchChain: () => useMatchChain,
|
|
593
600
|
useMatchEvents: () => useMatchEvents,
|
|
594
601
|
useMatchWallet: () => useMatchWallet,
|
|
602
|
+
useMatchWalletAssetList: () => useMatchWalletAssetList,
|
|
603
|
+
useMatchWalletAssets: () => useMatchWalletAssets,
|
|
595
604
|
useMatchWalletRecords: () => useMatchWalletRecords,
|
|
596
605
|
useModal: () => useModal,
|
|
597
606
|
useReceipt: () => useReceipt,
|
|
598
607
|
useToast: () => useToast,
|
|
608
|
+
useTransaction: () => useTransaction,
|
|
599
609
|
useUserInfo: () => useUserInfo,
|
|
600
610
|
useWallet: () => useWallet
|
|
601
611
|
});
|
|
@@ -668,108 +678,112 @@ import { createWalletClient } from "viem";
|
|
|
668
678
|
import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
|
|
669
679
|
import { encodeDeployData } from "viem";
|
|
670
680
|
|
|
671
|
-
// src/
|
|
672
|
-
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
|
+
}
|
|
673
748
|
|
|
674
|
-
// src/
|
|
675
|
-
import {
|
|
676
|
-
|
|
677
|
-
var
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
icon: /* @__PURE__ */ jsx2(SOLDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
689
|
-
activeIcon: /* @__PURE__ */ jsx2(SOLLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
690
|
-
name: "SOL",
|
|
691
|
-
method: "sol"
|
|
692
|
-
},
|
|
693
|
-
btc: {
|
|
694
|
-
icon: /* @__PURE__ */ jsx2(BTCDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
695
|
-
activeIcon: /* @__PURE__ */ jsx2(BTCLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
696
|
-
name: "BTC",
|
|
697
|
-
method: "btc"
|
|
698
|
-
},
|
|
699
|
-
tron: {
|
|
700
|
-
icon: /* @__PURE__ */ jsx2(TRXDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
701
|
-
activeIcon: /* @__PURE__ */ jsx2(TRXLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
702
|
-
name: "TRON",
|
|
703
|
-
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
|
+
});
|
|
704
763
|
},
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
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
|
+
});
|
|
710
772
|
}
|
|
711
|
-
};
|
|
712
|
-
return {
|
|
713
|
-
walletMap
|
|
714
|
-
};
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
// src/store/useModalStore.ts
|
|
718
|
-
var useSOLModalStore = create3((set) => ({
|
|
719
|
-
isOpen: false,
|
|
720
|
-
type: "",
|
|
721
|
-
open: (type) => set({ isOpen: true, type }),
|
|
722
|
-
close: () => set({ isOpen: false })
|
|
723
|
-
}));
|
|
724
|
-
var useTRONModalStore = create3((set) => ({
|
|
725
|
-
isOpen: false,
|
|
726
|
-
type: "",
|
|
727
|
-
open: (type) => set({ isOpen: true, type }),
|
|
728
|
-
close: () => set({ isOpen: false })
|
|
729
|
-
}));
|
|
730
|
-
var useTONModalStore = create3((set) => ({
|
|
731
|
-
isOpen: false,
|
|
732
|
-
type: "",
|
|
733
|
-
open: (type) => set({ isOpen: true, type }),
|
|
734
|
-
close: () => set({ isOpen: false })
|
|
735
|
-
}));
|
|
736
|
-
var useBTCModalStore = create3((set) => ({
|
|
737
|
-
isOpen: false,
|
|
738
|
-
type: "",
|
|
739
|
-
open: (type) => set({ isOpen: true, type }),
|
|
740
|
-
close: () => set({ isOpen: false })
|
|
741
|
-
}));
|
|
742
|
-
var useCEXBindModalStore = create3((set) => ({
|
|
743
|
-
type: "",
|
|
744
|
-
isOpen: false,
|
|
745
|
-
open: (type) => set({ isOpen: true, type }),
|
|
746
|
-
close: () => set({ isOpen: false })
|
|
747
|
-
}));
|
|
748
|
-
var useHashPanelStore = create3((set) => ({
|
|
749
|
-
isOpen: false,
|
|
750
|
-
hash: null,
|
|
751
|
-
chain: null,
|
|
752
|
-
open: (params) => set({
|
|
753
|
-
isOpen: true,
|
|
754
|
-
hash: params?.hash || null,
|
|
755
|
-
chain: params?.chain || null
|
|
756
773
|
}),
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
var
|
|
760
|
-
|
|
761
|
-
type: "",
|
|
762
|
-
methods: [],
|
|
763
|
-
open: (type, methods = DEFAULT_WALLET_METHODS) => set({ isOpen: true, type, methods }),
|
|
764
|
-
close: () => set({ isOpen: false })
|
|
765
|
-
}));
|
|
774
|
+
{ name: "match-transactions-local" }
|
|
775
|
+
);
|
|
776
|
+
var useTransactionStore = create3(devtools2(persistedState2));
|
|
777
|
+
var useTransactionStore_default = useTransactionStore;
|
|
766
778
|
|
|
767
779
|
// src/hooks/useWallet.tsx
|
|
780
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
768
781
|
var AppClientId = "react-sdk-" + getVersion();
|
|
769
782
|
function useWallet() {
|
|
770
|
-
const { address
|
|
783
|
+
const { address, wallet: walletConfig } = useLocalStore_default();
|
|
771
784
|
const { walletReady } = useStore_default();
|
|
772
|
-
const
|
|
785
|
+
const modal = useModal();
|
|
786
|
+
const { addTransaction } = useTransactionStore_default();
|
|
773
787
|
const isRecovered = async () => {
|
|
774
788
|
const res = await window.matchProvider.waitUntilWalletMessage({
|
|
775
789
|
method: "isRecovered"
|
|
@@ -815,39 +829,44 @@ function useWallet() {
|
|
|
815
829
|
}
|
|
816
830
|
};
|
|
817
831
|
const evmAccount = useMemo2(() => {
|
|
818
|
-
|
|
819
|
-
address
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
chainType: "ethereum" /* Ethereum */,
|
|
834
|
-
chain: {
|
|
835
|
-
id: chain?.id || restTransaction.chainId,
|
|
836
|
-
name: chain?.name,
|
|
837
|
-
nativeCurrency: {
|
|
838
|
-
name: chain?.nativeCurrency?.name || "ETH",
|
|
839
|
-
symbol: chain?.nativeCurrency?.symbol || "ETH",
|
|
840
|
-
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
|
|
841
847
|
},
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
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]);
|
|
851
870
|
useEffect3(() => {
|
|
852
871
|
matchlog_default.log("qwe-evmAccount", evmAccount);
|
|
853
872
|
}, [evmAccount]);
|
|
@@ -913,13 +932,25 @@ function useWallet() {
|
|
|
913
932
|
prepareTransactionRequest
|
|
914
933
|
}
|
|
915
934
|
});
|
|
916
|
-
openHashPanel();
|
|
917
935
|
const txHash = await obj.sendRawTransaction({
|
|
918
936
|
serializedTransaction
|
|
919
937
|
});
|
|
920
|
-
|
|
938
|
+
addTransaction({
|
|
939
|
+
chainId,
|
|
921
940
|
hash: txHash,
|
|
922
|
-
|
|
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 });
|
|
923
954
|
});
|
|
924
955
|
clearInterval(window.matchProvider.transactionMessageIntervalMap[transactionId].interval);
|
|
925
956
|
delete window.matchProvider.transactionMessageIntervalMap[transactionId];
|
|
@@ -940,7 +971,7 @@ function useWallet() {
|
|
|
940
971
|
});
|
|
941
972
|
};
|
|
942
973
|
const writeContract = async (parameters2) => {
|
|
943
|
-
const { abi, address:
|
|
974
|
+
const { abi, address: address2, args, dataSuffix, functionName, ...request3 } = parameters2;
|
|
944
975
|
const data = encodeFunctionData({
|
|
945
976
|
abi,
|
|
946
977
|
args,
|
|
@@ -948,7 +979,7 @@ function useWallet() {
|
|
|
948
979
|
});
|
|
949
980
|
return await sendTransaction({
|
|
950
981
|
data: `${data}${dataSuffix ? dataSuffix.replace("0x", "") : ""}`,
|
|
951
|
-
to:
|
|
982
|
+
to: address2,
|
|
952
983
|
...request3
|
|
953
984
|
});
|
|
954
985
|
};
|
|
@@ -962,7 +993,7 @@ function useWallet() {
|
|
|
962
993
|
return {
|
|
963
994
|
walletReady,
|
|
964
995
|
evmAccount,
|
|
965
|
-
address
|
|
996
|
+
address,
|
|
966
997
|
signMessage: signMessage2,
|
|
967
998
|
signTransaction,
|
|
968
999
|
isRecovered,
|
|
@@ -972,10 +1003,10 @@ function useWallet() {
|
|
|
972
1003
|
|
|
973
1004
|
// src/hooks/useCopyClipboard.ts
|
|
974
1005
|
import copy from "copy-to-clipboard";
|
|
975
|
-
import { useCallback, useEffect as useEffect4, useState as
|
|
1006
|
+
import { useCallback as useCallback2, useEffect as useEffect4, useState as useState4 } from "react";
|
|
976
1007
|
function useCopyClipboard(timeout = 500) {
|
|
977
|
-
const [isCopied, setIsCopied] =
|
|
978
|
-
const staticCopy =
|
|
1008
|
+
const [isCopied, setIsCopied] = useState4(false);
|
|
1009
|
+
const staticCopy = useCallback2((text) => {
|
|
979
1010
|
const didCopy = copy(text);
|
|
980
1011
|
setIsCopied(didCopy);
|
|
981
1012
|
}, []);
|
|
@@ -993,48 +1024,6 @@ function useCopyClipboard(timeout = 500) {
|
|
|
993
1024
|
return [isCopied, staticCopy];
|
|
994
1025
|
}
|
|
995
1026
|
|
|
996
|
-
// src/context/ModalContext.tsx
|
|
997
|
-
import { useState as useState4, useCallback as useCallback2, createContext, useContext } from "react";
|
|
998
|
-
import { createPortal } from "react-dom";
|
|
999
|
-
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1000
|
-
var ModalContext = createContext(null);
|
|
1001
|
-
function ModalProvider({ children }) {
|
|
1002
|
-
const [showModalState, setShowModalState] = useState4({
|
|
1003
|
-
visible: false,
|
|
1004
|
-
content: null
|
|
1005
|
-
});
|
|
1006
|
-
const closeShowModal = useCallback2(() => {
|
|
1007
|
-
setShowModalState({ visible: false, content: null });
|
|
1008
|
-
}, []);
|
|
1009
|
-
const show = useCallback2((content) => {
|
|
1010
|
-
setShowModalState({
|
|
1011
|
-
visible: true,
|
|
1012
|
-
content: content({ close: closeShowModal })
|
|
1013
|
-
});
|
|
1014
|
-
}, [closeShowModal]);
|
|
1015
|
-
const open = useCallback2((props) => {
|
|
1016
|
-
setShowModalState({
|
|
1017
|
-
visible: true,
|
|
1018
|
-
content: /* @__PURE__ */ jsx3(ModalDrawer, { showClose: true, isOpen: true, onClose: closeShowModal, title: props.title, children: /* @__PURE__ */ jsx3(props.content, { close: closeShowModal }) })
|
|
1019
|
-
});
|
|
1020
|
-
}, [closeShowModal]);
|
|
1021
|
-
const ShowModalComponent = showModalState.visible ? createPortal(
|
|
1022
|
-
showModalState.content,
|
|
1023
|
-
document.body
|
|
1024
|
-
) : null;
|
|
1025
|
-
return /* @__PURE__ */ jsxs2(ModalContext.Provider, { value: { show, open }, children: [
|
|
1026
|
-
children,
|
|
1027
|
-
ShowModalComponent
|
|
1028
|
-
] });
|
|
1029
|
-
}
|
|
1030
|
-
function useModal() {
|
|
1031
|
-
const context = useContext(ModalContext);
|
|
1032
|
-
if (!context) {
|
|
1033
|
-
throw new Error("useModal must be used within a ModalProvider");
|
|
1034
|
-
}
|
|
1035
|
-
return context;
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
1027
|
// src/context/ToastContext.tsx
|
|
1039
1028
|
import { useState as useState5, useCallback as useCallback3, createContext as createContext2, useContext as useContext2 } from "react";
|
|
1040
1029
|
import { createPortal as createPortal2 } from "react-dom";
|
|
@@ -1088,20 +1077,23 @@ function useToast() {
|
|
|
1088
1077
|
// src/hooks/api/wallet.ts
|
|
1089
1078
|
var wallet_exports = {};
|
|
1090
1079
|
__export(wallet_exports, {
|
|
1080
|
+
USER_IMPORT_TOKEN_LIST_KEY: () => USER_IMPORT_TOKEN_LIST_KEY,
|
|
1091
1081
|
getUserWalletTransactionsApi: () => getUserWalletTransactionsApi,
|
|
1092
1082
|
getWalletAssetListApi: () => getWalletAssetListApi,
|
|
1093
1083
|
getWalletListApi: () => getWalletListApi,
|
|
1094
1084
|
useAssetListQuery: () => useAssetListQuery,
|
|
1095
1085
|
useChainListQuery: () => useChainListQuery,
|
|
1096
1086
|
useImportTokenListQuery: () => useImportTokenListQuery,
|
|
1087
|
+
useWalletAssetListQuery: () => useWalletAssetListQuery,
|
|
1097
1088
|
useWalletChainListQuery: () => useWalletChainListQuery,
|
|
1089
|
+
useWalletNftListQuery: () => useWalletNftListQuery,
|
|
1098
1090
|
userImportTokenApi: () => userImportTokenApi
|
|
1099
1091
|
});
|
|
1100
1092
|
import { useQuery } from "@tanstack/react-query";
|
|
1101
1093
|
function useChainListQuery(options) {
|
|
1102
1094
|
const { isLogin, token } = useUserInfo();
|
|
1103
1095
|
return useQuery({
|
|
1104
|
-
queryKey: ["match-chain-list", token],
|
|
1096
|
+
queryKey: ["match-user-chain-list", token],
|
|
1105
1097
|
queryFn: async () => {
|
|
1106
1098
|
const res = await getUserChainListApi();
|
|
1107
1099
|
if (!isSuccess(res)) {
|
|
@@ -1119,7 +1111,7 @@ function useAssetListQuery({
|
|
|
1119
1111
|
}) {
|
|
1120
1112
|
const { isLogin, token } = useUserInfo();
|
|
1121
1113
|
return useQuery({
|
|
1122
|
-
queryKey: ["match-
|
|
1114
|
+
queryKey: ["match-user-asset-list", token, chainId],
|
|
1123
1115
|
queryFn: async () => {
|
|
1124
1116
|
const res = await getUserWalletAssetApi({ chain_id: chainId.toString() });
|
|
1125
1117
|
if (!isSuccess(res)) {
|
|
@@ -1131,13 +1123,14 @@ function useAssetListQuery({
|
|
|
1131
1123
|
...options
|
|
1132
1124
|
});
|
|
1133
1125
|
}
|
|
1126
|
+
var USER_IMPORT_TOKEN_LIST_KEY = "match-user-import-token-list";
|
|
1134
1127
|
function useImportTokenListQuery({
|
|
1135
1128
|
chainId,
|
|
1136
1129
|
...options
|
|
1137
1130
|
}) {
|
|
1138
1131
|
const { isLogin, token } = useUserInfo();
|
|
1139
1132
|
return useQuery({
|
|
1140
|
-
queryKey: [
|
|
1133
|
+
queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId],
|
|
1141
1134
|
queryFn: async () => {
|
|
1142
1135
|
const res = await getUserImportTokenListApi({ chain_id: chainId.toString() });
|
|
1143
1136
|
if (!isSuccess(res)) {
|
|
@@ -1164,9 +1157,54 @@ function useWalletChainListQuery(options) {
|
|
|
1164
1157
|
...options
|
|
1165
1158
|
});
|
|
1166
1159
|
}
|
|
1160
|
+
function useWalletNftListQuery({
|
|
1161
|
+
chainId,
|
|
1162
|
+
address,
|
|
1163
|
+
...options
|
|
1164
|
+
}) {
|
|
1165
|
+
const { isLogin, token } = useUserInfo();
|
|
1166
|
+
return useQuery({
|
|
1167
|
+
queryKey: ["match-wallet-nft-list", token, chainId, address],
|
|
1168
|
+
queryFn: async () => {
|
|
1169
|
+
const res = await getWalletNftListApi({
|
|
1170
|
+
chain_id: chainId.toString(),
|
|
1171
|
+
address
|
|
1172
|
+
});
|
|
1173
|
+
if (!isSuccess(res)) {
|
|
1174
|
+
return [];
|
|
1175
|
+
}
|
|
1176
|
+
return res.data;
|
|
1177
|
+
},
|
|
1178
|
+
enabled: isLogin,
|
|
1179
|
+
...options
|
|
1180
|
+
});
|
|
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
|
+
}
|
|
1167
1204
|
|
|
1168
1205
|
// src/hooks/useMatchChain.tsx
|
|
1169
1206
|
import { useMemo as useMemo3, useState as useState6 } from "react";
|
|
1207
|
+
import { createPublicClient as createPublicClient2, formatUnits, http as http2, parseUnits } from "viem";
|
|
1170
1208
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1171
1209
|
function useMatchChain() {
|
|
1172
1210
|
const chainListQuery = useChainListQuery();
|
|
@@ -1226,120 +1264,685 @@ function useMatchChain() {
|
|
|
1226
1264
|
content: ChangeNetwork
|
|
1227
1265
|
});
|
|
1228
1266
|
};
|
|
1267
|
+
const publicClient = useMemo3(() => {
|
|
1268
|
+
if (!chain) {
|
|
1269
|
+
return null;
|
|
1270
|
+
}
|
|
1271
|
+
return createPublicClient2({
|
|
1272
|
+
chain,
|
|
1273
|
+
transport: http2()
|
|
1274
|
+
});
|
|
1275
|
+
}, [chain]);
|
|
1229
1276
|
return {
|
|
1230
1277
|
list: chainListQuery.data,
|
|
1231
1278
|
chainId,
|
|
1232
1279
|
setChainId,
|
|
1233
1280
|
chain,
|
|
1234
1281
|
explorerLink,
|
|
1235
|
-
showChangeNetwork
|
|
1282
|
+
showChangeNetwork,
|
|
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
|
+
}
|
|
1236
1290
|
};
|
|
1237
1291
|
}
|
|
1238
1292
|
|
|
1239
1293
|
// src/hooks/useMatchWallet.tsx
|
|
1240
1294
|
import { QRCode } from "react-qrcode";
|
|
1241
|
-
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";
|
|
1242
1297
|
|
|
1243
|
-
//
|
|
1244
|
-
var
|
|
1298
|
+
// src/config/index.tsx
|
|
1299
|
+
var EMAIL_INTERVAL = 60;
|
|
1300
|
+
var EMAIL_CODE_LENGTH = 6;
|
|
1301
|
+
var NATIVE_TOKEN_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
1302
|
+
|
|
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;
|
|
1245
1361
|
|
|
1246
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
|
|
1247
1396
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1248
|
-
function
|
|
1249
|
-
const
|
|
1250
|
-
const {
|
|
1397
|
+
function ImportToken({ close }) {
|
|
1398
|
+
const [status, setStatus] = useState7("");
|
|
1399
|
+
const { token } = useUserInfo();
|
|
1400
|
+
const [address, setAddress] = useState7("");
|
|
1401
|
+
const [symbol, setSymbol] = useState7("");
|
|
1402
|
+
const [decimals, setDecimals] = useState7("");
|
|
1403
|
+
const [error, setError] = useState7({});
|
|
1404
|
+
const { publicClient, chainId, chain } = useMatchChain();
|
|
1405
|
+
const getContractInfo = async () => {
|
|
1406
|
+
if (!publicClient) return;
|
|
1407
|
+
const calls = [
|
|
1408
|
+
{
|
|
1409
|
+
address,
|
|
1410
|
+
abi: erc20Abi,
|
|
1411
|
+
functionName: "symbol",
|
|
1412
|
+
args: []
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
address,
|
|
1416
|
+
abi: erc20Abi,
|
|
1417
|
+
functionName: "decimals",
|
|
1418
|
+
args: []
|
|
1419
|
+
}
|
|
1420
|
+
];
|
|
1421
|
+
try {
|
|
1422
|
+
const results = await publicClient.multicall({ contracts: calls });
|
|
1423
|
+
console.log("results", results);
|
|
1424
|
+
if (!symbol && results[0]?.status == "success") {
|
|
1425
|
+
setSymbol(results[0]?.result);
|
|
1426
|
+
}
|
|
1427
|
+
if (!decimals && results[1]?.status == "success") {
|
|
1428
|
+
setDecimals((results[1]?.result).toString());
|
|
1429
|
+
}
|
|
1430
|
+
} catch (error2) {
|
|
1431
|
+
setError({
|
|
1432
|
+
address: error2.message
|
|
1433
|
+
});
|
|
1434
|
+
}
|
|
1435
|
+
};
|
|
1436
|
+
const intl = useIntl2();
|
|
1437
|
+
useEffect6(() => {
|
|
1438
|
+
if (address.length === 42) {
|
|
1439
|
+
const reg = /^0x[0-9a-fA-F]{40}$/;
|
|
1440
|
+
if (!reg.test(address)) {
|
|
1441
|
+
setError({
|
|
1442
|
+
...error,
|
|
1443
|
+
address: intl.formatMessage({
|
|
1444
|
+
id: "tokenAddressError"
|
|
1445
|
+
})
|
|
1446
|
+
});
|
|
1447
|
+
} else {
|
|
1448
|
+
setError({
|
|
1449
|
+
...error,
|
|
1450
|
+
address: ""
|
|
1451
|
+
});
|
|
1452
|
+
publicClient && getContractInfo();
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
}, [address, publicClient]);
|
|
1456
|
+
const [loading, setLoading] = useState7(false);
|
|
1457
|
+
const toast = useToast();
|
|
1458
|
+
const queryClient2 = useQueryClient();
|
|
1459
|
+
const onImport = async () => {
|
|
1460
|
+
setLoading(true);
|
|
1461
|
+
try {
|
|
1462
|
+
const res = await userImportTokenApi({
|
|
1463
|
+
chain_id: chainId?.toString() || "",
|
|
1464
|
+
symbol,
|
|
1465
|
+
address,
|
|
1466
|
+
decimals
|
|
1467
|
+
});
|
|
1468
|
+
if (isSuccess(res)) {
|
|
1469
|
+
setStatus("success");
|
|
1470
|
+
queryClient2.invalidateQueries({
|
|
1471
|
+
queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId]
|
|
1472
|
+
});
|
|
1473
|
+
} else {
|
|
1474
|
+
setStatus("fail");
|
|
1475
|
+
toast.error(res.message);
|
|
1476
|
+
}
|
|
1477
|
+
} catch (error2) {
|
|
1478
|
+
setStatus("fail");
|
|
1479
|
+
toast.error(error2.message);
|
|
1480
|
+
} finally {
|
|
1481
|
+
setLoading(false);
|
|
1482
|
+
}
|
|
1483
|
+
};
|
|
1484
|
+
const canImport = useMemo4(() => {
|
|
1485
|
+
if (!address) {
|
|
1486
|
+
return false;
|
|
1487
|
+
}
|
|
1488
|
+
if (!symbol) {
|
|
1489
|
+
return false;
|
|
1490
|
+
}
|
|
1491
|
+
if (decimals.length === 0) {
|
|
1492
|
+
return false;
|
|
1493
|
+
}
|
|
1494
|
+
const reg = /^0x[0-9a-fA-F]{40}$/;
|
|
1495
|
+
if (!reg.test(address)) {
|
|
1496
|
+
return false;
|
|
1497
|
+
}
|
|
1498
|
+
return true;
|
|
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
|
+
}
|
|
1515
|
+
return /* @__PURE__ */ jsxs5("div", { className: `matchid-import-token`, children: [
|
|
1516
|
+
/* @__PURE__ */ jsxs5("div", { className: "matchid-import-token-form", children: [
|
|
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(
|
|
1520
|
+
Input,
|
|
1521
|
+
{
|
|
1522
|
+
placeholder: intl.formatMessage({
|
|
1523
|
+
id: "tokenSmartContractPlaceholder"
|
|
1524
|
+
}),
|
|
1525
|
+
value: address,
|
|
1526
|
+
onChange: (e) => setAddress(e.target.value),
|
|
1527
|
+
maxLength: 42
|
|
1528
|
+
}
|
|
1529
|
+
) }),
|
|
1530
|
+
/* @__PURE__ */ jsx6(Field, { label: intl.formatMessage({
|
|
1531
|
+
id: "tokenSymbol"
|
|
1532
|
+
}), error: error.symbol, children: /* @__PURE__ */ jsx6(
|
|
1533
|
+
Input,
|
|
1534
|
+
{
|
|
1535
|
+
placeholder: intl.formatMessage({
|
|
1536
|
+
id: "tokenSymbolPlaceholder"
|
|
1537
|
+
}),
|
|
1538
|
+
value: symbol,
|
|
1539
|
+
onChange: (e) => setSymbol(e.target.value),
|
|
1540
|
+
maxLength: 16
|
|
1541
|
+
}
|
|
1542
|
+
) }),
|
|
1543
|
+
/* @__PURE__ */ jsx6(Field, { label: intl.formatMessage({
|
|
1544
|
+
id: "tokenDecimals"
|
|
1545
|
+
}), error: error.decimals, children: /* @__PURE__ */ jsx6(
|
|
1546
|
+
Input,
|
|
1547
|
+
{
|
|
1548
|
+
placeholder: intl.formatMessage({
|
|
1549
|
+
id: "tokenDecimalsPlaceholder"
|
|
1550
|
+
}),
|
|
1551
|
+
type: "number",
|
|
1552
|
+
value: decimals,
|
|
1553
|
+
onChange: (e) => setDecimals(e.target.value)
|
|
1554
|
+
}
|
|
1555
|
+
) })
|
|
1556
|
+
] }),
|
|
1557
|
+
/* @__PURE__ */ jsx6(
|
|
1558
|
+
Button,
|
|
1559
|
+
{
|
|
1560
|
+
size: "lg",
|
|
1561
|
+
onClick: onImport,
|
|
1562
|
+
block: true,
|
|
1563
|
+
loading: loading || isContractQuery.isLoading,
|
|
1564
|
+
disabled: !canImport || !isContractQuery.data,
|
|
1565
|
+
highlight: true,
|
|
1566
|
+
children: /* @__PURE__ */ jsx6(FormattedMessage2, { id: "import" })
|
|
1567
|
+
}
|
|
1568
|
+
)
|
|
1569
|
+
] });
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
// src/hooks/useMatchWallet.tsx
|
|
1573
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1574
|
+
var ReceiveModal = () => {
|
|
1251
1575
|
const chain = useMatchChain();
|
|
1576
|
+
const { address } = useWallet();
|
|
1252
1577
|
const [copied, setCopied] = useCopyClipboard();
|
|
1253
1578
|
const toast = useToast();
|
|
1579
|
+
const intl = useIntl3();
|
|
1254
1580
|
const onCopy = () => {
|
|
1255
|
-
setCopied(
|
|
1256
|
-
toast.success(
|
|
1581
|
+
setCopied(address);
|
|
1582
|
+
toast.success(intl.formatMessage({
|
|
1583
|
+
id: "copied"
|
|
1584
|
+
}));
|
|
1257
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
|
+
] });
|
|
1615
|
+
};
|
|
1616
|
+
function useMatchWallet() {
|
|
1617
|
+
const modal = useModal();
|
|
1618
|
+
const intl = useIntl3();
|
|
1258
1619
|
const showReceiveModal = () => {
|
|
1259
|
-
const chainLink = chain.explorerLink("address/" + address2);
|
|
1260
|
-
const ReceiveModal = () => {
|
|
1261
|
-
return /* @__PURE__ */ jsxs5("div", { className: `matchid-receive-modal`, children: [
|
|
1262
|
-
/* @__PURE__ */ jsxs5("div", { className: "matchid-receive-container", children: [
|
|
1263
|
-
/* @__PURE__ */ jsx6("div", { className: `matchid-receive-text`, children: "Receive by scanning the QR code" }),
|
|
1264
|
-
/* @__PURE__ */ jsx6("div", { className: `matchid-qr-container`, children: /* @__PURE__ */ jsx6(
|
|
1265
|
-
QRCode,
|
|
1266
|
-
{
|
|
1267
|
-
margin: "0",
|
|
1268
|
-
className: `matchid-qr-code`,
|
|
1269
|
-
value: address2
|
|
1270
|
-
}
|
|
1271
|
-
) }),
|
|
1272
|
-
/* @__PURE__ */ jsx6(
|
|
1273
|
-
"a",
|
|
1274
|
-
{
|
|
1275
|
-
href: chainLink,
|
|
1276
|
-
target: "_blank",
|
|
1277
|
-
className: `matchid-receive-link`,
|
|
1278
|
-
children: address2
|
|
1279
|
-
}
|
|
1280
|
-
)
|
|
1281
|
-
] }),
|
|
1282
|
-
/* @__PURE__ */ jsx6(Button, { size: "lg", onClick: onCopy, block: true, highlight: true, disabled: copied, children: "Copy Address" })
|
|
1283
|
-
] });
|
|
1284
|
-
};
|
|
1285
1620
|
modal.open({
|
|
1286
|
-
title:
|
|
1621
|
+
title: intl.formatMessage({
|
|
1622
|
+
id: "receive"
|
|
1623
|
+
}),
|
|
1287
1624
|
content: ReceiveModal
|
|
1288
1625
|
});
|
|
1289
1626
|
};
|
|
1627
|
+
const showImportTokenModal = () => {
|
|
1628
|
+
modal.open({
|
|
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
|
|
1641
|
+
});
|
|
1642
|
+
};
|
|
1290
1643
|
return {
|
|
1291
|
-
showReceiveModal
|
|
1644
|
+
showReceiveModal,
|
|
1645
|
+
showImportTokenModal,
|
|
1646
|
+
showSendListModal
|
|
1292
1647
|
};
|
|
1293
1648
|
}
|
|
1294
|
-
function useMatchWalletRecords({
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
const
|
|
1298
|
-
const
|
|
1299
|
-
const
|
|
1300
|
-
const
|
|
1649
|
+
function useMatchWalletRecords() {
|
|
1650
|
+
const [hasMore, setHasMore] = useState8(true);
|
|
1651
|
+
const [items, setItems] = useState8([]);
|
|
1652
|
+
const { chainId, publicClient } = useMatchChain();
|
|
1653
|
+
const { address } = useWallet();
|
|
1654
|
+
const hasMoreRef = useRef(hasMore);
|
|
1655
|
+
const nextPageParamsRef = useRef(void 0);
|
|
1656
|
+
const { getContract, setContracts } = useContractStore_default();
|
|
1301
1657
|
const fetchMoreData = async () => {
|
|
1302
|
-
|
|
1658
|
+
const chainIdStr = chainId ? chainId.toString() : "";
|
|
1659
|
+
if (!hasMoreRef.current || !chainIdStr) {
|
|
1303
1660
|
return;
|
|
1304
1661
|
}
|
|
1305
1662
|
const res = await getUserWalletTransactionsApi({
|
|
1306
1663
|
chain_id: chainIdStr,
|
|
1307
|
-
|
|
1308
|
-
|
|
1664
|
+
...nextPageParamsRef.current
|
|
1665
|
+
});
|
|
1666
|
+
if (isSuccess(res)) {
|
|
1667
|
+
if (res.data && res.data.transactions && res.data.transactions.length > 0) {
|
|
1668
|
+
const contractList = res.data.transactions.filter((item) => item.input.toLowerCase().substring(0, 10) == "0xa9059cbb").map((item) => item.to);
|
|
1669
|
+
const contractUnique = Array.from(new Set(contractList)).filter((item) => {
|
|
1670
|
+
const contract = getContract(chainId || 0, item);
|
|
1671
|
+
if (!contract) {
|
|
1672
|
+
return true;
|
|
1673
|
+
}
|
|
1674
|
+
if (!contract.symbol && !contract.name) {
|
|
1675
|
+
return true;
|
|
1676
|
+
}
|
|
1677
|
+
if (!contract.decimals) {
|
|
1678
|
+
return true;
|
|
1679
|
+
}
|
|
1680
|
+
return false;
|
|
1681
|
+
});
|
|
1682
|
+
const calls = [];
|
|
1683
|
+
for (const contract of contractUnique) {
|
|
1684
|
+
calls.push({
|
|
1685
|
+
address: contract,
|
|
1686
|
+
abi: erc20Abi2,
|
|
1687
|
+
functionName: "symbol",
|
|
1688
|
+
args: []
|
|
1689
|
+
});
|
|
1690
|
+
calls.push({
|
|
1691
|
+
address: contract,
|
|
1692
|
+
abi: erc20Abi2,
|
|
1693
|
+
functionName: "decimals",
|
|
1694
|
+
args: []
|
|
1695
|
+
});
|
|
1696
|
+
}
|
|
1697
|
+
const results = await publicClient?.multicall({ contracts: calls });
|
|
1698
|
+
if (results) {
|
|
1699
|
+
console.log("contract results", calls, results);
|
|
1700
|
+
const contractMap = [];
|
|
1701
|
+
for (let i = 0; i < contractUnique.length; i++) {
|
|
1702
|
+
const info = {};
|
|
1703
|
+
if (results[i * 2].status == "success") {
|
|
1704
|
+
info.symbol = results[i * 2].result;
|
|
1705
|
+
}
|
|
1706
|
+
if (results[i * 2 + 1].status == "success") {
|
|
1707
|
+
info.decimals = results[i * 2 + 1].result;
|
|
1708
|
+
}
|
|
1709
|
+
contractMap.push({
|
|
1710
|
+
chainId: chainId || 0,
|
|
1711
|
+
contractAddress: contractUnique[i],
|
|
1712
|
+
info
|
|
1713
|
+
});
|
|
1714
|
+
}
|
|
1715
|
+
setContracts(contractMap);
|
|
1716
|
+
}
|
|
1717
|
+
setItems(items.concat(res.data.transactions || []));
|
|
1718
|
+
}
|
|
1719
|
+
hasMoreRef.current = res.data && res.data.transactions && res.data.transactions.length >= 50;
|
|
1720
|
+
setHasMore(hasMoreRef.current);
|
|
1721
|
+
nextPageParamsRef.current = res.data.next_page_params;
|
|
1722
|
+
}
|
|
1723
|
+
};
|
|
1724
|
+
const onInit = async () => {
|
|
1725
|
+
nextPageParamsRef.current = void 0;
|
|
1726
|
+
setItems([]);
|
|
1727
|
+
setHasMore(true);
|
|
1728
|
+
hasMoreRef.current = true;
|
|
1729
|
+
fetchMoreData();
|
|
1730
|
+
};
|
|
1731
|
+
useEffect7(() => {
|
|
1732
|
+
if (chainId && address) {
|
|
1733
|
+
onInit();
|
|
1734
|
+
}
|
|
1735
|
+
}, [chainId, address]);
|
|
1736
|
+
const { transactions, removeTransaction } = useTransactionStore_default();
|
|
1737
|
+
const list = useMemo5(() => {
|
|
1738
|
+
const localTransactions = transactions[`${chainId}-${address}`] || [];
|
|
1739
|
+
const removeList = localTransactions.filter((n) => items.findIndex((m) => m.hash == n.hash) >= 0);
|
|
1740
|
+
removeList.forEach((item) => {
|
|
1741
|
+
removeTransaction({
|
|
1742
|
+
chainId: chainId || 0,
|
|
1743
|
+
hash: item.hash,
|
|
1744
|
+
address
|
|
1745
|
+
});
|
|
1746
|
+
});
|
|
1747
|
+
const saveList = localTransactions.filter((n) => items.findIndex((m) => m.hash == n.hash) < 0);
|
|
1748
|
+
return [
|
|
1749
|
+
...saveList,
|
|
1750
|
+
...items
|
|
1751
|
+
].sort((a, b) => {
|
|
1752
|
+
const btimestamp = typeof b.timestamp === "string" ? parseInt(b.timestamp) : b.timestamp;
|
|
1753
|
+
const atimestamp = typeof a.timestamp === "string" ? parseInt(a.timestamp) : a.timestamp;
|
|
1754
|
+
return btimestamp - atimestamp;
|
|
1755
|
+
});
|
|
1756
|
+
}, [transactions, chainId, items, address]);
|
|
1757
|
+
return {
|
|
1758
|
+
items: list,
|
|
1759
|
+
fetchMoreData,
|
|
1760
|
+
hasMore
|
|
1761
|
+
};
|
|
1762
|
+
}
|
|
1763
|
+
function useMatchWalletAssets({
|
|
1764
|
+
importTokenOptions,
|
|
1765
|
+
assetListOptions
|
|
1766
|
+
} = {}) {
|
|
1767
|
+
const { chainId, chain } = useMatchChain();
|
|
1768
|
+
const importTokenQuery = useImportTokenListQuery({
|
|
1769
|
+
chainId: chainId || 0,
|
|
1770
|
+
...importTokenOptions
|
|
1771
|
+
});
|
|
1772
|
+
const assetListQuery = useAssetListQuery({
|
|
1773
|
+
chainId: chainId || 0,
|
|
1774
|
+
...assetListOptions
|
|
1775
|
+
});
|
|
1776
|
+
const mergedAssets = useMemo5(() => {
|
|
1777
|
+
if (!assetListQuery.data && !importTokenQuery.data) return [];
|
|
1778
|
+
const assetList = (assetListQuery.data || []).map((asset) => ({
|
|
1779
|
+
...asset,
|
|
1780
|
+
isAuto: true
|
|
1781
|
+
}));
|
|
1782
|
+
const importTokens = (importTokenQuery.data || []).map((token) => ({
|
|
1783
|
+
...token,
|
|
1784
|
+
isCustom: true
|
|
1785
|
+
}));
|
|
1786
|
+
const assetMap = /* @__PURE__ */ new Map();
|
|
1787
|
+
assetList.forEach((asset) => {
|
|
1788
|
+
const key = `${asset.chain_id}-${asset.address.toLowerCase()}`;
|
|
1789
|
+
assetMap.set(key, asset);
|
|
1309
1790
|
});
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1791
|
+
importTokens.forEach((token) => {
|
|
1792
|
+
const key = `${token.chain_id}-${token.address.toLowerCase()}`;
|
|
1793
|
+
if (assetMap.has(key)) {
|
|
1794
|
+
const existing = assetMap.get(key);
|
|
1795
|
+
assetMap.set(key, {
|
|
1796
|
+
...existing,
|
|
1797
|
+
symbol: token.symbol,
|
|
1798
|
+
decimals: token.decimals,
|
|
1799
|
+
isCustom: true,
|
|
1800
|
+
isAuto: existing.isAuto ?? false
|
|
1801
|
+
});
|
|
1802
|
+
} else {
|
|
1803
|
+
assetMap.set(key, token);
|
|
1313
1804
|
}
|
|
1314
|
-
|
|
1805
|
+
});
|
|
1806
|
+
const list = Array.from(assetMap.values()).sort((a, b) => {
|
|
1807
|
+
return (b.isAuto ? 1 : 0) - (a.isAuto ? 1 : 0);
|
|
1808
|
+
});
|
|
1809
|
+
const nativeToken = list.find((asset) => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase());
|
|
1810
|
+
if (!nativeToken) {
|
|
1811
|
+
list.unshift({
|
|
1812
|
+
chain_id: chain?.id.toString() || "",
|
|
1813
|
+
address: NATIVE_TOKEN_ADDRESS,
|
|
1814
|
+
decimals: chain?.nativeCurrency.decimals || 18,
|
|
1815
|
+
symbol: chain?.nativeCurrency.symbol,
|
|
1816
|
+
name: chain?.nativeCurrency.name,
|
|
1817
|
+
balance: 0,
|
|
1818
|
+
icon: chain?.nativeCurrency.icon
|
|
1819
|
+
});
|
|
1315
1820
|
}
|
|
1821
|
+
return list;
|
|
1822
|
+
}, [assetListQuery.data, importTokenQuery.data]);
|
|
1823
|
+
return {
|
|
1824
|
+
importTokenQuery,
|
|
1825
|
+
assetListQuery,
|
|
1826
|
+
mergedAssets
|
|
1316
1827
|
};
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1828
|
+
}
|
|
1829
|
+
var MULTICALL_LIMIT = 100;
|
|
1830
|
+
function useMatchWalletAssetList({
|
|
1831
|
+
list
|
|
1832
|
+
}) {
|
|
1833
|
+
const { publicClient, chain } = useMatchChain();
|
|
1834
|
+
const { address } = useWallet();
|
|
1835
|
+
const { assets, setAssets } = useLocalStore_default();
|
|
1836
|
+
const nativeToken = list.find((asset) => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase()) || {
|
|
1837
|
+
chain_id: chain?.id || "",
|
|
1838
|
+
address: NATIVE_TOKEN_ADDRESS,
|
|
1839
|
+
decimals: 18,
|
|
1840
|
+
symbol: chain?.nativeCurrency.symbol,
|
|
1841
|
+
name: chain?.nativeCurrency.name,
|
|
1842
|
+
balance: 0
|
|
1321
1843
|
};
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1844
|
+
const nativeBalanceQuery = useQuery3({
|
|
1845
|
+
queryKey: ["nativeBalance", nativeToken?.chain_id],
|
|
1846
|
+
queryFn: async () => {
|
|
1847
|
+
if (!nativeToken || !publicClient) return null;
|
|
1848
|
+
try {
|
|
1849
|
+
return await publicClient.getBalance({
|
|
1850
|
+
address
|
|
1851
|
+
});
|
|
1852
|
+
} catch (error) {
|
|
1853
|
+
console.error("Native Token Balance Error:", error);
|
|
1854
|
+
return null;
|
|
1855
|
+
}
|
|
1856
|
+
},
|
|
1857
|
+
enabled: !!nativeToken && !!publicClient,
|
|
1858
|
+
refetchInterval: 15e3,
|
|
1859
|
+
// Refresh every 15 seconds
|
|
1860
|
+
retry: 3
|
|
1861
|
+
// Retry up to 3 times if failed
|
|
1862
|
+
});
|
|
1863
|
+
const erc20Tokens = useMemo5(() => list.filter((asset) => asset.address !== NATIVE_TOKEN_ADDRESS), [list]);
|
|
1864
|
+
const erc20BalanceQuery = useQuery3({
|
|
1865
|
+
queryKey: ["erc20Balances", erc20Tokens.map((token) => token.address)],
|
|
1866
|
+
queryFn: async () => {
|
|
1867
|
+
if (!erc20Tokens.length || !publicClient) return [];
|
|
1868
|
+
const calls = erc20Tokens.map((token) => ({
|
|
1869
|
+
address: token.address,
|
|
1870
|
+
abi: erc20Abi2,
|
|
1871
|
+
functionName: "balanceOf",
|
|
1872
|
+
args: [address]
|
|
1873
|
+
}));
|
|
1874
|
+
let balances = [];
|
|
1875
|
+
for (let i = 0; i < calls.length; i += MULTICALL_LIMIT) {
|
|
1876
|
+
const batchCalls = calls.slice(i, i + MULTICALL_LIMIT);
|
|
1877
|
+
try {
|
|
1878
|
+
const results = await publicClient.multicall({ contracts: batchCalls });
|
|
1879
|
+
balances.push(...results);
|
|
1880
|
+
} catch (error) {
|
|
1881
|
+
console.error("MultiCall Error:", error);
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
return balances;
|
|
1885
|
+
},
|
|
1886
|
+
enabled: !!publicClient,
|
|
1887
|
+
refetchInterval: 15e3,
|
|
1888
|
+
// Refresh every 15 seconds
|
|
1889
|
+
retry: 3
|
|
1890
|
+
});
|
|
1891
|
+
const enrichedAssets = useMemo5(() => {
|
|
1892
|
+
if (!list) return [];
|
|
1893
|
+
const erc20Balances = erc20BalanceQuery.data || [];
|
|
1894
|
+
return list.map((asset) => {
|
|
1895
|
+
let balanceValue = "0";
|
|
1896
|
+
let balance = 0;
|
|
1897
|
+
const decimals = typeof asset.decimals === "string" ? parseInt(asset.decimals) : asset.decimals;
|
|
1898
|
+
const assetAddress = asset.address.toLowerCase();
|
|
1899
|
+
if (assetAddress === NATIVE_TOKEN_ADDRESS) {
|
|
1900
|
+
balanceValue = nativeBalanceQuery.data?.toString() || "0";
|
|
1901
|
+
balance = nativeBalanceQuery.data ? Number(formatUnits2(nativeBalanceQuery.data, decimals)) : 0;
|
|
1902
|
+
} else {
|
|
1903
|
+
const index = erc20Tokens.findIndex((t) => t.address.toLowerCase() === assetAddress);
|
|
1904
|
+
if (index !== -1 && erc20Balances[index] && erc20Balances[index].status === "success") {
|
|
1905
|
+
balance = Number(formatUnits2(erc20Balances[index].result, decimals));
|
|
1906
|
+
balanceValue = erc20Balances[index].result?.toString() || "0";
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
const value = asset.isAuto ? balance * (asset.price || 0) : 0;
|
|
1910
|
+
return { ...asset, balance, value, balanceValue };
|
|
1911
|
+
});
|
|
1912
|
+
}, [list, nativeBalanceQuery.data, erc20BalanceQuery.data]);
|
|
1913
|
+
useEffect7(() => {
|
|
1914
|
+
const list2 = enrichedAssets.sort((a, b) => {
|
|
1915
|
+
if (a.address === NATIVE_TOKEN_ADDRESS) return -1;
|
|
1916
|
+
if (b.address === NATIVE_TOKEN_ADDRESS) return 1;
|
|
1917
|
+
if (a.isAuto && b.isAuto) return b.value - a.value;
|
|
1918
|
+
if (a.isAuto) return -1;
|
|
1919
|
+
if (b.isAuto) return 1;
|
|
1920
|
+
if (a.isCustom && !a.isAuto && a.balance > 0) return -1;
|
|
1921
|
+
if (b.isCustom && !b.isAuto && b.balance > 0) return 1;
|
|
1922
|
+
return 0;
|
|
1923
|
+
});
|
|
1924
|
+
setAssets(list2);
|
|
1925
|
+
}, [enrichedAssets]);
|
|
1327
1926
|
return {
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1927
|
+
list: assets,
|
|
1928
|
+
isLoading: nativeBalanceQuery.isLoading || erc20BalanceQuery.isLoading,
|
|
1929
|
+
isFetched: nativeBalanceQuery.isFetched && erc20BalanceQuery.isFetched,
|
|
1930
|
+
nativeBalanceQuery,
|
|
1931
|
+
erc20BalanceQuery,
|
|
1932
|
+
nativeBalance: nativeBalanceQuery.data,
|
|
1933
|
+
erc20Balances: erc20BalanceQuery.data
|
|
1331
1934
|
};
|
|
1332
1935
|
}
|
|
1333
1936
|
|
|
1334
1937
|
// src/hooks/useReceipt.tsx
|
|
1335
|
-
import { useState as
|
|
1336
|
-
import { useQuery as
|
|
1337
|
-
import { createPublicClient, defineChain, http } from "viem";
|
|
1938
|
+
import { useState as useState9, useCallback as useCallback4, useEffect as useEffect8 } from "react";
|
|
1939
|
+
import { useQuery as useQuery4 } from "@tanstack/react-query";
|
|
1940
|
+
import { createPublicClient as createPublicClient4, defineChain as defineChain2, http as http4 } from "viem";
|
|
1338
1941
|
var CACHE_TTL = 86400 * 30 * 1e3;
|
|
1339
1942
|
var MAX_CACHE_SIZE = 500;
|
|
1340
1943
|
var STORAGE_KEY = "match_receipt_logs";
|
|
1341
1944
|
function useReceiptCache() {
|
|
1342
|
-
const [cache, setCache] =
|
|
1945
|
+
const [cache, setCache] = useState9(/* @__PURE__ */ new Map());
|
|
1343
1946
|
const isLocalStorageAvailable = (() => {
|
|
1344
1947
|
try {
|
|
1345
1948
|
const testKey = "__test__";
|
|
@@ -1350,7 +1953,7 @@ function useReceiptCache() {
|
|
|
1350
1953
|
return false;
|
|
1351
1954
|
}
|
|
1352
1955
|
})();
|
|
1353
|
-
|
|
1956
|
+
useEffect8(() => {
|
|
1354
1957
|
if (isLocalStorageAvailable) {
|
|
1355
1958
|
try {
|
|
1356
1959
|
const storedData = localStorage.getItem(STORAGE_KEY);
|
|
@@ -1441,8 +2044,8 @@ function useReceipt({
|
|
|
1441
2044
|
const { list } = useMatchChain();
|
|
1442
2045
|
const cache = useReceiptCache();
|
|
1443
2046
|
const chain = list?.find((item) => item.id === chainId);
|
|
1444
|
-
const [shouldRefetch, setShouldRefetch] =
|
|
1445
|
-
const query =
|
|
2047
|
+
const [shouldRefetch, setShouldRefetch] = useState9(true);
|
|
2048
|
+
const query = useQuery4({
|
|
1446
2049
|
queryKey: ["match-tx-receipt", hash, chain],
|
|
1447
2050
|
queryFn: async () => {
|
|
1448
2051
|
if (!chain || !hash) return false;
|
|
@@ -1451,12 +2054,11 @@ function useReceipt({
|
|
|
1451
2054
|
return cache.get(cacheKey);
|
|
1452
2055
|
}
|
|
1453
2056
|
try {
|
|
1454
|
-
const publicClient =
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
transport: http()
|
|
2057
|
+
const publicClient = createPublicClient4({
|
|
2058
|
+
chain: defineChain2(chain),
|
|
2059
|
+
transport: http4()
|
|
1458
2060
|
});
|
|
1459
|
-
const receipt = await publicClient.
|
|
2061
|
+
const receipt = await publicClient.getTransactionReceipt({ hash });
|
|
1460
2062
|
if (!receipt) {
|
|
1461
2063
|
return false;
|
|
1462
2064
|
}
|
|
@@ -1468,7 +2070,151 @@ function useReceipt({
|
|
|
1468
2070
|
},
|
|
1469
2071
|
refetchInterval: shouldRefetch ? 1e4 : false
|
|
1470
2072
|
});
|
|
1471
|
-
|
|
2073
|
+
useEffect8(() => {
|
|
2074
|
+
if (query.data) {
|
|
2075
|
+
setShouldRefetch(false);
|
|
2076
|
+
}
|
|
2077
|
+
}, [query.data]);
|
|
2078
|
+
return query;
|
|
2079
|
+
}
|
|
2080
|
+
|
|
2081
|
+
// src/hooks/useTransaction.tsx
|
|
2082
|
+
import { useState as useState10, useCallback as useCallback5, useEffect as useEffect9 } from "react";
|
|
2083
|
+
import { useQuery as useQuery5 } from "@tanstack/react-query";
|
|
2084
|
+
import { createPublicClient as createPublicClient5, defineChain as defineChain3, http as http5 } from "viem";
|
|
2085
|
+
var CACHE_TTL2 = 86400 * 30 * 1e3;
|
|
2086
|
+
var MAX_CACHE_SIZE2 = 500;
|
|
2087
|
+
var STORAGE_KEY2 = "match_transaction_logs";
|
|
2088
|
+
function useTransactionCache() {
|
|
2089
|
+
const [cache, setCache] = useState10(/* @__PURE__ */ new Map());
|
|
2090
|
+
const isLocalStorageAvailable = (() => {
|
|
2091
|
+
try {
|
|
2092
|
+
const testKey = "__test__";
|
|
2093
|
+
localStorage.setItem(testKey, "1");
|
|
2094
|
+
localStorage.removeItem(testKey);
|
|
2095
|
+
return true;
|
|
2096
|
+
} catch (e) {
|
|
2097
|
+
return false;
|
|
2098
|
+
}
|
|
2099
|
+
})();
|
|
2100
|
+
useEffect9(() => {
|
|
2101
|
+
if (isLocalStorageAvailable) {
|
|
2102
|
+
try {
|
|
2103
|
+
const storedData = localStorage.getItem(STORAGE_KEY2);
|
|
2104
|
+
if (storedData) {
|
|
2105
|
+
try {
|
|
2106
|
+
const parsed = JSON.parse(storedData);
|
|
2107
|
+
const now = Date.now();
|
|
2108
|
+
const validEntries = Object.entries(parsed).filter(([_, entry]) => typeof entry === "object" && entry !== null && "timestamp" in entry && now - entry.timestamp <= CACHE_TTL2).map(([key, entry]) => [key, entry]);
|
|
2109
|
+
setCache(new Map(validEntries));
|
|
2110
|
+
} catch (e) {
|
|
2111
|
+
console.error("Failed to parse cache from localStorage:", e);
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
} catch (e) {
|
|
2115
|
+
console.error("Failed to load cache from localStorage:", e);
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2118
|
+
}, []);
|
|
2119
|
+
const updateLocalStorage = useCallback5((updatedCache) => {
|
|
2120
|
+
if (isLocalStorageAvailable) {
|
|
2121
|
+
try {
|
|
2122
|
+
const storedData = localStorage.getItem(STORAGE_KEY2);
|
|
2123
|
+
let parsed = {};
|
|
2124
|
+
if (storedData) {
|
|
2125
|
+
parsed = JSON.parse(storedData);
|
|
2126
|
+
}
|
|
2127
|
+
updatedCache.forEach((entry, key) => {
|
|
2128
|
+
parsed[key] = entry;
|
|
2129
|
+
});
|
|
2130
|
+
localStorage.setItem(STORAGE_KEY2, JSON.stringify(parsed));
|
|
2131
|
+
} catch (e) {
|
|
2132
|
+
console.error("Failed to update localStorage:", e);
|
|
2133
|
+
}
|
|
2134
|
+
}
|
|
2135
|
+
}, []);
|
|
2136
|
+
const set = useCallback5((key, value) => {
|
|
2137
|
+
const now = Date.now();
|
|
2138
|
+
const newCache = new Map(cache);
|
|
2139
|
+
newCache.forEach((entry, k) => {
|
|
2140
|
+
if (now - entry.timestamp > CACHE_TTL2) {
|
|
2141
|
+
newCache.delete(k);
|
|
2142
|
+
}
|
|
2143
|
+
});
|
|
2144
|
+
if (newCache.size >= MAX_CACHE_SIZE2) {
|
|
2145
|
+
const firstKey = newCache.keys().next().value;
|
|
2146
|
+
if (firstKey !== void 0) {
|
|
2147
|
+
newCache.delete(firstKey);
|
|
2148
|
+
}
|
|
2149
|
+
}
|
|
2150
|
+
newCache.set(key, { value, timestamp: now });
|
|
2151
|
+
setCache(newCache);
|
|
2152
|
+
updateLocalStorage(newCache);
|
|
2153
|
+
}, [cache, updateLocalStorage]);
|
|
2154
|
+
const get = useCallback5((key) => {
|
|
2155
|
+
const entry = cache.get(key);
|
|
2156
|
+
if (entry) {
|
|
2157
|
+
if (Date.now() - entry.timestamp > CACHE_TTL2) {
|
|
2158
|
+
const newCache = new Map(cache);
|
|
2159
|
+
newCache.delete(key);
|
|
2160
|
+
setCache(newCache);
|
|
2161
|
+
updateLocalStorage(newCache);
|
|
2162
|
+
return void 0;
|
|
2163
|
+
}
|
|
2164
|
+
return entry.value;
|
|
2165
|
+
}
|
|
2166
|
+
return void 0;
|
|
2167
|
+
}, [cache, updateLocalStorage]);
|
|
2168
|
+
const del = useCallback5((key) => {
|
|
2169
|
+
if (cache.has(key)) {
|
|
2170
|
+
const newCache = new Map(cache);
|
|
2171
|
+
newCache.delete(key);
|
|
2172
|
+
setCache(newCache);
|
|
2173
|
+
updateLocalStorage(newCache);
|
|
2174
|
+
}
|
|
2175
|
+
}, [cache, updateLocalStorage]);
|
|
2176
|
+
const clear = useCallback5(() => {
|
|
2177
|
+
setCache(/* @__PURE__ */ new Map());
|
|
2178
|
+
if (isLocalStorageAvailable) {
|
|
2179
|
+
localStorage.removeItem(STORAGE_KEY2);
|
|
2180
|
+
}
|
|
2181
|
+
}, [isLocalStorageAvailable]);
|
|
2182
|
+
return { set, get, del, clear };
|
|
2183
|
+
}
|
|
2184
|
+
function useTransaction({
|
|
2185
|
+
chainId,
|
|
2186
|
+
hash
|
|
2187
|
+
}) {
|
|
2188
|
+
const { list } = useMatchChain();
|
|
2189
|
+
const cache = useTransactionCache();
|
|
2190
|
+
const chain = list?.find((item) => item.id === chainId);
|
|
2191
|
+
const [shouldRefetch, setShouldRefetch] = useState10(true);
|
|
2192
|
+
const query = useQuery5({
|
|
2193
|
+
queryKey: ["match-tx-transaction", hash, chain],
|
|
2194
|
+
queryFn: async () => {
|
|
2195
|
+
if (!chain || !hash) return false;
|
|
2196
|
+
const cacheKey = `${chain.id}-${hash}`;
|
|
2197
|
+
if (cache.get(cacheKey)) {
|
|
2198
|
+
return cache.get(cacheKey);
|
|
2199
|
+
}
|
|
2200
|
+
try {
|
|
2201
|
+
const publicClient = createPublicClient5({
|
|
2202
|
+
chain: defineChain3(chain),
|
|
2203
|
+
transport: http5()
|
|
2204
|
+
});
|
|
2205
|
+
const transaction = await publicClient.getTransaction({ hash });
|
|
2206
|
+
if (!transaction) {
|
|
2207
|
+
return false;
|
|
2208
|
+
}
|
|
2209
|
+
cache.set(cacheKey, transaction);
|
|
2210
|
+
return transaction;
|
|
2211
|
+
} catch (e) {
|
|
2212
|
+
return false;
|
|
2213
|
+
}
|
|
2214
|
+
},
|
|
2215
|
+
refetchInterval: shouldRefetch ? 1e4 : false
|
|
2216
|
+
});
|
|
2217
|
+
useEffect9(() => {
|
|
1472
2218
|
if (query.data) {
|
|
1473
2219
|
setShouldRefetch(false);
|
|
1474
2220
|
}
|
|
@@ -1476,28 +2222,113 @@ function useReceipt({
|
|
|
1476
2222
|
return query;
|
|
1477
2223
|
}
|
|
1478
2224
|
|
|
2225
|
+
// src/store/useModalStore.ts
|
|
2226
|
+
import { create as create5 } from "zustand";
|
|
2227
|
+
|
|
2228
|
+
// src/hooks/useConfig.tsx
|
|
2229
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
2230
|
+
var DEFAULT_WALLET_METHODS = ["evm", "sol", "btc", "tron", "ton"];
|
|
2231
|
+
var WALLET_METHODS = ["evm", "sol", "btc", "tron", "ton"];
|
|
2232
|
+
function useWalletConfig() {
|
|
2233
|
+
const isDownMd = useDownMd();
|
|
2234
|
+
const walletMap = {
|
|
2235
|
+
evm: {
|
|
2236
|
+
icon: /* @__PURE__ */ jsx8(EVMDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2237
|
+
activeIcon: /* @__PURE__ */ jsx8(EVMLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2238
|
+
name: "EVM",
|
|
2239
|
+
method: "evm"
|
|
2240
|
+
},
|
|
2241
|
+
sol: {
|
|
2242
|
+
icon: /* @__PURE__ */ jsx8(SOLDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2243
|
+
activeIcon: /* @__PURE__ */ jsx8(SOLLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2244
|
+
name: "SOL",
|
|
2245
|
+
method: "sol"
|
|
2246
|
+
},
|
|
2247
|
+
btc: {
|
|
2248
|
+
icon: /* @__PURE__ */ jsx8(BTCDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2249
|
+
activeIcon: /* @__PURE__ */ jsx8(BTCLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2250
|
+
name: "BTC",
|
|
2251
|
+
method: "btc"
|
|
2252
|
+
},
|
|
2253
|
+
tron: {
|
|
2254
|
+
icon: /* @__PURE__ */ jsx8(TRXDarkIcon, { size: isDownMd ? 36 : 40 }),
|
|
2255
|
+
activeIcon: /* @__PURE__ */ jsx8(TRXLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2256
|
+
name: "TRON",
|
|
2257
|
+
method: "tron"
|
|
2258
|
+
},
|
|
2259
|
+
ton: {
|
|
2260
|
+
icon: /* @__PURE__ */ jsx8(TonLightIcon, { size: isDownMd ? 36 : 40 }),
|
|
2261
|
+
activeIcon: /* @__PURE__ */ jsx8(TonLightIcon2, { size: isDownMd ? 36 : 40 }),
|
|
2262
|
+
name: "TON",
|
|
2263
|
+
method: "ton"
|
|
2264
|
+
}
|
|
2265
|
+
};
|
|
2266
|
+
return {
|
|
2267
|
+
walletMap
|
|
2268
|
+
};
|
|
2269
|
+
}
|
|
2270
|
+
|
|
2271
|
+
// src/store/useModalStore.ts
|
|
2272
|
+
var useSOLModalStore = create5((set) => ({
|
|
2273
|
+
isOpen: false,
|
|
2274
|
+
type: "",
|
|
2275
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2276
|
+
close: () => set({ isOpen: false })
|
|
2277
|
+
}));
|
|
2278
|
+
var useTRONModalStore = create5((set) => ({
|
|
2279
|
+
isOpen: false,
|
|
2280
|
+
type: "",
|
|
2281
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2282
|
+
close: () => set({ isOpen: false })
|
|
2283
|
+
}));
|
|
2284
|
+
var useTONModalStore = create5((set) => ({
|
|
2285
|
+
isOpen: false,
|
|
2286
|
+
type: "",
|
|
2287
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2288
|
+
close: () => set({ isOpen: false })
|
|
2289
|
+
}));
|
|
2290
|
+
var useBTCModalStore = create5((set) => ({
|
|
2291
|
+
isOpen: false,
|
|
2292
|
+
type: "",
|
|
2293
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2294
|
+
close: () => set({ isOpen: false })
|
|
2295
|
+
}));
|
|
2296
|
+
var useCEXBindModalStore = create5((set) => ({
|
|
2297
|
+
type: "",
|
|
2298
|
+
isOpen: false,
|
|
2299
|
+
open: (type) => set({ isOpen: true, type }),
|
|
2300
|
+
close: () => set({ isOpen: false })
|
|
2301
|
+
}));
|
|
2302
|
+
var useWalletModalStore = create5((set) => ({
|
|
2303
|
+
isOpen: false,
|
|
2304
|
+
type: "",
|
|
2305
|
+
methods: [],
|
|
2306
|
+
open: (type, methods = DEFAULT_WALLET_METHODS) => set({ isOpen: true, type, methods }),
|
|
2307
|
+
close: () => set({ isOpen: false })
|
|
2308
|
+
}));
|
|
2309
|
+
|
|
1479
2310
|
// src/components/CEXBindModal/index.tsx
|
|
1480
|
-
import { useEffect as
|
|
1481
|
-
import { FormattedMessage as
|
|
1482
|
-
import { jsx as
|
|
2311
|
+
import { useEffect as useEffect10, useMemo as useMemo6, useState as useState11 } from "react";
|
|
2312
|
+
import { FormattedMessage as FormattedMessage4, useIntl as useIntl4 } from "react-intl";
|
|
2313
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1483
2314
|
function CEXBindModal({
|
|
1484
2315
|
onClose,
|
|
1485
2316
|
type,
|
|
1486
2317
|
isOpen = false,
|
|
1487
2318
|
...props
|
|
1488
2319
|
}) {
|
|
1489
|
-
const intl =
|
|
2320
|
+
const intl = useIntl4();
|
|
1490
2321
|
const { events } = useMatch();
|
|
1491
|
-
const [APIPassphrase, setAPIPassphrase] =
|
|
2322
|
+
const [APIPassphrase, setAPIPassphrase] = useState11("");
|
|
1492
2323
|
const { refreshOverview } = useUserInfo();
|
|
1493
|
-
const [loading, setLoading] =
|
|
1494
|
-
const [key, setKey] =
|
|
1495
|
-
const [secret, setSecret] =
|
|
1496
|
-
const [error, setError] =
|
|
1497
|
-
const needPassphrase =
|
|
2324
|
+
const [loading, setLoading] = useState11(false);
|
|
2325
|
+
const [key, setKey] = useState11("");
|
|
2326
|
+
const [secret, setSecret] = useState11("");
|
|
2327
|
+
const [error, setError] = useState11("");
|
|
2328
|
+
const needPassphrase = useMemo6(() => {
|
|
1498
2329
|
return ["bitget", "okx"].includes(type.toLowerCase());
|
|
1499
2330
|
}, [type]);
|
|
1500
|
-
|
|
2331
|
+
useEffect10(() => {
|
|
1501
2332
|
if (isOpen) {
|
|
1502
2333
|
setSecret("");
|
|
1503
2334
|
setKey("");
|
|
@@ -1534,20 +2365,20 @@ function CEXBindModal({
|
|
|
1534
2365
|
setLoading(false);
|
|
1535
2366
|
}
|
|
1536
2367
|
};
|
|
1537
|
-
return /* @__PURE__ */
|
|
2368
|
+
return /* @__PURE__ */ jsx9(ModalWithHeader, { showClose: true, isOpen, onClose, title: intl.formatMessage({
|
|
1538
2369
|
id: "CEXBindTitle"
|
|
1539
2370
|
}, {
|
|
1540
2371
|
type
|
|
1541
|
-
}), ...props, children: /* @__PURE__ */
|
|
1542
|
-
/* @__PURE__ */
|
|
1543
|
-
/* @__PURE__ */
|
|
1544
|
-
/* @__PURE__ */
|
|
1545
|
-
/* @__PURE__ */
|
|
1546
|
-
/* @__PURE__ */
|
|
2372
|
+
}), ...props, children: /* @__PURE__ */ jsxs7("div", { className: "matchid-cex-modal", children: [
|
|
2373
|
+
/* @__PURE__ */ jsxs7("div", { children: [
|
|
2374
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindAttention" }) }),
|
|
2375
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips1" }) }),
|
|
2376
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips2" }) }),
|
|
2377
|
+
/* @__PURE__ */ jsx9("p", { children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "CEXBindTips3" }) })
|
|
1547
2378
|
] }),
|
|
1548
|
-
/* @__PURE__ */
|
|
2379
|
+
/* @__PURE__ */ jsx9(Field, { label: intl.formatMessage({
|
|
1549
2380
|
id: "CEXBindApiKey"
|
|
1550
|
-
}), children: /* @__PURE__ */
|
|
2381
|
+
}), children: /* @__PURE__ */ jsx9(
|
|
1551
2382
|
Input,
|
|
1552
2383
|
{
|
|
1553
2384
|
value: key,
|
|
@@ -1555,9 +2386,9 @@ function CEXBindModal({
|
|
|
1555
2386
|
placeholder: "**** **** ****"
|
|
1556
2387
|
}
|
|
1557
2388
|
) }),
|
|
1558
|
-
/* @__PURE__ */
|
|
2389
|
+
/* @__PURE__ */ jsx9(Field, { label: intl.formatMessage({
|
|
1559
2390
|
id: "CEXBindApiSecretKey"
|
|
1560
|
-
}), error: !needPassphrase && error, children: /* @__PURE__ */
|
|
2391
|
+
}), error: !needPassphrase && error, children: /* @__PURE__ */ jsx9(
|
|
1561
2392
|
Input,
|
|
1562
2393
|
{
|
|
1563
2394
|
value: secret,
|
|
@@ -1565,9 +2396,9 @@ function CEXBindModal({
|
|
|
1565
2396
|
placeholder: "**** **** ****"
|
|
1566
2397
|
}
|
|
1567
2398
|
) }),
|
|
1568
|
-
needPassphrase && /* @__PURE__ */
|
|
2399
|
+
needPassphrase && /* @__PURE__ */ jsx9(Field, { error, label: intl.formatMessage({
|
|
1569
2400
|
id: "CEXBindApiPassphrase"
|
|
1570
|
-
}), children: /* @__PURE__ */
|
|
2401
|
+
}), children: /* @__PURE__ */ jsx9(
|
|
1571
2402
|
Input,
|
|
1572
2403
|
{
|
|
1573
2404
|
value: APIPassphrase,
|
|
@@ -1575,7 +2406,7 @@ function CEXBindModal({
|
|
|
1575
2406
|
placeholder: "**** **** ****"
|
|
1576
2407
|
}
|
|
1577
2408
|
) }),
|
|
1578
|
-
/* @__PURE__ */
|
|
2409
|
+
/* @__PURE__ */ jsx9(
|
|
1579
2410
|
Button,
|
|
1580
2411
|
{
|
|
1581
2412
|
onClick: SubmitApi,
|
|
@@ -1583,14 +2414,14 @@ function CEXBindModal({
|
|
|
1583
2414
|
block: true,
|
|
1584
2415
|
loading,
|
|
1585
2416
|
disabled: !key || !secret,
|
|
1586
|
-
children: /* @__PURE__ */
|
|
2417
|
+
children: /* @__PURE__ */ jsx9(FormattedMessage4, { id: "continue" })
|
|
1587
2418
|
}
|
|
1588
2419
|
)
|
|
1589
2420
|
] }) });
|
|
1590
2421
|
}
|
|
1591
2422
|
|
|
1592
2423
|
// src/context/BusinessProvider.tsx
|
|
1593
|
-
import { Fragment, jsx as
|
|
2424
|
+
import { Fragment, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1594
2425
|
function BusinessProvider({ children }) {
|
|
1595
2426
|
const { overview, token } = useUserInfo();
|
|
1596
2427
|
const { type: SOLType, isOpen: SOLIsOpen, close: SOLClose } = useSOLModalStore();
|
|
@@ -1599,13 +2430,12 @@ function BusinessProvider({ children }) {
|
|
|
1599
2430
|
const { type: BTCType, isOpen: BTCIsOpen, close: BTCClose } = useBTCModalStore();
|
|
1600
2431
|
const { type: CEXType, isOpen: CEXIsOpen, close: CEXClose } = useCEXBindModalStore();
|
|
1601
2432
|
const WalletModalStore = useWalletModalStore();
|
|
1602
|
-
const { close: HashPanelClose, ...hashPanelProps } = useHashPanelStore();
|
|
1603
2433
|
const walletModalClose = (func) => {
|
|
1604
2434
|
WalletModalStore.close();
|
|
1605
2435
|
func();
|
|
1606
2436
|
};
|
|
1607
|
-
return /* @__PURE__ */
|
|
1608
|
-
/* @__PURE__ */
|
|
2437
|
+
return /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
2438
|
+
/* @__PURE__ */ jsx10(
|
|
1609
2439
|
SOLModal,
|
|
1610
2440
|
{
|
|
1611
2441
|
isOpen: SOLIsOpen && (SOLType == "login" && !overview && !token || SOLType == "bind" && !!token && !!overview),
|
|
@@ -1615,7 +2445,7 @@ function BusinessProvider({ children }) {
|
|
|
1615
2445
|
zIndex: 199
|
|
1616
2446
|
}
|
|
1617
2447
|
),
|
|
1618
|
-
/* @__PURE__ */
|
|
2448
|
+
/* @__PURE__ */ jsx10(
|
|
1619
2449
|
TRONModal,
|
|
1620
2450
|
{
|
|
1621
2451
|
isOpen: TRONIsOpen && (TRONType == "login" && !overview && !token || TRONType == "bind" && !!token && !!overview),
|
|
@@ -1625,7 +2455,7 @@ function BusinessProvider({ children }) {
|
|
|
1625
2455
|
zIndex: 199
|
|
1626
2456
|
}
|
|
1627
2457
|
),
|
|
1628
|
-
/* @__PURE__ */
|
|
2458
|
+
/* @__PURE__ */ jsx10(
|
|
1629
2459
|
TONModal,
|
|
1630
2460
|
{
|
|
1631
2461
|
isOpen: TONIsOpen && (TONType == "login" && !overview && !token || TONType == "bind" && !!token && !!overview),
|
|
@@ -1635,7 +2465,7 @@ function BusinessProvider({ children }) {
|
|
|
1635
2465
|
zIndex: 199
|
|
1636
2466
|
}
|
|
1637
2467
|
),
|
|
1638
|
-
/* @__PURE__ */
|
|
2468
|
+
/* @__PURE__ */ jsx10(
|
|
1639
2469
|
BTCModal,
|
|
1640
2470
|
{
|
|
1641
2471
|
isOpen: BTCIsOpen && (BTCType == "login" && !overview && !token || BTCType == "bind" && !!token && !!overview),
|
|
@@ -1645,7 +2475,7 @@ function BusinessProvider({ children }) {
|
|
|
1645
2475
|
zIndex: 199
|
|
1646
2476
|
}
|
|
1647
2477
|
),
|
|
1648
|
-
/* @__PURE__ */
|
|
2478
|
+
/* @__PURE__ */ jsx10(
|
|
1649
2479
|
CEXBindModal,
|
|
1650
2480
|
{
|
|
1651
2481
|
isOpen: CEXIsOpen && (!!token && !!overview),
|
|
@@ -1654,8 +2484,7 @@ function BusinessProvider({ children }) {
|
|
|
1654
2484
|
zIndex: 199
|
|
1655
2485
|
}
|
|
1656
2486
|
),
|
|
1657
|
-
/* @__PURE__ */
|
|
1658
|
-
/* @__PURE__ */ jsx8(
|
|
2487
|
+
/* @__PURE__ */ jsx10(
|
|
1659
2488
|
WalletModal,
|
|
1660
2489
|
{
|
|
1661
2490
|
isOpen: WalletModalStore.isOpen && (WalletModalStore.type == "login" && !overview && !token || WalletModalStore.type == "bind" && !!token && !!overview),
|
|
@@ -1670,14 +2499,14 @@ function BusinessProvider({ children }) {
|
|
|
1670
2499
|
}
|
|
1671
2500
|
|
|
1672
2501
|
// src/context/index.tsx
|
|
1673
|
-
import { jsx as
|
|
2502
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1674
2503
|
var Providers = ({ children }) => {
|
|
1675
|
-
return /* @__PURE__ */
|
|
2504
|
+
return /* @__PURE__ */ jsx11(ToastProvider, { children: /* @__PURE__ */ jsx11(ModalProvider, { children: /* @__PURE__ */ jsx11(BusinessProvider, { children }) }) });
|
|
1676
2505
|
};
|
|
1677
2506
|
var context_default = Providers;
|
|
1678
2507
|
|
|
1679
2508
|
// src/hooks/useWalletInit.ts
|
|
1680
|
-
import { useEffect as
|
|
2509
|
+
import { useEffect as useEffect11, useRef as useRef2 } from "react";
|
|
1681
2510
|
|
|
1682
2511
|
// src/utils/wallet.ts
|
|
1683
2512
|
var sendMessage = ({ method, data, resolve, reject, timeout }) => {
|
|
@@ -1710,11 +2539,11 @@ function useWalletInit({
|
|
|
1710
2539
|
}) {
|
|
1711
2540
|
const { endpoints, token, overview, setWallet, wallet, appid, locale, refreshOverview } = useLocalStore_default();
|
|
1712
2541
|
const { setWalletReady, walletReady } = useStore_default();
|
|
1713
|
-
const iframeReadyRef =
|
|
1714
|
-
|
|
2542
|
+
const iframeReadyRef = useRef2(walletReady);
|
|
2543
|
+
useEffect11(() => {
|
|
1715
2544
|
setWallet(config);
|
|
1716
2545
|
}, [config]);
|
|
1717
|
-
|
|
2546
|
+
useEffect11(() => {
|
|
1718
2547
|
matchlog_default.log("sdk.mpc.status", walletReady, iframeReadyRef.current);
|
|
1719
2548
|
iframeReadyRef.current = walletReady;
|
|
1720
2549
|
if (iframeReadyRef.current) {
|
|
@@ -1731,7 +2560,7 @@ function useWalletInit({
|
|
|
1731
2560
|
onReady();
|
|
1732
2561
|
}
|
|
1733
2562
|
}, [walletReady]);
|
|
1734
|
-
|
|
2563
|
+
useEffect11(() => {
|
|
1735
2564
|
if (!endpoints.auth || !appid || !token || !config) {
|
|
1736
2565
|
const existingIframe = getWalletIframe();
|
|
1737
2566
|
if (existingIframe) {
|
|
@@ -1831,7 +2660,7 @@ function useWalletInit({
|
|
|
1831
2660
|
}
|
|
1832
2661
|
}
|
|
1833
2662
|
}, [endpoints.auth, appid, token, config]);
|
|
1834
|
-
|
|
2663
|
+
useEffect11(() => {
|
|
1835
2664
|
const messageHandle = async (e) => {
|
|
1836
2665
|
if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {
|
|
1837
2666
|
return;
|
|
@@ -1912,7 +2741,7 @@ function useWalletInit({
|
|
|
1912
2741
|
}
|
|
1913
2742
|
|
|
1914
2743
|
// src/hooks/useInit.tsx
|
|
1915
|
-
import { useEffect as
|
|
2744
|
+
import { useEffect as useEffect12, useRef as useRef3 } from "react";
|
|
1916
2745
|
function useInit({
|
|
1917
2746
|
theme,
|
|
1918
2747
|
appid,
|
|
@@ -1932,23 +2761,23 @@ function useInit({
|
|
|
1932
2761
|
locale: realLocale
|
|
1933
2762
|
} = useLocalStore_default();
|
|
1934
2763
|
const walletModalStore = useWalletModalStore();
|
|
1935
|
-
const overviewLoadingRef =
|
|
2764
|
+
const overviewLoadingRef = useRef3(false);
|
|
1936
2765
|
const searchParams = new URLSearchParams(window.location.search);
|
|
1937
2766
|
const matchToken = searchParams.get("matchToken");
|
|
1938
2767
|
const realEndpoints = endpoints || env_default.endpoints;
|
|
1939
|
-
|
|
2768
|
+
useEffect12(() => {
|
|
1940
2769
|
setTheme(theme);
|
|
1941
2770
|
}, [theme]);
|
|
1942
|
-
|
|
2771
|
+
useEffect12(() => {
|
|
1943
2772
|
setAppid(appid);
|
|
1944
2773
|
}, [appid]);
|
|
1945
|
-
|
|
2774
|
+
useEffect12(() => {
|
|
1946
2775
|
setEndpoints(realEndpoints);
|
|
1947
2776
|
}, [realEndpoints]);
|
|
1948
|
-
|
|
2777
|
+
useEffect12(() => {
|
|
1949
2778
|
setLocale(locale || "en");
|
|
1950
2779
|
}, [locale]);
|
|
1951
|
-
|
|
2780
|
+
useEffect12(() => {
|
|
1952
2781
|
if (matchToken) {
|
|
1953
2782
|
const tokenData = JSON.parse(atob(matchToken));
|
|
1954
2783
|
if (tokenData && tokenData.mid && tokenData.token) {
|
|
@@ -1959,7 +2788,7 @@ function useInit({
|
|
|
1959
2788
|
}
|
|
1960
2789
|
}
|
|
1961
2790
|
}, [matchToken]);
|
|
1962
|
-
|
|
2791
|
+
useEffect12(() => {
|
|
1963
2792
|
const onLoginMessage = (event) => {
|
|
1964
2793
|
const res = event.data;
|
|
1965
2794
|
if (res.event === "login" && res.data && (res.data.token || res.data.token_type && res.data.access_token)) {
|
|
@@ -1996,7 +2825,7 @@ function useInit({
|
|
|
1996
2825
|
overviewLoadingRef.current = false;
|
|
1997
2826
|
}
|
|
1998
2827
|
};
|
|
1999
|
-
|
|
2828
|
+
useEffect12(() => {
|
|
2000
2829
|
if (token) {
|
|
2001
2830
|
loadOverview();
|
|
2002
2831
|
}
|
|
@@ -2079,7 +2908,35 @@ var en_default = {
|
|
|
2079
2908
|
CEXBindApiSecretKey: "API Secret Key",
|
|
2080
2909
|
CEXBindApiPassphrase: "API Passphrase",
|
|
2081
2910
|
cancel: "Cancel",
|
|
2082
|
-
walletLoading: "Wallet service is loading"
|
|
2911
|
+
walletLoading: "Wallet service is loading",
|
|
2912
|
+
tokenDetails: "Token Details",
|
|
2913
|
+
tokenAmountMin: "Amount must be greater than 0.",
|
|
2914
|
+
tokenAmountMax: "Insufficient balance.",
|
|
2915
|
+
tokenAddressError: "Invalid address.",
|
|
2916
|
+
amount: "Amount",
|
|
2917
|
+
amountPlaceholder: "Enter the Amount.",
|
|
2918
|
+
balance: "Balance",
|
|
2919
|
+
receiveTitle: "Received wallet address",
|
|
2920
|
+
receivePlaceholder: "Enter the Received wallet address.",
|
|
2921
|
+
next: "Next",
|
|
2922
|
+
copied: "Copied",
|
|
2923
|
+
receiveQrcode: "Receive by scanning the QR code",
|
|
2924
|
+
copyAddress: "Copy Address",
|
|
2925
|
+
tokenSmartContract: "Token Smart Contract",
|
|
2926
|
+
tokenSmartContractPlaceholder: "Enter the Token Smart Contract.",
|
|
2927
|
+
tokenSymbol: "Token Symbol",
|
|
2928
|
+
tokenSymbolPlaceholder: "Enter the Token Symbol.",
|
|
2929
|
+
tokenDecimals: "Decimals",
|
|
2930
|
+
tokenDecimalsPlaceholder: "Enter the Decimals.",
|
|
2931
|
+
import: "Import",
|
|
2932
|
+
receive: "Receive",
|
|
2933
|
+
customizedToken: "Customized Token",
|
|
2934
|
+
noMoreRecords: "There is no more Records here!",
|
|
2935
|
+
noRecords: "No Records here!",
|
|
2936
|
+
close: "Close",
|
|
2937
|
+
back: "Back",
|
|
2938
|
+
importSuccess: "Import Token Successfully",
|
|
2939
|
+
importFail: "Failed to import Token"
|
|
2083
2940
|
};
|
|
2084
2941
|
|
|
2085
2942
|
// src/i18n/zh.json
|
|
@@ -2131,7 +2988,35 @@ var zh_default = {
|
|
|
2131
2988
|
CEXBindApiSecretKey: "API \u79D8\u94A5",
|
|
2132
2989
|
CEXBindApiPassphrase: "API \u5BC6\u7801\u77ED\u8BED",
|
|
2133
2990
|
cancel: "\u53D6\u6D88",
|
|
2134
|
-
walletLoading: "\u94B1\u5305\u670D\u52A1\u6B63\u5728\u52A0\u8F7D"
|
|
2991
|
+
walletLoading: "\u94B1\u5305\u670D\u52A1\u6B63\u5728\u52A0\u8F7D",
|
|
2992
|
+
tokenDetails: "\u4EE3\u5E01\u8BE6\u60C5",
|
|
2993
|
+
tokenAmountMin: "\u91D1\u989D\u5FC5\u987B\u5927\u4E8E 0\u3002",
|
|
2994
|
+
tokenAmountMax: "\u4F59\u989D\u4E0D\u8DB3\u3002",
|
|
2995
|
+
tokenAddressError: "\u65E0\u6548\u7684\u5730\u5740\u3002",
|
|
2996
|
+
amount: "\u91D1\u989D",
|
|
2997
|
+
amountPlaceholder: "\u8BF7\u8F93\u5165\u91D1\u989D\u3002",
|
|
2998
|
+
balance: "\u4F59\u989D",
|
|
2999
|
+
receiveTitle: "\u63A5\u6536\u94B1\u5305\u5730\u5740",
|
|
3000
|
+
receivePlaceholder: "\u8BF7\u8F93\u5165\u63A5\u6536\u94B1\u5305\u5730\u5740\u3002",
|
|
3001
|
+
next: "\u4E0B\u4E00\u6B65",
|
|
3002
|
+
copied: "\u5DF2\u590D\u5236",
|
|
3003
|
+
receiveQrcode: "\u626B\u63CF QR \u7801\u63A5\u6536",
|
|
3004
|
+
copyAddress: "\u590D\u5236\u5730\u5740",
|
|
3005
|
+
tokenSmartContract: "\u4EE3\u5E01\u667A\u80FD\u5408\u7EA6",
|
|
3006
|
+
tokenSmartContractPlaceholder: "\u8BF7\u8F93\u5165\u4EE3\u5E01\u667A\u80FD\u5408\u7EA6\u3002",
|
|
3007
|
+
tokenSymbol: "\u4EE3\u5E01\u7B26\u53F7",
|
|
3008
|
+
tokenSymbolPlaceholder: "\u8BF7\u8F93\u5165\u4EE3\u5E01\u7B26\u53F7\u3002",
|
|
3009
|
+
tokenDecimals: "\u5C0F\u6570\u4F4D\u6570",
|
|
3010
|
+
tokenDecimalsPlaceholder: "\u8BF7\u8F93\u5165\u5C0F\u6570\u4F4D\u6570\u3002",
|
|
3011
|
+
import: "\u5BFC\u5165",
|
|
3012
|
+
receive: "\u63A5\u6536",
|
|
3013
|
+
customizedToken: "\u81EA\u5B9A\u4E49\u4EE3\u5E01",
|
|
3014
|
+
noMoreRecords: "\u6CA1\u6709\u66F4\u591A\u4EA4\u6613\u8BB0\u5F55\u4E86\uFF01",
|
|
3015
|
+
noRecords: "\u6682\u65E0\u4EA4\u6613\u8BB0\u5F55\uFF01",
|
|
3016
|
+
close: "\u5173\u95ED",
|
|
3017
|
+
back: "\u8FD4\u56DE",
|
|
3018
|
+
importSuccess: "\u6210\u529F\u5BFC\u5165\u4EE3\u5E01",
|
|
3019
|
+
importFail: "\u5BFC\u5165\u4EE3\u5E01\u5931\u8D25"
|
|
2135
3020
|
};
|
|
2136
3021
|
|
|
2137
3022
|
// src/i18n/tw.json
|
|
@@ -2183,7 +3068,35 @@ var tw_default = {
|
|
|
2183
3068
|
CEXBindApiSecretKey: "API \u5BC6\u9470",
|
|
2184
3069
|
CEXBindApiPassphrase: "API \u5BC6\u78BC\u77ED\u8A9E",
|
|
2185
3070
|
cancel: "\u53D6\u6D88",
|
|
2186
|
-
walletLoading: "\u9322\u5305\u670D\u52D9\u6B63\u5728\u52A0\u8F09"
|
|
3071
|
+
walletLoading: "\u9322\u5305\u670D\u52D9\u6B63\u5728\u52A0\u8F09",
|
|
3072
|
+
tokenDetails: "\u4EE3\u5E63\u8A73\u60C5",
|
|
3073
|
+
tokenAmountMin: "\u91D1\u984D\u5FC5\u9808\u5927\u65BC 0\u3002",
|
|
3074
|
+
tokenAmountMax: "\u9918\u984D\u4E0D\u8DB3\u3002",
|
|
3075
|
+
tokenAddressError: "\u7121\u6548\u7684\u5730\u5740\u3002",
|
|
3076
|
+
amount: "\u91D1\u984D",
|
|
3077
|
+
amountPlaceholder: "\u8ACB\u8F38\u5165\u91D1\u984D\u3002",
|
|
3078
|
+
balance: "\u9918\u984D",
|
|
3079
|
+
receiveTitle: "\u63A5\u6536\u9322\u5305\u5730\u5740",
|
|
3080
|
+
receivePlaceholder: "\u8ACB\u8F38\u5165\u63A5\u6536\u9322\u5305\u5730\u5740\u3002",
|
|
3081
|
+
next: "\u4E0B\u4E00\u6B65",
|
|
3082
|
+
copied: "\u5DF2\u8907\u88FD",
|
|
3083
|
+
receiveQrcode: "\u6383\u63CF QR \u78BC\u63A5\u6536",
|
|
3084
|
+
copyAddress: "\u8907\u88FD\u5730\u5740",
|
|
3085
|
+
tokenSmartContract: "\u4EE3\u5E63\u667A\u80FD\u5408\u7D04",
|
|
3086
|
+
tokenSmartContractPlaceholder: "\u8ACB\u8F38\u5165\u4EE3\u5E63\u667A\u80FD\u5408\u7D04\u3002",
|
|
3087
|
+
tokenSymbol: "\u4EE3\u5E63\u7B26\u865F",
|
|
3088
|
+
tokenSymbolPlaceholder: "\u8ACB\u8F38\u5165\u4EE3\u5E63\u7B26\u865F\u3002",
|
|
3089
|
+
tokenDecimals: "\u5C0F\u6578\u4F4D\u6578",
|
|
3090
|
+
tokenDecimalsPlaceholder: "\u8ACB\u8F38\u5165\u5C0F\u6578\u4F4D\u6578\u3002",
|
|
3091
|
+
import: "\u5C0E\u5165",
|
|
3092
|
+
receive: "\u63A5\u6536",
|
|
3093
|
+
customizedToken: "\u81EA\u5B9A\u7FA9\u4EE3\u5E63",
|
|
3094
|
+
noMoreRecords: "\u6C92\u6709\u66F4\u591A\u4EA4\u6613\u8A18\u9304\u4E86\uFF01",
|
|
3095
|
+
noRecords: "\u66AB\u7121\u4EA4\u6613\u8A18\u9304\uFF01",
|
|
3096
|
+
close: "\u95DC\u9589",
|
|
3097
|
+
back: "\u8FD4\u56DE",
|
|
3098
|
+
importSuccess: "\u6210\u529F\u532F\u5165\u4EE3\u5E63",
|
|
3099
|
+
importFail: "\u532F\u5165\u4EE3\u5E63\u5931\u6557"
|
|
2187
3100
|
};
|
|
2188
3101
|
|
|
2189
3102
|
// src/i18n/fr.json
|
|
@@ -2235,7 +3148,35 @@ var fr_default = {
|
|
|
2235
3148
|
CEXBindApiSecretKey: "Cl\xE9 Secr\xE8te API",
|
|
2236
3149
|
CEXBindApiPassphrase: "Phrase secr\xE8te API",
|
|
2237
3150
|
cancel: "Annuler",
|
|
2238
|
-
walletLoading: "Le service de portefeuille est en cours de chargement"
|
|
3151
|
+
walletLoading: "Le service de portefeuille est en cours de chargement",
|
|
3152
|
+
tokenDetails: "D\xE9tails du Token",
|
|
3153
|
+
tokenAmountMin: "Le montant doit \xEAtre sup\xE9rieur \xE0 0.",
|
|
3154
|
+
tokenAmountMax: "Solde insuffisant.",
|
|
3155
|
+
tokenAddressError: "Adresse invalide.",
|
|
3156
|
+
amount: "Montant",
|
|
3157
|
+
amountPlaceholder: "Entrez le montant.",
|
|
3158
|
+
balance: "Solde",
|
|
3159
|
+
receiveTitle: "Adresse du portefeuille re\xE7u",
|
|
3160
|
+
receivePlaceholder: "Entrez l'adresse du portefeuille re\xE7u.",
|
|
3161
|
+
next: "Suivant",
|
|
3162
|
+
copied: "Copi\xE9",
|
|
3163
|
+
receiveQrcode: "Recevoir en scannant le code QR",
|
|
3164
|
+
copyAddress: "Copier l'adresse",
|
|
3165
|
+
tokenSmartContract: "Contrat intelligent du Token",
|
|
3166
|
+
tokenSmartContractPlaceholder: "Entrez le contrat intelligent du Token.",
|
|
3167
|
+
tokenSymbol: "Symbole du Token",
|
|
3168
|
+
tokenSymbolPlaceholder: "Entrez le symbole du Token.",
|
|
3169
|
+
tokenDecimals: "D\xE9cimales",
|
|
3170
|
+
tokenDecimalsPlaceholder: "Entrez les d\xE9cimales.",
|
|
3171
|
+
import: "Importer",
|
|
3172
|
+
receive: "Recevoir",
|
|
3173
|
+
customizedToken: "Token personnalis\xE9",
|
|
3174
|
+
noMoreRecords: "Il n'y a plus d'enregistrements ici !",
|
|
3175
|
+
noRecords: "Il n'y a aucun enregistrement ici !",
|
|
3176
|
+
close: "Fermer",
|
|
3177
|
+
back: "Retour",
|
|
3178
|
+
importSuccess: "Importation du jeton r\xE9ussie",
|
|
3179
|
+
importFail: "\xC9chec de l'importation du jeton"
|
|
2239
3180
|
};
|
|
2240
3181
|
|
|
2241
3182
|
// src/i18n/ja.json
|
|
@@ -2287,7 +3228,35 @@ var ja_default = {
|
|
|
2287
3228
|
CEXBindApiSecretKey: "API \u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30AD\u30FC",
|
|
2288
3229
|
CEXBindApiPassphrase: "API \u30D1\u30B9\u30D5\u30EC\u30FC\u30BA",
|
|
2289
3230
|
cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
|
|
2290
|
-
walletLoading: "\u30A6\u30A9\u30EC\u30C3\u30C8\u30B5\u30FC\u30D3\u30B9\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059"
|
|
3231
|
+
walletLoading: "\u30A6\u30A9\u30EC\u30C3\u30C8\u30B5\u30FC\u30D3\u30B9\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059",
|
|
3232
|
+
tokenDetails: "\u30C8\u30FC\u30AF\u30F3\u306E\u8A73\u7D30",
|
|
3233
|
+
tokenAmountMin: "\u91D1\u984D\u306F0\u3088\u308A\u5927\u304D\u304F\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002",
|
|
3234
|
+
tokenAmountMax: "\u6B8B\u9AD8\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002",
|
|
3235
|
+
tokenAddressError: "\u7121\u52B9\u306A\u30A2\u30C9\u30EC\u30B9\u3067\u3059\u3002",
|
|
3236
|
+
amount: "\u91D1\u984D",
|
|
3237
|
+
amountPlaceholder: "\u91D1\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3238
|
+
balance: "\u6B8B\u9AD8",
|
|
3239
|
+
receiveTitle: "\u53D7\u53D6\u30A6\u30A9\u30EC\u30C3\u30C8\u30A2\u30C9\u30EC\u30B9",
|
|
3240
|
+
receivePlaceholder: "\u53D7\u53D6\u30A6\u30A9\u30EC\u30C3\u30C8\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3241
|
+
next: "\u6B21\u3078",
|
|
3242
|
+
copied: "\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",
|
|
3243
|
+
receiveQrcode: "QR\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u53D7\u3051\u53D6\u308B",
|
|
3244
|
+
copyAddress: "\u30A2\u30C9\u30EC\u30B9\u3092\u30B3\u30D4\u30FC",
|
|
3245
|
+
tokenSmartContract: "\u30C8\u30FC\u30AF\u30F3\u306E\u30B9\u30DE\u30FC\u30C8\u30B3\u30F3\u30C8\u30E9\u30AF\u30C8",
|
|
3246
|
+
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",
|
|
3247
|
+
tokenSymbol: "\u30C8\u30FC\u30AF\u30F3\u30B7\u30F3\u30DC\u30EB",
|
|
3248
|
+
tokenSymbolPlaceholder: "\u30C8\u30FC\u30AF\u30F3\u30B7\u30F3\u30DC\u30EB\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3249
|
+
tokenDecimals: "\u5C0F\u6570\u70B9",
|
|
3250
|
+
tokenDecimalsPlaceholder: "\u5C0F\u6570\u70B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
3251
|
+
import: "\u30A4\u30F3\u30DD\u30FC\u30C8",
|
|
3252
|
+
receive: "\u53D7\u3051\u53D6\u308B",
|
|
3253
|
+
customizedToken: "\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30C8\u30FC\u30AF\u30F3",
|
|
3254
|
+
noMoreRecords: "\u3053\u308C\u4EE5\u4E0A\u306E\u8A18\u9332\u306F\u3042\u308A\u307E\u305B\u3093\uFF01",
|
|
3255
|
+
noRecords: "\u8A18\u9332\u304C\u3042\u308A\u307E\u305B\u3093\uFF01",
|
|
3256
|
+
close: "\u9589\u3058\u308B",
|
|
3257
|
+
back: "\u623B\u308B",
|
|
3258
|
+
importSuccess: "\u30C8\u30FC\u30AF\u30F3\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
|
|
3259
|
+
importFail: "\u30C8\u30FC\u30AF\u30F3\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
|
|
2291
3260
|
};
|
|
2292
3261
|
|
|
2293
3262
|
// src/i18n/ko.json
|
|
@@ -2339,7 +3308,35 @@ var ko_default = {
|
|
|
2339
3308
|
CEXBindApiSecretKey: "API \uBE44\uBC00 \uD0A4",
|
|
2340
3309
|
CEXBindApiPassphrase: "API \uC554\uD638 \uAD6C\uBB38",
|
|
2341
3310
|
cancel: "\uCDE8\uC18C",
|
|
2342
|
-
walletLoading: "\uC9C0\uAC11 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911"
|
|
3311
|
+
walletLoading: "\uC9C0\uAC11 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",
|
|
3312
|
+
tokenDetails: "\uD1A0\uD070 \uC0C1\uC138\uC815\uBCF4",
|
|
3313
|
+
tokenAmountMin: "\uAE08\uC561\uC740 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4.",
|
|
3314
|
+
tokenAmountMax: "\uC794\uC561\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4.",
|
|
3315
|
+
tokenAddressError: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC8FC\uC18C\uC785\uB2C8\uB2E4.",
|
|
3316
|
+
amount: "\uAE08\uC561",
|
|
3317
|
+
amountPlaceholder: "\uAE08\uC561\uC744 \uC785\uB825\uD558\uC138\uC694.",
|
|
3318
|
+
balance: "\uC794\uC561",
|
|
3319
|
+
receiveTitle: "\uC218\uC2E0 \uC9C0\uAC11 \uC8FC\uC18C",
|
|
3320
|
+
receivePlaceholder: "\uC218\uC2E0 \uC9C0\uAC11 \uC8FC\uC18C\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3321
|
+
next: "\uB2E4\uC74C",
|
|
3322
|
+
copied: "\uBCF5\uC0AC\uB428",
|
|
3323
|
+
receiveQrcode: "QR \uCF54\uB4DC\uB97C \uC2A4\uCE94\uD558\uC5EC \uBC1B\uAE30",
|
|
3324
|
+
copyAddress: "\uC8FC\uC18C \uBCF5\uC0AC",
|
|
3325
|
+
tokenSmartContract: "\uD1A0\uD070 \uC2A4\uB9C8\uD2B8 \uCEE8\uD2B8\uB799\uD2B8",
|
|
3326
|
+
tokenSmartContractPlaceholder: "\uD1A0\uD070 \uC2A4\uB9C8\uD2B8 \uCEE8\uD2B8\uB799\uD2B8\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3327
|
+
tokenSymbol: "\uD1A0\uD070 \uC2EC\uBCFC",
|
|
3328
|
+
tokenSymbolPlaceholder: "\uD1A0\uD070 \uC2EC\uBCFC\uC744 \uC785\uB825\uD558\uC138\uC694.",
|
|
3329
|
+
tokenDecimals: "\uC18C\uC218\uC810 \uC790\uB9AC\uC218",
|
|
3330
|
+
tokenDecimalsPlaceholder: "\uC18C\uC218\uC810 \uC790\uB9AC\uC218\uB97C \uC785\uB825\uD558\uC138\uC694.",
|
|
3331
|
+
import: "\uAC00\uC838\uC624\uAE30",
|
|
3332
|
+
receive: "\uBC1B\uAE30",
|
|
3333
|
+
customizedToken: "\uB9DE\uCDA4\uD615 \uD1A0\uD070",
|
|
3334
|
+
noMoreRecords: "\uC5EC\uAE30\uC5D0 \uB354 \uC774\uC0C1 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4!",
|
|
3335
|
+
noRecords: "\uC5EC\uAE30\uC5D0 \uAE30\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4!",
|
|
3336
|
+
close: "\uB2EB\uAE30",
|
|
3337
|
+
back: "\uB4A4\uB85C",
|
|
3338
|
+
importSuccess: "\uD1A0\uD070\uC744 \uC131\uACF5\uC801\uC73C\uB85C \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4",
|
|
3339
|
+
importFail: "\uD1A0\uD070 \uAC00\uC838\uC624\uAE30\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4"
|
|
2343
3340
|
};
|
|
2344
3341
|
|
|
2345
3342
|
// src/i18n/vi.json
|
|
@@ -2391,7 +3388,35 @@ var vi_default = {
|
|
|
2391
3388
|
CEXBindApiSecretKey: "Kh\xF3a b\xED m\u1EADt API",
|
|
2392
3389
|
CEXBindApiPassphrase: "C\u1EE5m m\u1EADt kh\u1EA9u API",
|
|
2393
3390
|
cancel: "H\u1EE7y",
|
|
2394
|
-
walletLoading: "D\u1ECBch v\u1EE5 v\xED \u0111ang t\u1EA3i"
|
|
3391
|
+
walletLoading: "D\u1ECBch v\u1EE5 v\xED \u0111ang t\u1EA3i",
|
|
3392
|
+
tokenDetails: "Chi ti\u1EBFt Token",
|
|
3393
|
+
tokenAmountMin: "S\u1ED1 ti\u1EC1n ph\u1EA3i l\u1EDBn h\u01A1n 0.",
|
|
3394
|
+
tokenAmountMax: "S\u1ED1 d\u01B0 kh\xF4ng \u0111\u1EE7.",
|
|
3395
|
+
tokenAddressError: "\u0110\u1ECBa ch\u1EC9 kh\xF4ng h\u1EE3p l\u1EC7.",
|
|
3396
|
+
amount: "S\u1ED1 l\u01B0\u1EE3ng",
|
|
3397
|
+
amountPlaceholder: "Nh\u1EADp s\u1ED1 l\u01B0\u1EE3ng.",
|
|
3398
|
+
balance: "S\u1ED1 d\u01B0",
|
|
3399
|
+
receiveTitle: "\u0110\u1ECBa ch\u1EC9 v\xED nh\u1EADn",
|
|
3400
|
+
receivePlaceholder: "Nh\u1EADp \u0111\u1ECBa ch\u1EC9 v\xED nh\u1EADn.",
|
|
3401
|
+
next: "Ti\u1EBFp theo",
|
|
3402
|
+
copied: "\u0110\xE3 sao ch\xE9p",
|
|
3403
|
+
receiveQrcode: "Nh\u1EADn b\u1EB1ng c\xE1ch qu\xE9t m\xE3 QR",
|
|
3404
|
+
copyAddress: "Sao ch\xE9p \u0111\u1ECBa ch\u1EC9",
|
|
3405
|
+
tokenSmartContract: "H\u1EE3p \u0111\u1ED3ng th\xF4ng minh Token",
|
|
3406
|
+
tokenSmartContractPlaceholder: "Nh\u1EADp h\u1EE3p \u0111\u1ED3ng th\xF4ng minh Token.",
|
|
3407
|
+
tokenSymbol: "K\xFD hi\u1EC7u Token",
|
|
3408
|
+
tokenSymbolPlaceholder: "Nh\u1EADp k\xFD hi\u1EC7u Token.",
|
|
3409
|
+
tokenDecimals: "S\u1ED1 th\u1EADp ph\xE2n",
|
|
3410
|
+
tokenDecimalsPlaceholder: "Nh\u1EADp s\u1ED1 th\u1EADp ph\xE2n.",
|
|
3411
|
+
import: "Nh\u1EADp",
|
|
3412
|
+
receive: "Nh\u1EADn",
|
|
3413
|
+
customizedToken: "Token t\xF9y ch\u1EC9nh",
|
|
3414
|
+
noMoreRecords: "Kh\xF4ng c\xF2n b\u1EA3n ghi n\xE0o \u1EDF \u0111\xE2y!",
|
|
3415
|
+
noRecords: "Kh\xF4ng c\xF3 b\u1EA3n ghi n\xE0o \u1EDF \u0111\xE2y!",
|
|
3416
|
+
close: "\u0110\xF3ng",
|
|
3417
|
+
back: "Quay l\u1EA1i",
|
|
3418
|
+
importSuccess: "Nh\u1EADp Token th\xE0nh c\xF4ng",
|
|
3419
|
+
importFail: "Kh\xF4ng th\u1EC3 nh\u1EADp Token"
|
|
2395
3420
|
};
|
|
2396
3421
|
|
|
2397
3422
|
// src/i18n/es.json
|
|
@@ -2443,7 +3468,35 @@ var es_default = {
|
|
|
2443
3468
|
CEXBindApiSecretKey: "Clave Secreta API",
|
|
2444
3469
|
CEXBindApiPassphrase: "Frase de contrase\xF1a API",
|
|
2445
3470
|
cancel: "Cancelar",
|
|
2446
|
-
walletLoading: "El servicio de cartera se est\xE1 cargando"
|
|
3471
|
+
walletLoading: "El servicio de cartera se est\xE1 cargando",
|
|
3472
|
+
tokenDetails: "Detalles del Token",
|
|
3473
|
+
tokenAmountMin: "La cantidad debe ser mayor que 0.",
|
|
3474
|
+
tokenAmountMax: "Saldo insuficiente.",
|
|
3475
|
+
tokenAddressError: "Direcci\xF3n no v\xE1lida.",
|
|
3476
|
+
amount: "Cantidad",
|
|
3477
|
+
amountPlaceholder: "Ingrese la cantidad.",
|
|
3478
|
+
balance: "Saldo",
|
|
3479
|
+
receiveTitle: "Direcci\xF3n de billetera recibida",
|
|
3480
|
+
receivePlaceholder: "Ingrese la direcci\xF3n de la billetera recibida.",
|
|
3481
|
+
next: "Siguiente",
|
|
3482
|
+
copied: "Copiado",
|
|
3483
|
+
receiveQrcode: "Recibir escaneando el c\xF3digo QR",
|
|
3484
|
+
copyAddress: "Copiar direcci\xF3n",
|
|
3485
|
+
tokenSmartContract: "Contrato inteligente del Token",
|
|
3486
|
+
tokenSmartContractPlaceholder: "Ingrese el contrato inteligente del Token.",
|
|
3487
|
+
tokenSymbol: "S\xEDmbolo del Token",
|
|
3488
|
+
tokenSymbolPlaceholder: "Ingrese el s\xEDmbolo del Token.",
|
|
3489
|
+
tokenDecimals: "Decimales",
|
|
3490
|
+
tokenDecimalsPlaceholder: "Ingrese los decimales.",
|
|
3491
|
+
import: "Importar",
|
|
3492
|
+
receive: "Recibir",
|
|
3493
|
+
customizedToken: "Token personalizado",
|
|
3494
|
+
noMoreRecords: "\xA1No hay m\xE1s registros aqu\xED!",
|
|
3495
|
+
noRecords: "\xA1No hay registros aqu\xED!",
|
|
3496
|
+
close: "Cerrar",
|
|
3497
|
+
back: "Atr\xE1s",
|
|
3498
|
+
importSuccess: "Token importado con \xE9xito",
|
|
3499
|
+
importFail: "Error al importar el token"
|
|
2447
3500
|
};
|
|
2448
3501
|
|
|
2449
3502
|
// src/i18n/pt.json
|
|
@@ -2495,7 +3548,35 @@ var pt_default = {
|
|
|
2495
3548
|
CEXBindApiSecretKey: "Chave Secreta API",
|
|
2496
3549
|
CEXBindApiPassphrase: "Senha de API",
|
|
2497
3550
|
cancel: "Cancelar",
|
|
2498
|
-
walletLoading: "O servi\xE7o de carteira est\xE1 carregando"
|
|
3551
|
+
walletLoading: "O servi\xE7o de carteira est\xE1 carregando",
|
|
3552
|
+
tokenDetails: "Detalhes do Token",
|
|
3553
|
+
tokenAmountMin: "O valor deve ser maior que 0.",
|
|
3554
|
+
tokenAmountMax: "Saldo insuficiente.",
|
|
3555
|
+
tokenAddressError: "Endere\xE7o inv\xE1lido.",
|
|
3556
|
+
amount: "Quantidade",
|
|
3557
|
+
amountPlaceholder: "Digite a quantidade.",
|
|
3558
|
+
balance: "Saldo",
|
|
3559
|
+
receiveTitle: "Endere\xE7o da carteira recebida",
|
|
3560
|
+
receivePlaceholder: "Digite o endere\xE7o da carteira recebida.",
|
|
3561
|
+
next: "Pr\xF3ximo",
|
|
3562
|
+
copied: "Copiado",
|
|
3563
|
+
receiveQrcode: "Receber escaneando o c\xF3digo QR",
|
|
3564
|
+
copyAddress: "Copiar endere\xE7o",
|
|
3565
|
+
tokenSmartContract: "Contrato inteligente do Token",
|
|
3566
|
+
tokenSmartContractPlaceholder: "Digite o contrato inteligente do Token.",
|
|
3567
|
+
tokenSymbol: "S\xEDmbolo do Token",
|
|
3568
|
+
tokenSymbolPlaceholder: "Digite o s\xEDmbolo do Token.",
|
|
3569
|
+
tokenDecimals: "Decimais",
|
|
3570
|
+
tokenDecimalsPlaceholder: "Digite os decimais.",
|
|
3571
|
+
import: "Importar",
|
|
3572
|
+
receive: "Receber",
|
|
3573
|
+
customizedToken: "Token personalizado",
|
|
3574
|
+
noMoreRecords: "N\xE3o h\xE1 mais registros aqui!",
|
|
3575
|
+
noRecords: "N\xE3o h\xE1 registros aqui!",
|
|
3576
|
+
close: "Fechar",
|
|
3577
|
+
back: "Voltar",
|
|
3578
|
+
importSuccess: "Token importado com sucesso",
|
|
3579
|
+
importFail: "Falha ao importar o token"
|
|
2499
3580
|
};
|
|
2500
3581
|
|
|
2501
3582
|
// src/i18n/index.ts
|
|
@@ -2512,7 +3593,7 @@ var messages = {
|
|
|
2512
3593
|
};
|
|
2513
3594
|
|
|
2514
3595
|
// src/MatchContext.tsx
|
|
2515
|
-
import { jsx as
|
|
3596
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
2516
3597
|
var queryClient = new QueryClient();
|
|
2517
3598
|
var MatchContext = createContext3(void 0);
|
|
2518
3599
|
var MatchProvider = ({
|
|
@@ -2534,7 +3615,7 @@ var MatchProvider = ({
|
|
|
2534
3615
|
useWalletInit({
|
|
2535
3616
|
config: wallet
|
|
2536
3617
|
});
|
|
2537
|
-
return /* @__PURE__ */
|
|
3618
|
+
return /* @__PURE__ */ jsx12(IntlProvider, { locale: realLocale, messages: messages[realLocale], children: /* @__PURE__ */ jsx12(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx12(
|
|
2538
3619
|
MatchContext.Provider,
|
|
2539
3620
|
{
|
|
2540
3621
|
value: {
|
|
@@ -2545,7 +3626,7 @@ var MatchProvider = ({
|
|
|
2545
3626
|
theme,
|
|
2546
3627
|
locale: realLocale
|
|
2547
3628
|
},
|
|
2548
|
-
children: /* @__PURE__ */
|
|
3629
|
+
children: /* @__PURE__ */ jsx12(context_default, { children })
|
|
2549
3630
|
}
|
|
2550
3631
|
) }) });
|
|
2551
3632
|
};
|
|
@@ -2567,7 +3648,7 @@ function useUserInfo() {
|
|
|
2567
3648
|
logout: logoutStore,
|
|
2568
3649
|
setOverview,
|
|
2569
3650
|
overview,
|
|
2570
|
-
address
|
|
3651
|
+
address,
|
|
2571
3652
|
endpoints,
|
|
2572
3653
|
locale,
|
|
2573
3654
|
refreshOverview
|
|
@@ -2579,7 +3660,7 @@ function useUserInfo() {
|
|
|
2579
3660
|
const { open: BTCOpen } = useBTCModalStore();
|
|
2580
3661
|
const { open: CEXBindOpen } = useCEXBindModalStore();
|
|
2581
3662
|
const walletModalStore = useWalletModalStore();
|
|
2582
|
-
const isLogin =
|
|
3663
|
+
const isLogin = useMemo7(() => !!token && !!overview, [token, overview]);
|
|
2583
3664
|
const logout = async () => {
|
|
2584
3665
|
try {
|
|
2585
3666
|
await toLogoutApi();
|
|
@@ -2795,7 +3876,7 @@ function useUserInfo() {
|
|
|
2795
3876
|
token,
|
|
2796
3877
|
mid,
|
|
2797
3878
|
did,
|
|
2798
|
-
address
|
|
3879
|
+
address,
|
|
2799
3880
|
isLogin,
|
|
2800
3881
|
logout,
|
|
2801
3882
|
getLoginEmailCode,
|
|
@@ -2811,29 +3892,23 @@ function useUserInfo() {
|
|
|
2811
3892
|
}
|
|
2812
3893
|
|
|
2813
3894
|
// src/components/EmailModal/StepVerify.tsx
|
|
2814
|
-
import { useEffect as
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
var EMAIL_INTERVAL = 60;
|
|
2818
|
-
var EMAIL_CODE_LENGTH = 6;
|
|
2819
|
-
|
|
2820
|
-
// src/components/EmailModal/StepVerify.tsx
|
|
2821
|
-
import { FormattedMessage as FormattedMessage3, useIntl as useIntl3 } from "react-intl";
|
|
2822
|
-
import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
3895
|
+
import { useEffect as useEffect14, useMemo as useMemo8, useRef as useRef4, useState as useState13 } from "react";
|
|
3896
|
+
import { FormattedMessage as FormattedMessage5, useIntl as useIntl5 } from "react-intl";
|
|
3897
|
+
import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2823
3898
|
function StepVerify(props) {
|
|
2824
|
-
const intl =
|
|
3899
|
+
const intl = useIntl5();
|
|
2825
3900
|
const { getLoginEmailCode, loginByEmail } = useUserInfo();
|
|
2826
|
-
const [error, setError] =
|
|
2827
|
-
const [code, setCode] =
|
|
2828
|
-
const [sending, setSending] =
|
|
2829
|
-
const [submitting, setSubmitting] =
|
|
2830
|
-
const sendTimeRef =
|
|
2831
|
-
const [sendBtnText, setSendBtnText] =
|
|
3901
|
+
const [error, setError] = useState13("");
|
|
3902
|
+
const [code, setCode] = useState13("");
|
|
3903
|
+
const [sending, setSending] = useState13(false);
|
|
3904
|
+
const [submitting, setSubmitting] = useState13(false);
|
|
3905
|
+
const sendTimeRef = useRef4(0);
|
|
3906
|
+
const [sendBtnText, setSendBtnText] = useState13(intl.formatMessage({
|
|
2832
3907
|
id: "send"
|
|
2833
3908
|
}));
|
|
2834
3909
|
const intervalTime = EMAIL_INTERVAL;
|
|
2835
3910
|
const codeLength = EMAIL_CODE_LENGTH;
|
|
2836
|
-
const intervalRef =
|
|
3911
|
+
const intervalRef = useRef4(null);
|
|
2837
3912
|
const isDownMd = useDownMd();
|
|
2838
3913
|
const onSend = async () => {
|
|
2839
3914
|
if (sendTimeRef.current > 0) {
|
|
@@ -2864,7 +3939,7 @@ function StepVerify(props) {
|
|
|
2864
3939
|
setSending(false);
|
|
2865
3940
|
}
|
|
2866
3941
|
};
|
|
2867
|
-
|
|
3942
|
+
useEffect14(() => {
|
|
2868
3943
|
onSend();
|
|
2869
3944
|
return () => {
|
|
2870
3945
|
if (intervalRef.current) {
|
|
@@ -2872,7 +3947,7 @@ function StepVerify(props) {
|
|
|
2872
3947
|
}
|
|
2873
3948
|
};
|
|
2874
3949
|
}, []);
|
|
2875
|
-
const canContinue =
|
|
3950
|
+
const canContinue = useMemo8(() => {
|
|
2876
3951
|
return code.length === codeLength;
|
|
2877
3952
|
}, [code]);
|
|
2878
3953
|
const onContinue = async () => {
|
|
@@ -2896,17 +3971,17 @@ function StepVerify(props) {
|
|
|
2896
3971
|
setSubmitting(false);
|
|
2897
3972
|
}
|
|
2898
3973
|
};
|
|
2899
|
-
return /* @__PURE__ */
|
|
2900
|
-
/* @__PURE__ */
|
|
2901
|
-
/* @__PURE__ */
|
|
2902
|
-
/* @__PURE__ */
|
|
2903
|
-
/* @__PURE__ */
|
|
2904
|
-
/* @__PURE__ */
|
|
3974
|
+
return /* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-box", children: [
|
|
3975
|
+
/* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-header", children: [
|
|
3976
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-icon", children: /* @__PURE__ */ jsx13(EmailLineIcon, { size: isDownMd ? 19 : 24 }) }),
|
|
3977
|
+
/* @__PURE__ */ jsxs9("div", { className: "matchid-email-verify-header-content", children: [
|
|
3978
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-value", children: props.email }),
|
|
3979
|
+
/* @__PURE__ */ jsx13("div", { className: "matchid-email-verify-header-tips", children: /* @__PURE__ */ jsx13(FormattedMessage5, { id: "sendEmailTips" }) })
|
|
2905
3980
|
] })
|
|
2906
3981
|
] }),
|
|
2907
|
-
/* @__PURE__ */
|
|
3982
|
+
/* @__PURE__ */ jsx13(Field, { label: intl.formatMessage({
|
|
2908
3983
|
id: "verificationCode"
|
|
2909
|
-
}), error, children: /* @__PURE__ */
|
|
3984
|
+
}), error, children: /* @__PURE__ */ jsx13(
|
|
2910
3985
|
Input,
|
|
2911
3986
|
{
|
|
2912
3987
|
placeholder: intl.formatMessage({
|
|
@@ -2916,7 +3991,7 @@ function StepVerify(props) {
|
|
|
2916
3991
|
maxLength: codeLength,
|
|
2917
3992
|
onChange: (e) => setCode(e.target.value),
|
|
2918
3993
|
value: code,
|
|
2919
|
-
after: /* @__PURE__ */
|
|
3994
|
+
after: /* @__PURE__ */ jsx13(
|
|
2920
3995
|
Button,
|
|
2921
3996
|
{
|
|
2922
3997
|
highlight: true,
|
|
@@ -2935,13 +4010,13 @@ function StepVerify(props) {
|
|
|
2935
4010
|
)
|
|
2936
4011
|
}
|
|
2937
4012
|
) }),
|
|
2938
|
-
/* @__PURE__ */
|
|
4013
|
+
/* @__PURE__ */ jsx13(Button, { disabled: !canContinue, highlight: true, block: true, size: "lg", onClick: onContinue, children: /* @__PURE__ */ jsx13(FormattedMessage5, { id: "continue" }) })
|
|
2939
4014
|
] });
|
|
2940
4015
|
}
|
|
2941
4016
|
|
|
2942
4017
|
// src/components/EmailModal/index.tsx
|
|
2943
|
-
import { useIntl as
|
|
2944
|
-
import { jsx as
|
|
4018
|
+
import { useIntl as useIntl6 } from "react-intl";
|
|
4019
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
2945
4020
|
function EmailModal({
|
|
2946
4021
|
isOpen = false,
|
|
2947
4022
|
width = 480,
|
|
@@ -2949,16 +4024,16 @@ function EmailModal({
|
|
|
2949
4024
|
onBack,
|
|
2950
4025
|
onLogin
|
|
2951
4026
|
}) {
|
|
2952
|
-
const [step, setStep] =
|
|
2953
|
-
const [emailVal, setEmailVal] =
|
|
2954
|
-
const intl =
|
|
2955
|
-
|
|
4027
|
+
const [step, setStep] = useState14("input");
|
|
4028
|
+
const [emailVal, setEmailVal] = useState14("");
|
|
4029
|
+
const intl = useIntl6();
|
|
4030
|
+
useEffect15(() => {
|
|
2956
4031
|
if (!isOpen) {
|
|
2957
4032
|
setStep("input");
|
|
2958
4033
|
setEmailVal("");
|
|
2959
4034
|
}
|
|
2960
4035
|
}, [isOpen]);
|
|
2961
|
-
return /* @__PURE__ */
|
|
4036
|
+
return /* @__PURE__ */ jsx14(
|
|
2962
4037
|
ModalWithHeader,
|
|
2963
4038
|
{
|
|
2964
4039
|
isOpen,
|
|
@@ -2968,22 +4043,22 @@ function EmailModal({
|
|
|
2968
4043
|
id: "email"
|
|
2969
4044
|
}),
|
|
2970
4045
|
onBack: step == "verify" ? () => setStep("input") : onBack,
|
|
2971
|
-
children: step === "input" ? /* @__PURE__ */
|
|
4046
|
+
children: step === "input" ? /* @__PURE__ */ jsx14(StepEmail, { email: emailVal, onContinue: (email) => {
|
|
2972
4047
|
setEmailVal(email);
|
|
2973
4048
|
setStep("verify");
|
|
2974
|
-
} }) : /* @__PURE__ */
|
|
4049
|
+
} }) : /* @__PURE__ */ jsx14(StepVerify, { email: emailVal, onSuccess: onLogin })
|
|
2975
4050
|
}
|
|
2976
4051
|
);
|
|
2977
4052
|
}
|
|
2978
4053
|
|
|
2979
4054
|
// src/components/LoginBox/index.tsx
|
|
2980
|
-
import { useMemo as
|
|
2981
|
-
import { FormattedMessage as
|
|
4055
|
+
import { useMemo as useMemo9, useState as useState15 } from "react";
|
|
4056
|
+
import { FormattedMessage as FormattedMessage6, useIntl as useIntl7 } from "react-intl";
|
|
2982
4057
|
|
|
2983
4058
|
// src/hooks/useAppConfig.ts
|
|
2984
|
-
import { useQuery as
|
|
4059
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
2985
4060
|
function useAppConfig() {
|
|
2986
|
-
const query =
|
|
4061
|
+
const query = useQuery6({
|
|
2987
4062
|
queryKey: ["appConfig"],
|
|
2988
4063
|
queryFn: async () => {
|
|
2989
4064
|
const res = await getAppConfigApi();
|
|
@@ -3001,7 +4076,7 @@ function useAppConfig() {
|
|
|
3001
4076
|
}
|
|
3002
4077
|
|
|
3003
4078
|
// src/components/LoginBox/index.tsx
|
|
3004
|
-
import { Fragment as Fragment2, jsx as
|
|
4079
|
+
import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3005
4080
|
var RecommendItem = ({
|
|
3006
4081
|
icon,
|
|
3007
4082
|
name,
|
|
@@ -3010,20 +4085,20 @@ var RecommendItem = ({
|
|
|
3010
4085
|
children,
|
|
3011
4086
|
footer
|
|
3012
4087
|
}) => {
|
|
3013
|
-
return /* @__PURE__ */
|
|
3014
|
-
/* @__PURE__ */
|
|
3015
|
-
/* @__PURE__ */
|
|
3016
|
-
/* @__PURE__ */
|
|
3017
|
-
/* @__PURE__ */
|
|
4088
|
+
return /* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method", children: [
|
|
4089
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method-item", onClick, children: [
|
|
4090
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-method-content", children: [
|
|
4091
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-method-icon", children: icon }),
|
|
4092
|
+
/* @__PURE__ */ jsx15("span", { className: "matchid-login-recommend-method-name", children: name })
|
|
3018
4093
|
] }),
|
|
3019
|
-
footer ? footer : children ? /* @__PURE__ */
|
|
4094
|
+
footer ? footer : children ? /* @__PURE__ */ jsx15(
|
|
3020
4095
|
ArrowDownIcon,
|
|
3021
4096
|
{
|
|
3022
4097
|
className: `matchid-login-recommend-method-arrow ${showChildren ? "matchid-login-recommend-method-arrow-active" : ""}`,
|
|
3023
4098
|
size: 20,
|
|
3024
4099
|
color: "var(--matchid-arrow-color)"
|
|
3025
4100
|
}
|
|
3026
|
-
) : /* @__PURE__ */
|
|
4101
|
+
) : /* @__PURE__ */ jsx15(
|
|
3027
4102
|
ArrowRightIcon,
|
|
3028
4103
|
{
|
|
3029
4104
|
className: "matchid-login-recommend-method-arrow",
|
|
@@ -3032,7 +4107,7 @@ var RecommendItem = ({
|
|
|
3032
4107
|
}
|
|
3033
4108
|
)
|
|
3034
4109
|
] }),
|
|
3035
|
-
children && /* @__PURE__ */
|
|
4110
|
+
children && /* @__PURE__ */ jsx15(
|
|
3036
4111
|
"div",
|
|
3037
4112
|
{
|
|
3038
4113
|
className: `matchid-login-recommend-method-popover ${showChildren ? "matchid-login-recommend-method-popover-active" : ""}`,
|
|
@@ -3048,7 +4123,7 @@ function LoginBox({
|
|
|
3048
4123
|
inModal = false
|
|
3049
4124
|
}) {
|
|
3050
4125
|
const config = useAppConfig();
|
|
3051
|
-
const methodConfig =
|
|
4126
|
+
const methodConfig = useMemo9(() => {
|
|
3052
4127
|
if (recommendMethods || methods || walletMethods) {
|
|
3053
4128
|
return {
|
|
3054
4129
|
recommendMethods: recommendMethods ? recommendMethods : walletMethods ? ["wallet"] : [],
|
|
@@ -3090,82 +4165,82 @@ function LoginBox({
|
|
|
3090
4165
|
walletMethods: walletMethodList
|
|
3091
4166
|
};
|
|
3092
4167
|
}, [config.platform, recommendMethods, methods, walletMethods]);
|
|
3093
|
-
const [emailOpen, setEmailOpen] =
|
|
4168
|
+
const [emailOpen, setEmailOpen] = useState15(false);
|
|
3094
4169
|
const { login } = useUserInfo();
|
|
3095
|
-
const [showWallet, setShowWallet] =
|
|
3096
|
-
const intl =
|
|
4170
|
+
const [showWallet, setShowWallet] = useState15(false);
|
|
4171
|
+
const intl = useIntl7();
|
|
3097
4172
|
const isDownMd = useDownMd();
|
|
3098
4173
|
const methodMap = {
|
|
3099
4174
|
wallet: {
|
|
3100
|
-
icon: /* @__PURE__ */
|
|
4175
|
+
icon: /* @__PURE__ */ jsx15(WalletIcon, { size: isDownMd ? 36 : 40 }),
|
|
3101
4176
|
name: intl.formatMessage({ id: "wallet" }),
|
|
3102
4177
|
onClick: () => setShowWallet(!showWallet),
|
|
3103
4178
|
type: "wallet"
|
|
3104
4179
|
},
|
|
3105
4180
|
email: {
|
|
3106
|
-
icon: /* @__PURE__ */
|
|
4181
|
+
icon: /* @__PURE__ */ jsx15(EmailIcon, { size: isDownMd ? 36 : 40 }),
|
|
3107
4182
|
name: intl.formatMessage({ id: "email" }),
|
|
3108
4183
|
onClick: () => {
|
|
3109
4184
|
setEmailOpen(true);
|
|
3110
4185
|
}
|
|
3111
4186
|
},
|
|
3112
4187
|
google: {
|
|
3113
|
-
icon: /* @__PURE__ */
|
|
4188
|
+
icon: /* @__PURE__ */ jsx15(GoogleIcon, { size: isDownMd ? 36 : 40 }),
|
|
3114
4189
|
name: "Google",
|
|
3115
4190
|
onClick: () => login("google")
|
|
3116
4191
|
},
|
|
3117
4192
|
twitter: {
|
|
3118
|
-
icon: /* @__PURE__ */
|
|
4193
|
+
icon: /* @__PURE__ */ jsx15(XIcon, { size: isDownMd ? 36 : 40 }),
|
|
3119
4194
|
name: "X",
|
|
3120
4195
|
onClick: () => login("twitter")
|
|
3121
4196
|
},
|
|
3122
4197
|
telegram: {
|
|
3123
|
-
icon: /* @__PURE__ */
|
|
4198
|
+
icon: /* @__PURE__ */ jsx15(TelegramIcon, { size: isDownMd ? 36 : 40 }),
|
|
3124
4199
|
name: "Telegram",
|
|
3125
4200
|
onClick: () => login("telegram")
|
|
3126
4201
|
},
|
|
3127
4202
|
github: {
|
|
3128
|
-
icon: /* @__PURE__ */
|
|
4203
|
+
icon: /* @__PURE__ */ jsx15(GithubIcon, { size: isDownMd ? 36 : 40 }),
|
|
3129
4204
|
name: "Github",
|
|
3130
4205
|
onClick: () => login("github")
|
|
3131
4206
|
},
|
|
3132
4207
|
discord: {
|
|
3133
|
-
icon: /* @__PURE__ */
|
|
4208
|
+
icon: /* @__PURE__ */ jsx15(DiscordIcon, { size: isDownMd ? 36 : 40 }),
|
|
3134
4209
|
name: "Discord",
|
|
3135
4210
|
onClick: () => login("discord")
|
|
3136
4211
|
},
|
|
3137
4212
|
linkedin: {
|
|
3138
|
-
icon: /* @__PURE__ */
|
|
4213
|
+
icon: /* @__PURE__ */ jsx15(LinkedinIcon, { size: isDownMd ? 36 : 40 }),
|
|
3139
4214
|
name: "LinkedIn",
|
|
3140
4215
|
onClick: () => login("linkedin")
|
|
3141
4216
|
},
|
|
3142
4217
|
facebook: {
|
|
3143
|
-
icon: /* @__PURE__ */
|
|
4218
|
+
icon: /* @__PURE__ */ jsx15(FacebookIcon, { size: isDownMd ? 36 : 40 }),
|
|
3144
4219
|
name: "Facebook",
|
|
3145
4220
|
onClick: () => login("facebook")
|
|
3146
4221
|
},
|
|
3147
4222
|
youtube: {
|
|
3148
|
-
icon: /* @__PURE__ */
|
|
4223
|
+
icon: /* @__PURE__ */ jsx15(YoutubeIcon, { size: isDownMd ? 36 : 40 }),
|
|
3149
4224
|
name: "Youtube",
|
|
3150
4225
|
onClick: () => login("youtube")
|
|
3151
4226
|
}
|
|
3152
4227
|
};
|
|
3153
4228
|
const { walletMap } = useWalletConfig();
|
|
3154
|
-
return /* @__PURE__ */
|
|
3155
|
-
(!inModal || !emailOpen) && /* @__PURE__ */
|
|
3156
|
-
/* @__PURE__ */
|
|
3157
|
-
return /* @__PURE__ */
|
|
4229
|
+
return /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
4230
|
+
(!inModal || !emailOpen) && /* @__PURE__ */ jsxs10("div", { className: "matchid-login-box", children: [
|
|
4231
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-list", children: methodConfig.recommendMethods.map((m) => {
|
|
4232
|
+
return /* @__PURE__ */ jsx15(
|
|
3158
4233
|
RecommendItem,
|
|
3159
4234
|
{
|
|
3160
4235
|
icon: methodMap[m]?.icon,
|
|
3161
4236
|
name: methodMap[m]?.name,
|
|
3162
4237
|
onClick: methodMap[m]?.onClick,
|
|
3163
4238
|
showChildren: m == "wallet" && showWallet,
|
|
3164
|
-
children: m == "wallet" && /* @__PURE__ */
|
|
3165
|
-
/* @__PURE__ */
|
|
3166
|
-
/* @__PURE__ */
|
|
4239
|
+
children: m == "wallet" && /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
4240
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-divider" }),
|
|
4241
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-list", children: methodConfig.walletMethods.map((n) => {
|
|
3167
4242
|
const m2 = walletMap[n];
|
|
3168
|
-
return /* @__PURE__ */
|
|
4243
|
+
return /* @__PURE__ */ jsxs10(
|
|
3169
4244
|
"div",
|
|
3170
4245
|
{
|
|
3171
4246
|
className: "matchid-login-recommend-wallet-item",
|
|
@@ -3173,16 +4248,16 @@ function LoginBox({
|
|
|
3173
4248
|
login(m2.method);
|
|
3174
4249
|
},
|
|
3175
4250
|
children: [
|
|
3176
|
-
/* @__PURE__ */
|
|
3177
|
-
/* @__PURE__ */
|
|
3178
|
-
/* @__PURE__ */
|
|
4251
|
+
/* @__PURE__ */ jsxs10("div", { className: "matchid-login-recommend-wallet-item-content", children: [
|
|
4252
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-recommend-wallet-item-icon", children: m2.icon }),
|
|
4253
|
+
/* @__PURE__ */ jsx15(
|
|
3179
4254
|
"div",
|
|
3180
4255
|
{
|
|
3181
4256
|
className: "matchid-login-recommend-wallet-item-hover-icon",
|
|
3182
4257
|
children: m2.activeIcon
|
|
3183
4258
|
}
|
|
3184
4259
|
),
|
|
3185
|
-
/* @__PURE__ */
|
|
4260
|
+
/* @__PURE__ */ jsx15(
|
|
3186
4261
|
"span",
|
|
3187
4262
|
{
|
|
3188
4263
|
className: "matchid-login-recommend-wallet-item-name",
|
|
@@ -3190,7 +4265,7 @@ function LoginBox({
|
|
|
3190
4265
|
}
|
|
3191
4266
|
)
|
|
3192
4267
|
] }),
|
|
3193
|
-
/* @__PURE__ */
|
|
4268
|
+
/* @__PURE__ */ jsx15(
|
|
3194
4269
|
ArrowRightIcon,
|
|
3195
4270
|
{
|
|
3196
4271
|
className: "matchid-login-recommend-wallet-item-arrow",
|
|
@@ -3208,10 +4283,10 @@ function LoginBox({
|
|
|
3208
4283
|
m
|
|
3209
4284
|
);
|
|
3210
4285
|
}) }),
|
|
3211
|
-
methodConfig.methods.length > 0 && /* @__PURE__ */
|
|
3212
|
-
/* @__PURE__ */
|
|
3213
|
-
/* @__PURE__ */
|
|
3214
|
-
return /* @__PURE__ */
|
|
4286
|
+
methodConfig.methods.length > 0 && /* @__PURE__ */ jsxs10("div", { className: "matchid-login-other", children: [
|
|
4287
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-other-text", children: /* @__PURE__ */ jsx15(FormattedMessage6, { id: "otherLoginMethods" }) }),
|
|
4288
|
+
/* @__PURE__ */ jsx15("div", { className: "matchid-login-method-box", children: methodConfig.methods.map((m) => {
|
|
4289
|
+
return /* @__PURE__ */ jsx15(
|
|
3215
4290
|
"div",
|
|
3216
4291
|
{
|
|
3217
4292
|
className: "matchid-login-method-item",
|
|
@@ -3224,7 +4299,7 @@ function LoginBox({
|
|
|
3224
4299
|
}) })
|
|
3225
4300
|
] })
|
|
3226
4301
|
] }),
|
|
3227
|
-
/* @__PURE__ */
|
|
4302
|
+
/* @__PURE__ */ jsx15(
|
|
3228
4303
|
EmailModal,
|
|
3229
4304
|
{
|
|
3230
4305
|
isOpen: emailOpen,
|
|
@@ -3240,56 +4315,56 @@ function LoginBox({
|
|
|
3240
4315
|
}
|
|
3241
4316
|
|
|
3242
4317
|
// src/components/LoginButton/index.tsx
|
|
3243
|
-
import { useState as
|
|
4318
|
+
import { useState as useState17 } from "react";
|
|
3244
4319
|
|
|
3245
4320
|
// src/components/LoginPanel/index.tsx
|
|
3246
|
-
import { FormattedMessage as
|
|
3247
|
-
import { jsx as
|
|
4321
|
+
import { FormattedMessage as FormattedMessage7 } from "react-intl";
|
|
4322
|
+
import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
3248
4323
|
function LoginPanel({
|
|
3249
4324
|
header,
|
|
3250
4325
|
onClose,
|
|
3251
4326
|
...props
|
|
3252
4327
|
}) {
|
|
3253
4328
|
const isDownMd = useDownMd();
|
|
3254
|
-
return /* @__PURE__ */
|
|
3255
|
-
header ? header : /* @__PURE__ */
|
|
3256
|
-
/* @__PURE__ */
|
|
3257
|
-
/* @__PURE__ */
|
|
3258
|
-
/* @__PURE__ */
|
|
4329
|
+
return /* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel", children: [
|
|
4330
|
+
header ? header : /* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel-header", children: [
|
|
4331
|
+
/* @__PURE__ */ jsxs11("div", { className: "matchid-login-panel-header-content", children: [
|
|
4332
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-title", children: /* @__PURE__ */ jsx16(FormattedMessage7, { id: "loginTitle" }) }),
|
|
4333
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-subtilte", children: /* @__PURE__ */ jsx16(FormattedMessage7, { id: "loginTips" }) })
|
|
3259
4334
|
] }),
|
|
3260
|
-
onClose && /* @__PURE__ */
|
|
4335
|
+
onClose && /* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-header-close", onClick: onClose, children: /* @__PURE__ */ jsx16(CloseRoundIcon, { size: isDownMd ? 24 : 30 }) })
|
|
3261
4336
|
] }),
|
|
3262
|
-
/* @__PURE__ */
|
|
3263
|
-
/* @__PURE__ */
|
|
4337
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-divide" }),
|
|
4338
|
+
/* @__PURE__ */ jsx16("div", { className: "matchid-login-panel-box", children: /* @__PURE__ */ jsx16(LoginBox, { ...props }) })
|
|
3264
4339
|
] });
|
|
3265
4340
|
}
|
|
3266
4341
|
|
|
3267
4342
|
// src/components/LoginModal/index.tsx
|
|
3268
|
-
import { jsx as
|
|
4343
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
3269
4344
|
function LoginModal({
|
|
3270
4345
|
isOpen = false,
|
|
3271
4346
|
width = 480,
|
|
3272
4347
|
...props
|
|
3273
4348
|
}) {
|
|
3274
4349
|
const { isLogin } = useUserInfo();
|
|
3275
|
-
return /* @__PURE__ */
|
|
4350
|
+
return /* @__PURE__ */ jsx17(
|
|
3276
4351
|
Modal,
|
|
3277
4352
|
{
|
|
3278
4353
|
isOpen: isOpen && !isLogin,
|
|
3279
4354
|
width,
|
|
3280
|
-
children: /* @__PURE__ */
|
|
4355
|
+
children: /* @__PURE__ */ jsx17(LoginPanel, { ...props, inModal: true })
|
|
3281
4356
|
}
|
|
3282
4357
|
);
|
|
3283
4358
|
}
|
|
3284
4359
|
|
|
3285
4360
|
// src/components/UserPopover/index.tsx
|
|
3286
|
-
import { useState as
|
|
4361
|
+
import { useState as useState16 } from "react";
|
|
3287
4362
|
|
|
3288
4363
|
// src/assets/icon/ProfileIcon.tsx
|
|
3289
|
-
import { jsx as
|
|
4364
|
+
import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
3290
4365
|
function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
3291
|
-
return /* @__PURE__ */
|
|
3292
|
-
/* @__PURE__ */
|
|
4366
|
+
return /* @__PURE__ */ jsxs12("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4367
|
+
/* @__PURE__ */ jsx18(
|
|
3293
4368
|
"path",
|
|
3294
4369
|
{
|
|
3295
4370
|
fillRule: "evenodd",
|
|
@@ -3298,7 +4373,7 @@ function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
|
3298
4373
|
fill: color
|
|
3299
4374
|
}
|
|
3300
4375
|
),
|
|
3301
|
-
/* @__PURE__ */
|
|
4376
|
+
/* @__PURE__ */ jsx18(
|
|
3302
4377
|
"path",
|
|
3303
4378
|
{
|
|
3304
4379
|
fillRule: "evenodd",
|
|
@@ -3311,11 +4386,11 @@ function ProfileIcon({ size = 24, color = "black", ...props }) {
|
|
|
3311
4386
|
}
|
|
3312
4387
|
|
|
3313
4388
|
// src/components/UserPopover/index.tsx
|
|
3314
|
-
import { FormattedMessage as
|
|
3315
|
-
import { jsx as
|
|
4389
|
+
import { FormattedMessage as FormattedMessage8, useIntl as useIntl8 } from "react-intl";
|
|
4390
|
+
import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
3316
4391
|
function UserContent() {
|
|
3317
|
-
const { logout, address
|
|
3318
|
-
const [logouting, setLogouting] =
|
|
4392
|
+
const { logout, address, username } = useUserInfo();
|
|
4393
|
+
const [logouting, setLogouting] = useState16(false);
|
|
3319
4394
|
const onLogout = async () => {
|
|
3320
4395
|
if (logouting) return;
|
|
3321
4396
|
try {
|
|
@@ -3333,34 +4408,34 @@ function UserContent() {
|
|
|
3333
4408
|
rightIcon,
|
|
3334
4409
|
onClick
|
|
3335
4410
|
}) => {
|
|
3336
|
-
return /* @__PURE__ */
|
|
3337
|
-
/* @__PURE__ */
|
|
4411
|
+
return /* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-item", onClick, children: [
|
|
4412
|
+
/* @__PURE__ */ jsxs13("div", { className: `matchid-user-popover-item-content`, children: [
|
|
3338
4413
|
icon,
|
|
3339
|
-
/* @__PURE__ */
|
|
4414
|
+
/* @__PURE__ */ jsx19("div", { className: "matchid-user-popover-item-text", children })
|
|
3340
4415
|
] }),
|
|
3341
4416
|
rightIcon
|
|
3342
4417
|
] });
|
|
3343
4418
|
};
|
|
3344
4419
|
const UserDivider = () => {
|
|
3345
|
-
return /* @__PURE__ */
|
|
4420
|
+
return /* @__PURE__ */ jsx19("div", { className: `matchid-user-popover-divider` });
|
|
3346
4421
|
};
|
|
3347
|
-
const [usernameOpen, setUsernameOpen] =
|
|
4422
|
+
const [usernameOpen, setUsernameOpen] = useState16(false);
|
|
3348
4423
|
const [copied, setCopied] = useCopyClipboard();
|
|
3349
|
-
const intl =
|
|
3350
|
-
return /* @__PURE__ */
|
|
3351
|
-
/* @__PURE__ */
|
|
3352
|
-
/* @__PURE__ */
|
|
3353
|
-
setCopied(
|
|
3354
|
-
}, icon: copied ? /* @__PURE__ */
|
|
3355
|
-
/* @__PURE__ */
|
|
3356
|
-
/* @__PURE__ */
|
|
4424
|
+
const intl = useIntl8();
|
|
4425
|
+
return /* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-content", children: [
|
|
4426
|
+
/* @__PURE__ */ jsxs13("div", { className: "matchid-user-popover-list", children: [
|
|
4427
|
+
/* @__PURE__ */ jsx19(UserItem, { onClick: () => {
|
|
4428
|
+
setCopied(address);
|
|
4429
|
+
}, 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) }),
|
|
4430
|
+
/* @__PURE__ */ jsx19(UserDivider, {}),
|
|
4431
|
+
/* @__PURE__ */ jsx19(UserItem, { onClick: () => {
|
|
3357
4432
|
setUsernameOpen(true);
|
|
3358
|
-
}, icon: /* @__PURE__ */
|
|
4433
|
+
}, icon: /* @__PURE__ */ jsx19(ProfileIcon, { size: 20, color: "var(--icon-color)" }), rightIcon: /* @__PURE__ */ jsx19(ArrowRightIcon, { size: 20, color: "var(--icon-color)" }), children: username || intl.formatMessage({
|
|
3359
4434
|
id: "setUsername"
|
|
3360
4435
|
}) })
|
|
3361
4436
|
] }),
|
|
3362
|
-
/* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
4437
|
+
/* @__PURE__ */ jsx19(Button, { onClick: onLogout, loading: logouting, children: /* @__PURE__ */ jsx19(FormattedMessage8, { id: "disconnect" }) }),
|
|
4438
|
+
/* @__PURE__ */ jsx19(UsernameModal, { isOpen: usernameOpen, onClose: () => {
|
|
3364
4439
|
setUsernameOpen(false);
|
|
3365
4440
|
}, onSuccess: () => {
|
|
3366
4441
|
setUsernameOpen(false);
|
|
@@ -3371,12 +4446,12 @@ function UserPopover({
|
|
|
3371
4446
|
children,
|
|
3372
4447
|
...props
|
|
3373
4448
|
}) {
|
|
3374
|
-
return /* @__PURE__ */
|
|
4449
|
+
return /* @__PURE__ */ jsx19(Popover, { ...props, content: /* @__PURE__ */ jsx19(UserContent, {}), children });
|
|
3375
4450
|
}
|
|
3376
4451
|
|
|
3377
4452
|
// src/components/LoginButton/index.tsx
|
|
3378
|
-
import { FormattedMessage as
|
|
3379
|
-
import { Fragment as Fragment3, jsx as
|
|
4453
|
+
import { FormattedMessage as FormattedMessage9, useIntl as useIntl9 } from "react-intl";
|
|
4454
|
+
import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3380
4455
|
function LoginButton({
|
|
3381
4456
|
loginRender,
|
|
3382
4457
|
methods,
|
|
@@ -3388,12 +4463,12 @@ function LoginButton({
|
|
|
3388
4463
|
walletMethods,
|
|
3389
4464
|
...props
|
|
3390
4465
|
}) {
|
|
3391
|
-
const intl =
|
|
4466
|
+
const intl = useIntl9();
|
|
3392
4467
|
const { isLogin, username } = useUserInfo();
|
|
3393
|
-
const [loginOpen, setLoginOpen] =
|
|
4468
|
+
const [loginOpen, setLoginOpen] = useState17(false);
|
|
3394
4469
|
if (!isLogin) {
|
|
3395
|
-
return /* @__PURE__ */
|
|
3396
|
-
/* @__PURE__ */
|
|
4470
|
+
return /* @__PURE__ */ jsxs14(Fragment3, { children: [
|
|
4471
|
+
/* @__PURE__ */ jsx20(
|
|
3397
4472
|
LoginModal,
|
|
3398
4473
|
{
|
|
3399
4474
|
methods,
|
|
@@ -3403,55 +4478,32 @@ function LoginButton({
|
|
|
3403
4478
|
onClose: () => setLoginOpen(false)
|
|
3404
4479
|
}
|
|
3405
4480
|
),
|
|
3406
|
-
/* @__PURE__ */
|
|
3407
|
-
/* @__PURE__ */
|
|
3408
|
-
/* @__PURE__ */
|
|
4481
|
+
/* @__PURE__ */ jsxs14(Button, { className: "matchid-unlogin-btn", ...props, highlight: true, onClick: () => setLoginOpen(true), children: [
|
|
4482
|
+
/* @__PURE__ */ jsx20(UnLoginIcon_default, {}),
|
|
4483
|
+
/* @__PURE__ */ jsx20("span", { children: /* @__PURE__ */ jsx20(FormattedMessage9, { id: "login" }) })
|
|
3409
4484
|
] })
|
|
3410
4485
|
] });
|
|
3411
4486
|
}
|
|
3412
|
-
return loginRender ? /* @__PURE__ */
|
|
3413
|
-
/* @__PURE__ */
|
|
3414
|
-
/* @__PURE__ */
|
|
4487
|
+
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: [
|
|
4488
|
+
/* @__PURE__ */ jsx20(LoginIcon_default, {}),
|
|
4489
|
+
/* @__PURE__ */ jsx20("span", { children: username ? truncateAddress(username) : "MatchID " + intl.formatMessage({
|
|
3415
4490
|
id: "user"
|
|
3416
4491
|
}) })
|
|
3417
4492
|
] }) });
|
|
3418
4493
|
}
|
|
3419
4494
|
|
|
3420
4495
|
// src/components/UsernameModal/index.tsx
|
|
3421
|
-
import { useEffect as
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3425
|
-
function InfoRoundIcon({
|
|
3426
|
-
size,
|
|
3427
|
-
color = "#6E6E6E",
|
|
3428
|
-
...props
|
|
3429
|
-
}) {
|
|
3430
|
-
return /* @__PURE__ */ jsxs14("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [
|
|
3431
|
-
/* @__PURE__ */ jsx19("g", { clipPath: "url(#clip0_418_7746)", children: /* @__PURE__ */ jsx19(
|
|
3432
|
-
"path",
|
|
3433
|
-
{
|
|
3434
|
-
fillRule: "evenodd",
|
|
3435
|
-
clipRule: "evenodd",
|
|
3436
|
-
d: "M7.99984 0.666504C3.94975 0.666504 0.666504 3.94975 0.666504 7.99984C0.666504 12.0499 3.94975 15.3332 7.99984 15.3332C12.0499 15.3332 15.3332 12.0499 15.3332 7.99984C15.3332 3.94975 12.0499 0.666504 7.99984 0.666504ZM1.99984 7.99984C1.99984 4.68613 4.68613 1.99984 7.99984 1.99984C11.3135 1.99984 13.9998 4.68613 13.9998 7.99984C13.9998 11.3135 11.3135 13.9998 7.99984 13.9998C4.68613 13.9998 1.99984 11.3135 1.99984 7.99984ZM8.6665 7.33317C8.6665 6.96498 8.36803 6.6665 7.99984 6.6665C7.63165 6.6665 7.33317 6.96498 7.33317 7.33317V11.3332C7.33317 11.7014 7.63165 11.9998 7.99984 11.9998C8.36803 11.9998 8.6665 11.7014 8.6665 11.3332V7.33317ZM7.99984 5.33317C8.36803 5.33317 8.6665 5.03469 8.6665 4.6665C8.6665 4.29831 8.36803 3.99984 7.99984 3.99984C7.63165 3.99984 7.33317 4.29831 7.33317 4.6665C7.33317 5.03469 7.63165 5.33317 7.99984 5.33317Z",
|
|
3437
|
-
fill: color
|
|
3438
|
-
}
|
|
3439
|
-
) }),
|
|
3440
|
-
/* @__PURE__ */ jsx19("defs", { children: /* @__PURE__ */ jsx19("clipPath", { id: "clip0_418_7746", children: /* @__PURE__ */ jsx19("rect", { width: "16", height: "16", fill: "white" }) }) })
|
|
3441
|
-
] });
|
|
3442
|
-
}
|
|
3443
|
-
|
|
3444
|
-
// src/components/UsernameModal/index.tsx
|
|
3445
|
-
import { FormattedMessage as FormattedMessage8, useIntl as useIntl8 } from "react-intl";
|
|
3446
|
-
import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4496
|
+
import { useEffect as useEffect16, useMemo as useMemo10, useState as useState18 } from "react";
|
|
4497
|
+
import { FormattedMessage as FormattedMessage10, useIntl as useIntl10 } from "react-intl";
|
|
4498
|
+
import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3447
4499
|
var ValidItem = ({
|
|
3448
4500
|
success = false,
|
|
3449
4501
|
text
|
|
3450
4502
|
}) => {
|
|
3451
4503
|
const isDownMd = useDownMd();
|
|
3452
4504
|
return /* @__PURE__ */ jsxs15("div", { className: `matchid-valid-status-item matchid-valid-status-${success ? "success" : "error"}`, children: [
|
|
3453
|
-
success ? /* @__PURE__ */
|
|
3454
|
-
/* @__PURE__ */
|
|
4505
|
+
success ? /* @__PURE__ */ jsx21(CheckRoundIcon, { size: isDownMd ? 12 : 16 }) : /* @__PURE__ */ jsx21(InfoLineIcon, { size: isDownMd ? 12 : 16 }),
|
|
4506
|
+
/* @__PURE__ */ jsx21("span", { children: text })
|
|
3455
4507
|
] });
|
|
3456
4508
|
};
|
|
3457
4509
|
function UsernameModal({
|
|
@@ -3462,23 +4514,23 @@ function UsernameModal({
|
|
|
3462
4514
|
}) {
|
|
3463
4515
|
const { username, refreshOverview } = useUserInfo();
|
|
3464
4516
|
const { isLogin } = useUserInfo();
|
|
3465
|
-
const [val, setVal] =
|
|
3466
|
-
const [error, setError] =
|
|
4517
|
+
const [val, setVal] = useState18(username);
|
|
4518
|
+
const [error, setError] = useState18("");
|
|
3467
4519
|
const isDownMd = useDownMd();
|
|
3468
|
-
|
|
4520
|
+
useEffect16(() => {
|
|
3469
4521
|
if (isOpen) {
|
|
3470
4522
|
setVal(username);
|
|
3471
4523
|
setError("");
|
|
3472
4524
|
}
|
|
3473
4525
|
}, [isOpen]);
|
|
3474
|
-
const isValid =
|
|
4526
|
+
const isValid = useMemo10(() => {
|
|
3475
4527
|
return isValidUsername(val);
|
|
3476
4528
|
}, [val]);
|
|
3477
|
-
const isLength =
|
|
4529
|
+
const isLength = useMemo10(() => {
|
|
3478
4530
|
return val.length >= 2 && val.length <= 32;
|
|
3479
4531
|
}, [val]);
|
|
3480
4532
|
const isSafe = isValid && isLength;
|
|
3481
|
-
const [isSubmitting, setIsSubmitting] =
|
|
4533
|
+
const [isSubmitting, setIsSubmitting] = useState18(false);
|
|
3482
4534
|
const onSubmit = async () => {
|
|
3483
4535
|
if (isSubmitting) return;
|
|
3484
4536
|
try {
|
|
@@ -3498,13 +4550,13 @@ function UsernameModal({
|
|
|
3498
4550
|
setIsSubmitting(false);
|
|
3499
4551
|
}
|
|
3500
4552
|
};
|
|
3501
|
-
const intl =
|
|
3502
|
-
return /* @__PURE__ */
|
|
4553
|
+
const intl = useIntl10();
|
|
4554
|
+
return /* @__PURE__ */ jsx21(ModalWithHeader, { isOpen: isOpen && isLogin, ...props, title: title || intl.formatMessage({
|
|
3503
4555
|
id: username ? "editUsernameTitle" : "setUsernameTitle"
|
|
3504
4556
|
}), children: /* @__PURE__ */ jsxs15("div", { className: "matchid-username-box", children: [
|
|
3505
|
-
/* @__PURE__ */
|
|
4557
|
+
/* @__PURE__ */ jsx21(Field, { label: intl.formatMessage({
|
|
3506
4558
|
id: "username"
|
|
3507
|
-
}), error, children: /* @__PURE__ */
|
|
4559
|
+
}), error, children: /* @__PURE__ */ jsx21(
|
|
3508
4560
|
Input,
|
|
3509
4561
|
{
|
|
3510
4562
|
placeholder: intl.formatMessage({
|
|
@@ -3518,7 +4570,7 @@ function UsernameModal({
|
|
|
3518
4570
|
}
|
|
3519
4571
|
) }),
|
|
3520
4572
|
/* @__PURE__ */ jsxs15("div", { className: "matchid-valid", children: [
|
|
3521
|
-
/* @__PURE__ */
|
|
4573
|
+
/* @__PURE__ */ jsx21(
|
|
3522
4574
|
ValidItem,
|
|
3523
4575
|
{
|
|
3524
4576
|
success: isValid,
|
|
@@ -3527,21 +4579,21 @@ function UsernameModal({
|
|
|
3527
4579
|
})
|
|
3528
4580
|
}
|
|
3529
4581
|
),
|
|
3530
|
-
/* @__PURE__ */
|
|
4582
|
+
/* @__PURE__ */ jsx21(ValidItem, { success: isLength, text: intl.formatMessage({
|
|
3531
4583
|
id: "usernameLengthError"
|
|
3532
4584
|
}) })
|
|
3533
4585
|
] }),
|
|
3534
|
-
/* @__PURE__ */
|
|
4586
|
+
/* @__PURE__ */ jsx21(Button, { disabled: !isSafe, loading: isSubmitting, style: {
|
|
3535
4587
|
marginTop: isDownMd ? "36px" : "64px"
|
|
3536
|
-
}, onClick: onSubmit, size: "lg", block: true, highlight: true, children: /* @__PURE__ */
|
|
3537
|
-
/* @__PURE__ */
|
|
4588
|
+
}, onClick: onSubmit, size: "lg", block: true, highlight: true, children: /* @__PURE__ */ jsx21(FormattedMessage10, { id: "confirm" }) }),
|
|
4589
|
+
/* @__PURE__ */ jsx21(Button, { style: {
|
|
3538
4590
|
marginTop: isDownMd ? "12px" : "24px"
|
|
3539
|
-
}, onClick: props.onClose, size: "lg", block: true, children: /* @__PURE__ */
|
|
4591
|
+
}, onClick: props.onClose, size: "lg", block: true, children: /* @__PURE__ */ jsx21(FormattedMessage10, { id: "cancel" }) })
|
|
3540
4592
|
] }) });
|
|
3541
4593
|
}
|
|
3542
4594
|
|
|
3543
4595
|
// src/components/SOLModal/index.tsx
|
|
3544
|
-
import React7, { useEffect as
|
|
4596
|
+
import React7, { useEffect as useEffect17, useState as useState19 } from "react";
|
|
3545
4597
|
import { clusterApiUrl } from "@solana/web3.js";
|
|
3546
4598
|
import { useWallet as useWallet2, WalletProvider, ConnectionProvider } from "@solana/wallet-adapter-react";
|
|
3547
4599
|
import { WalletModalProvider, useWalletModal } from "@solana/wallet-adapter-react-ui";
|
|
@@ -3592,10 +4644,10 @@ import {
|
|
|
3592
4644
|
XDEFIWalletAdapter
|
|
3593
4645
|
} from "@solana/wallet-adapter-wallets";
|
|
3594
4646
|
import "@solana/wallet-adapter-react-ui/styles.css";
|
|
3595
|
-
import { useIntl as
|
|
4647
|
+
import { useIntl as useIntl11 } from "react-intl";
|
|
3596
4648
|
|
|
3597
4649
|
// src/components/WalletModalContent/index.tsx
|
|
3598
|
-
import { useMemo as
|
|
4650
|
+
import { useMemo as useMemo11 } from "react";
|
|
3599
4651
|
|
|
3600
4652
|
// src/assets/wallet.ts
|
|
3601
4653
|
var walletErrorImage = "data:image/png;base64,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";
|
|
@@ -3605,7 +4657,7 @@ var walletConnectImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEA
|
|
|
3605
4657
|
var walletSigningImage = "data:image/png;base64,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";
|
|
3606
4658
|
|
|
3607
4659
|
// src/components/WalletModalContent/index.tsx
|
|
3608
|
-
import { jsx as
|
|
4660
|
+
import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3609
4661
|
function WalletModalContent({
|
|
3610
4662
|
status,
|
|
3611
4663
|
error,
|
|
@@ -3613,10 +4665,10 @@ function WalletModalContent({
|
|
|
3613
4665
|
setError,
|
|
3614
4666
|
setVisible,
|
|
3615
4667
|
visible,
|
|
3616
|
-
address
|
|
4668
|
+
address,
|
|
3617
4669
|
connected
|
|
3618
4670
|
}) {
|
|
3619
|
-
const pageData =
|
|
4671
|
+
const pageData = useMemo11(() => {
|
|
3620
4672
|
if (status == "success") {
|
|
3621
4673
|
return {
|
|
3622
4674
|
btnText: "Disconnect Wallet",
|
|
@@ -3674,13 +4726,13 @@ function WalletModalContent({
|
|
|
3674
4726
|
text: "Please Connect your wallet",
|
|
3675
4727
|
statusImage: walletConnectImage
|
|
3676
4728
|
};
|
|
3677
|
-
}, [visible, connected, status, error,
|
|
3678
|
-
return /* @__PURE__ */
|
|
4729
|
+
}, [visible, connected, status, error, address]);
|
|
4730
|
+
return /* @__PURE__ */ jsx22("div", { className: "matchid-wallet-container", children: /* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-box`, children: [
|
|
3679
4731
|
/* @__PURE__ */ jsxs16("div", { className: `matchid-wallet-content`, children: [
|
|
3680
|
-
/* @__PURE__ */
|
|
3681
|
-
/* @__PURE__ */
|
|
4732
|
+
/* @__PURE__ */ jsx22("img", { src: pageData.statusImage }),
|
|
4733
|
+
/* @__PURE__ */ jsx22("div", { className: pageData.isError ? "text-[#F7585E]" : "", children: pageData.text })
|
|
3682
4734
|
] }),
|
|
3683
|
-
/* @__PURE__ */
|
|
4735
|
+
/* @__PURE__ */ jsx22(
|
|
3684
4736
|
Button,
|
|
3685
4737
|
{
|
|
3686
4738
|
block: true,
|
|
@@ -3695,7 +4747,7 @@ function WalletModalContent({
|
|
|
3695
4747
|
}
|
|
3696
4748
|
|
|
3697
4749
|
// src/components/SOLModal/index.tsx
|
|
3698
|
-
import { jsx as
|
|
4750
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
3699
4751
|
function WalletContent({
|
|
3700
4752
|
onSuccess,
|
|
3701
4753
|
type
|
|
@@ -3703,17 +4755,17 @@ function WalletContent({
|
|
|
3703
4755
|
const { setVisible, visible } = useWalletModal();
|
|
3704
4756
|
const wallet = useWallet2();
|
|
3705
4757
|
const { events, login } = useMatch();
|
|
3706
|
-
const [status, setStatus] =
|
|
4758
|
+
const [status, setStatus] = useState19("");
|
|
3707
4759
|
const statusRef = React7.useRef(status);
|
|
3708
|
-
const [error, setError] =
|
|
3709
|
-
|
|
4760
|
+
const [error, setError] = useState19("");
|
|
4761
|
+
useEffect17(() => {
|
|
3710
4762
|
const init = async () => {
|
|
3711
4763
|
await wallet.disconnect();
|
|
3712
4764
|
setVisible(true);
|
|
3713
4765
|
};
|
|
3714
4766
|
init();
|
|
3715
4767
|
}, []);
|
|
3716
|
-
|
|
4768
|
+
useEffect17(() => {
|
|
3717
4769
|
if (wallet.connected) {
|
|
3718
4770
|
console.log("wallet.connected", wallet.connected);
|
|
3719
4771
|
toLoginInWallet();
|
|
@@ -3721,14 +4773,14 @@ function WalletContent({
|
|
|
3721
4773
|
}, [wallet.connected]);
|
|
3722
4774
|
const toLoginInWallet = async () => {
|
|
3723
4775
|
if (statusRef.current) return;
|
|
3724
|
-
const
|
|
4776
|
+
const address = wallet.publicKey?.toBase58() || "";
|
|
3725
4777
|
try {
|
|
3726
4778
|
setStatus("nonce");
|
|
3727
4779
|
statusRef.current = "nonce";
|
|
3728
4780
|
const res = type == "bind" ? await getWalletInitApi({
|
|
3729
|
-
address
|
|
4781
|
+
address,
|
|
3730
4782
|
type: "SOL"
|
|
3731
|
-
}) : await getWalletNonceApi({ address
|
|
4783
|
+
}) : await getWalletNonceApi({ address, type: "SOL" });
|
|
3732
4784
|
if (!isSuccess(res)) {
|
|
3733
4785
|
throw new Error(res.message);
|
|
3734
4786
|
}
|
|
@@ -3741,7 +4793,7 @@ function WalletContent({
|
|
|
3741
4793
|
const signedMessage = await wallet.signMessage(encodedMessage);
|
|
3742
4794
|
let obj = {
|
|
3743
4795
|
type: "SOL",
|
|
3744
|
-
address
|
|
4796
|
+
address,
|
|
3745
4797
|
signature: Buffer.from(signedMessage).toString("base64"),
|
|
3746
4798
|
message,
|
|
3747
4799
|
connector_type: "SOL",
|
|
@@ -3777,7 +4829,7 @@ function WalletContent({
|
|
|
3777
4829
|
statusRef.current = "";
|
|
3778
4830
|
}
|
|
3779
4831
|
};
|
|
3780
|
-
return /* @__PURE__ */
|
|
4832
|
+
return /* @__PURE__ */ jsx23(
|
|
3781
4833
|
WalletModalContent,
|
|
3782
4834
|
{
|
|
3783
4835
|
connected: wallet.connected,
|
|
@@ -3837,20 +4889,20 @@ function SOLConnectModal({
|
|
|
3837
4889
|
onSuccess,
|
|
3838
4890
|
...props
|
|
3839
4891
|
}) {
|
|
3840
|
-
const intl =
|
|
3841
|
-
return /* @__PURE__ */
|
|
4892
|
+
const intl = useIntl11();
|
|
4893
|
+
return /* @__PURE__ */ jsx23(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
3842
4894
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
3843
4895
|
}, {
|
|
3844
4896
|
name: "SOL"
|
|
3845
|
-
}), children: /* @__PURE__ */
|
|
4897
|
+
}), children: /* @__PURE__ */ jsx23(ConnectionProvider, { endpoint: clusterApiUrl("devnet"), children: /* @__PURE__ */ jsx23(WalletProvider, { wallets, autoConnect: true, children: /* @__PURE__ */ jsx23(WalletModalProvider, { children: /* @__PURE__ */ jsx23(WalletContent, { onSuccess, type }) }) }) }) });
|
|
3846
4898
|
}
|
|
3847
4899
|
function SOLModal(props) {
|
|
3848
|
-
return props.isOpen && /* @__PURE__ */
|
|
4900
|
+
return props.isOpen && /* @__PURE__ */ jsx23(SOLConnectModal, { ...props });
|
|
3849
4901
|
}
|
|
3850
4902
|
|
|
3851
4903
|
// src/components/TRONModal/index.tsx
|
|
3852
|
-
import React8, { useEffect as
|
|
3853
|
-
import { useIntl as
|
|
4904
|
+
import React8, { useEffect as useEffect19, useMemo as useMemo12, useState as useState21 } from "react";
|
|
4905
|
+
import { useIntl as useIntl12 } from "react-intl";
|
|
3854
4906
|
|
|
3855
4907
|
// src/lib/tron/TronLinkAdapter.ts
|
|
3856
4908
|
var TronLinkAdapter = class {
|
|
@@ -3883,7 +4935,7 @@ var TronLinkAdapter = class {
|
|
|
3883
4935
|
};
|
|
3884
4936
|
|
|
3885
4937
|
// src/hooks/useTRONWallet.ts
|
|
3886
|
-
import { useEffect as
|
|
4938
|
+
import { useEffect as useEffect18, useState as useState20 } from "react";
|
|
3887
4939
|
|
|
3888
4940
|
// src/lib/tron/BitgetAdapter.ts
|
|
3889
4941
|
var BitgetAdapter = class {
|
|
@@ -3928,9 +4980,9 @@ var OKXAdapter = class {
|
|
|
3928
4980
|
// src/hooks/useTRONWallet.ts
|
|
3929
4981
|
var useTRONWallet = () => {
|
|
3930
4982
|
const wallets2 = [new TronLinkAdapter(), new BitgetAdapter(), new OKXAdapter()];
|
|
3931
|
-
const [installedWallets, setInstalledWallets] =
|
|
3932
|
-
const [
|
|
3933
|
-
|
|
4983
|
+
const [installedWallets, setInstalledWallets] = useState20([]);
|
|
4984
|
+
const [address, setAddress] = useState20(null);
|
|
4985
|
+
useEffect18(() => {
|
|
3934
4986
|
const getInstalled = async () => {
|
|
3935
4987
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
3936
4988
|
wallet: wallet2,
|
|
@@ -3940,11 +4992,11 @@ var useTRONWallet = () => {
|
|
|
3940
4992
|
};
|
|
3941
4993
|
getInstalled();
|
|
3942
4994
|
}, []);
|
|
3943
|
-
const [wallet, chooseWallet] =
|
|
4995
|
+
const [wallet, chooseWallet] = useState20(null);
|
|
3944
4996
|
const onConnect = async () => {
|
|
3945
4997
|
setAddress(await wallet.connect());
|
|
3946
4998
|
};
|
|
3947
|
-
|
|
4999
|
+
useEffect18(() => {
|
|
3948
5000
|
if (!wallet) {
|
|
3949
5001
|
setAddress(null);
|
|
3950
5002
|
}
|
|
@@ -3954,33 +5006,33 @@ var useTRONWallet = () => {
|
|
|
3954
5006
|
wallets: wallets2,
|
|
3955
5007
|
chooseWallet,
|
|
3956
5008
|
wallet,
|
|
3957
|
-
address
|
|
5009
|
+
address,
|
|
3958
5010
|
onConnect
|
|
3959
5011
|
};
|
|
3960
5012
|
};
|
|
3961
5013
|
|
|
3962
5014
|
// src/components/TRONModal/index.tsx
|
|
3963
|
-
import { jsx as
|
|
5015
|
+
import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3964
5016
|
function TRONConnectModal({
|
|
3965
5017
|
type = "login",
|
|
3966
5018
|
onSuccess,
|
|
3967
5019
|
...props
|
|
3968
5020
|
}) {
|
|
3969
5021
|
const isDownMd = useDownMd();
|
|
3970
|
-
const intl =
|
|
3971
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address
|
|
5022
|
+
const intl = useIntl12();
|
|
5023
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useTRONWallet();
|
|
3972
5024
|
const iconMaps = {
|
|
3973
|
-
tronlink: /* @__PURE__ */
|
|
3974
|
-
bitget: /* @__PURE__ */
|
|
3975
|
-
okx: /* @__PURE__ */
|
|
5025
|
+
tronlink: /* @__PURE__ */ jsx24(TronLinkIcon, { size: isDownMd ? 36 : 40 }),
|
|
5026
|
+
bitget: /* @__PURE__ */ jsx24(BitgetIcon, { size: isDownMd ? 36 : 40 }),
|
|
5027
|
+
okx: /* @__PURE__ */ jsx24(OKXIcon, { size: isDownMd ? 36 : 40 })
|
|
3976
5028
|
};
|
|
3977
5029
|
const { events, login } = useMatch();
|
|
3978
|
-
const [status, setStatus] =
|
|
5030
|
+
const [status, setStatus] = useState21("");
|
|
3979
5031
|
const statusRef = React8.useRef(status);
|
|
3980
|
-
const [error, setError] =
|
|
3981
|
-
const connected =
|
|
3982
|
-
return !!
|
|
3983
|
-
}, [
|
|
5032
|
+
const [error, setError] = useState21("");
|
|
5033
|
+
const connected = useMemo12(() => {
|
|
5034
|
+
return !!address;
|
|
5035
|
+
}, [address]);
|
|
3984
5036
|
const disconnect = async () => {
|
|
3985
5037
|
setStatus("");
|
|
3986
5038
|
chooseWallet(null);
|
|
@@ -3994,11 +5046,11 @@ function TRONConnectModal({
|
|
|
3994
5046
|
setError("");
|
|
3995
5047
|
};
|
|
3996
5048
|
const toLoginInWallet = async () => {
|
|
3997
|
-
if (statusRef.current || !
|
|
5049
|
+
if (statusRef.current || !address || !wallet) return;
|
|
3998
5050
|
try {
|
|
3999
5051
|
setStatus("nonce");
|
|
4000
5052
|
statusRef.current = "nonce";
|
|
4001
|
-
const res = type == "bind" ? await getWalletInitApi({ address
|
|
5053
|
+
const res = type == "bind" ? await getWalletInitApi({ address, type: "TRON" }) : await getWalletNonceApi({ address, type: "TRON" });
|
|
4002
5054
|
if (!isSuccess(res)) {
|
|
4003
5055
|
throw new Error(res.message);
|
|
4004
5056
|
}
|
|
@@ -4010,7 +5062,7 @@ function TRONConnectModal({
|
|
|
4010
5062
|
const signedMessage = await wallet.signMessage(message);
|
|
4011
5063
|
let obj = {
|
|
4012
5064
|
type: "TRON",
|
|
4013
|
-
address
|
|
5065
|
+
address,
|
|
4014
5066
|
signature: signedMessage,
|
|
4015
5067
|
message,
|
|
4016
5068
|
connector_type: "TRON",
|
|
@@ -4046,7 +5098,7 @@ function TRONConnectModal({
|
|
|
4046
5098
|
statusRef.current = "";
|
|
4047
5099
|
}
|
|
4048
5100
|
};
|
|
4049
|
-
|
|
5101
|
+
useEffect19(() => {
|
|
4050
5102
|
if (wallet) {
|
|
4051
5103
|
console.log("onConnect");
|
|
4052
5104
|
onConnect();
|
|
@@ -4054,36 +5106,36 @@ function TRONConnectModal({
|
|
|
4054
5106
|
setStatus("");
|
|
4055
5107
|
}
|
|
4056
5108
|
}, [wallet]);
|
|
4057
|
-
|
|
4058
|
-
if (
|
|
5109
|
+
useEffect19(() => {
|
|
5110
|
+
if (address) {
|
|
4059
5111
|
toLoginInWallet();
|
|
4060
5112
|
}
|
|
4061
|
-
}, [
|
|
4062
|
-
|
|
5113
|
+
}, [address]);
|
|
5114
|
+
useEffect19(() => {
|
|
4063
5115
|
if (!props.isOpen) {
|
|
4064
5116
|
disconnect();
|
|
4065
5117
|
}
|
|
4066
5118
|
}, [props.isOpen]);
|
|
4067
|
-
return /* @__PURE__ */
|
|
5119
|
+
return /* @__PURE__ */ jsx24(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4068
5120
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4069
5121
|
}, {
|
|
4070
5122
|
name: "TRON"
|
|
4071
|
-
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */
|
|
5123
|
+
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */ jsx24(
|
|
4072
5124
|
WalletModalContent,
|
|
4073
5125
|
{
|
|
4074
5126
|
error,
|
|
4075
5127
|
setError,
|
|
4076
5128
|
status,
|
|
4077
5129
|
disconnect,
|
|
4078
|
-
address:
|
|
5130
|
+
address: address || "",
|
|
4079
5131
|
connected,
|
|
4080
5132
|
visible: true,
|
|
4081
5133
|
setVisible: () => {
|
|
4082
5134
|
}
|
|
4083
5135
|
}
|
|
4084
|
-
) : /* @__PURE__ */
|
|
5136
|
+
) : /* @__PURE__ */ jsx24("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsxs17("div", { className: "matchid-login-recommend-list", children: [
|
|
4085
5137
|
installedWallets.map((wallet2) => {
|
|
4086
|
-
return /* @__PURE__ */
|
|
5138
|
+
return /* @__PURE__ */ jsx24(
|
|
4087
5139
|
RecommendItem,
|
|
4088
5140
|
{
|
|
4089
5141
|
icon: iconMaps[wallet2.walletKey],
|
|
@@ -4096,14 +5148,14 @@ function TRONConnectModal({
|
|
|
4096
5148
|
);
|
|
4097
5149
|
}),
|
|
4098
5150
|
wallets2.filter((wallet2) => !installedWallets.find((installedWallet) => installedWallet.walletKey == wallet2.walletKey)).map((wallet2) => {
|
|
4099
|
-
return /* @__PURE__ */
|
|
5151
|
+
return /* @__PURE__ */ jsx24(
|
|
4100
5152
|
RecommendItem,
|
|
4101
5153
|
{
|
|
4102
5154
|
icon: iconMaps[wallet2.walletKey],
|
|
4103
5155
|
name: wallet2.name,
|
|
4104
5156
|
onClick: () => {
|
|
4105
5157
|
},
|
|
4106
|
-
footer: /* @__PURE__ */
|
|
5158
|
+
footer: /* @__PURE__ */ jsx24(Button, { size: "sm", onClick: () => {
|
|
4107
5159
|
window.open(wallet2.website);
|
|
4108
5160
|
}, children: "Install" })
|
|
4109
5161
|
},
|
|
@@ -4113,12 +5165,12 @@ function TRONConnectModal({
|
|
|
4113
5165
|
] }) }) });
|
|
4114
5166
|
}
|
|
4115
5167
|
function TRONModal(props) {
|
|
4116
|
-
return props.isOpen && /* @__PURE__ */
|
|
5168
|
+
return props.isOpen && /* @__PURE__ */ jsx24(TRONConnectModal, { ...props, type: props.type });
|
|
4117
5169
|
}
|
|
4118
5170
|
|
|
4119
5171
|
// src/components/TONModal/index.tsx
|
|
4120
|
-
import React9, { useEffect as
|
|
4121
|
-
import { useIntl as
|
|
5172
|
+
import React9, { useEffect as useEffect20, useState as useState22 } from "react";
|
|
5173
|
+
import { useIntl as useIntl13 } from "react-intl";
|
|
4122
5174
|
import {
|
|
4123
5175
|
TonConnectUIProvider,
|
|
4124
5176
|
useTonAddress,
|
|
@@ -4126,23 +5178,23 @@ import {
|
|
|
4126
5178
|
useTonConnectUI,
|
|
4127
5179
|
useTonWallet
|
|
4128
5180
|
} from "@tonconnect/ui-react";
|
|
4129
|
-
import { jsx as
|
|
5181
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
4130
5182
|
function WalletContent2({
|
|
4131
5183
|
onSuccess,
|
|
4132
5184
|
type
|
|
4133
5185
|
}) {
|
|
4134
5186
|
const { events, login } = useMatch();
|
|
4135
|
-
const [connected, setConnected] =
|
|
5187
|
+
const [connected, setConnected] = useState22(false);
|
|
4136
5188
|
const wallet = useTonWallet();
|
|
4137
5189
|
const userFriendlyAddress = useTonAddress();
|
|
4138
5190
|
const [tonConnectUI] = useTonConnectUI();
|
|
4139
5191
|
const { state, open, close } = useTonConnectModal();
|
|
4140
|
-
const [status, setStatus] =
|
|
5192
|
+
const [status, setStatus] = useState22("");
|
|
4141
5193
|
const statusRef = React9.useRef(status);
|
|
4142
|
-
const [error, setError] =
|
|
4143
|
-
|
|
5194
|
+
const [error, setError] = useState22("");
|
|
5195
|
+
useEffect20(() => {
|
|
4144
5196
|
const init = async () => {
|
|
4145
|
-
if (
|
|
5197
|
+
if (tonConnectUI.connected) {
|
|
4146
5198
|
await tonConnectUI.disconnect();
|
|
4147
5199
|
}
|
|
4148
5200
|
open();
|
|
@@ -4213,7 +5265,7 @@ function WalletContent2({
|
|
|
4213
5265
|
}
|
|
4214
5266
|
});
|
|
4215
5267
|
}, []);
|
|
4216
|
-
|
|
5268
|
+
useEffect20(() => {
|
|
4217
5269
|
if (wallet) {
|
|
4218
5270
|
setConnected(true);
|
|
4219
5271
|
console.log("Wallet connected:", wallet);
|
|
@@ -4224,7 +5276,7 @@ function WalletContent2({
|
|
|
4224
5276
|
setStatus("");
|
|
4225
5277
|
}
|
|
4226
5278
|
}, [wallet]);
|
|
4227
|
-
|
|
5279
|
+
useEffect20(() => {
|
|
4228
5280
|
console.log({
|
|
4229
5281
|
state,
|
|
4230
5282
|
wallet
|
|
@@ -4253,7 +5305,7 @@ function WalletContent2({
|
|
|
4253
5305
|
}
|
|
4254
5306
|
}
|
|
4255
5307
|
}, [state]);
|
|
4256
|
-
return /* @__PURE__ */
|
|
5308
|
+
return /* @__PURE__ */ jsx25(
|
|
4257
5309
|
WalletModalContent,
|
|
4258
5310
|
{
|
|
4259
5311
|
connected,
|
|
@@ -4263,7 +5315,7 @@ function WalletContent2({
|
|
|
4263
5315
|
setVisible: async (v) => {
|
|
4264
5316
|
console.log("setVisible", v);
|
|
4265
5317
|
if (v) {
|
|
4266
|
-
if (
|
|
5318
|
+
if (tonConnectUI.connected) {
|
|
4267
5319
|
await tonConnectUI.disconnect();
|
|
4268
5320
|
}
|
|
4269
5321
|
setStatus("");
|
|
@@ -4284,28 +5336,28 @@ function TONConnectModal({
|
|
|
4284
5336
|
onSuccess,
|
|
4285
5337
|
...props
|
|
4286
5338
|
}) {
|
|
4287
|
-
const intl =
|
|
5339
|
+
const intl = useIntl13();
|
|
4288
5340
|
const { endpoints, appid } = useLocalStore_default();
|
|
4289
5341
|
const manifestUrl = `${endpoints.back}api/v1/wallet/ton?appid=${appid}&url=` + encodeURIComponent(window.location.origin);
|
|
4290
|
-
return /* @__PURE__ */
|
|
5342
|
+
return /* @__PURE__ */ jsx25(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4291
5343
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4292
5344
|
}, {
|
|
4293
5345
|
name: "TON"
|
|
4294
|
-
}), children: /* @__PURE__ */
|
|
5346
|
+
}), children: /* @__PURE__ */ jsx25(
|
|
4295
5347
|
TonConnectUIProvider,
|
|
4296
5348
|
{
|
|
4297
5349
|
manifestUrl,
|
|
4298
|
-
children: /* @__PURE__ */
|
|
5350
|
+
children: /* @__PURE__ */ jsx25(WalletContent2, { onSuccess, type })
|
|
4299
5351
|
}
|
|
4300
5352
|
) });
|
|
4301
5353
|
}
|
|
4302
5354
|
function TONModal(props) {
|
|
4303
|
-
return props.isOpen && /* @__PURE__ */
|
|
5355
|
+
return props.isOpen && /* @__PURE__ */ jsx25(TONConnectModal, { ...props });
|
|
4304
5356
|
}
|
|
4305
5357
|
|
|
4306
5358
|
// src/components/BTCModal/index.tsx
|
|
4307
|
-
import React10, { useEffect as
|
|
4308
|
-
import { useIntl as
|
|
5359
|
+
import React10, { useEffect as useEffect22, useMemo as useMemo13, useState as useState24 } from "react";
|
|
5360
|
+
import { useIntl as useIntl14 } from "react-intl";
|
|
4309
5361
|
|
|
4310
5362
|
// src/lib/btc/UnisatAdapter.ts
|
|
4311
5363
|
var UnisatAdapter = class {
|
|
@@ -4396,7 +5448,7 @@ var XverseAdapter = class {
|
|
|
4396
5448
|
matchlog_default.log("getAccounts ~ response:", response);
|
|
4397
5449
|
if (response.status === "success") {
|
|
4398
5450
|
const ordinalsAddressItem = response.result.find(
|
|
4399
|
-
(
|
|
5451
|
+
(address) => address.purpose === AddressPurpose.Ordinals
|
|
4400
5452
|
);
|
|
4401
5453
|
this.address = ordinalsAddressItem?.address || "";
|
|
4402
5454
|
return ordinalsAddressItem?.address || "";
|
|
@@ -4459,12 +5511,12 @@ var LeatherAdapter = class {
|
|
|
4459
5511
|
};
|
|
4460
5512
|
|
|
4461
5513
|
// src/hooks/useBTCWallet.ts
|
|
4462
|
-
import { useEffect as
|
|
5514
|
+
import { useEffect as useEffect21, useState as useState23 } from "react";
|
|
4463
5515
|
var useBTCWallet = () => {
|
|
4464
5516
|
const wallets2 = [new UnisatAdapter(), new XverseAdapter(), new LeatherAdapter()];
|
|
4465
|
-
const [installedWallets, setInstalledWallets] =
|
|
4466
|
-
const [
|
|
4467
|
-
|
|
5517
|
+
const [installedWallets, setInstalledWallets] = useState23([]);
|
|
5518
|
+
const [address, setAddress] = useState23(null);
|
|
5519
|
+
useEffect21(() => {
|
|
4468
5520
|
const getInstalled = async () => {
|
|
4469
5521
|
const installed = await Promise.all(wallets2.map((wallet2) => wallet2.isInstalled().then((isInstalled) => ({
|
|
4470
5522
|
wallet: wallet2,
|
|
@@ -4474,11 +5526,11 @@ var useBTCWallet = () => {
|
|
|
4474
5526
|
};
|
|
4475
5527
|
getInstalled();
|
|
4476
5528
|
}, []);
|
|
4477
|
-
const [wallet, chooseWallet] =
|
|
5529
|
+
const [wallet, chooseWallet] = useState23(null);
|
|
4478
5530
|
const onConnect = async () => {
|
|
4479
5531
|
setAddress(await wallet.connect());
|
|
4480
5532
|
};
|
|
4481
|
-
|
|
5533
|
+
useEffect21(() => {
|
|
4482
5534
|
if (!wallet) {
|
|
4483
5535
|
setAddress(null);
|
|
4484
5536
|
}
|
|
@@ -4488,33 +5540,33 @@ var useBTCWallet = () => {
|
|
|
4488
5540
|
wallets: wallets2,
|
|
4489
5541
|
chooseWallet,
|
|
4490
5542
|
wallet,
|
|
4491
|
-
address
|
|
5543
|
+
address,
|
|
4492
5544
|
onConnect
|
|
4493
5545
|
};
|
|
4494
5546
|
};
|
|
4495
5547
|
|
|
4496
5548
|
// src/components/BTCModal/index.tsx
|
|
4497
|
-
import { jsx as
|
|
5549
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4498
5550
|
function BTCConnectModal({
|
|
4499
5551
|
type = "login",
|
|
4500
5552
|
onSuccess,
|
|
4501
5553
|
...props
|
|
4502
5554
|
}) {
|
|
4503
5555
|
const isDownMd = useDownMd();
|
|
4504
|
-
const intl =
|
|
4505
|
-
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address
|
|
5556
|
+
const intl = useIntl14();
|
|
5557
|
+
const { wallets: wallets2, installedWallets, chooseWallet, wallet, address, onConnect } = useBTCWallet();
|
|
4506
5558
|
const iconMaps = {
|
|
4507
|
-
leather: /* @__PURE__ */
|
|
4508
|
-
unisat: /* @__PURE__ */
|
|
4509
|
-
xverse: /* @__PURE__ */
|
|
5559
|
+
leather: /* @__PURE__ */ jsx26(LeatherIcon, { size: isDownMd ? 36 : 40 }),
|
|
5560
|
+
unisat: /* @__PURE__ */ jsx26(UnisatIcon, { size: isDownMd ? 36 : 40 }),
|
|
5561
|
+
xverse: /* @__PURE__ */ jsx26(XverseIcon, { size: isDownMd ? 36 : 40 })
|
|
4510
5562
|
};
|
|
4511
5563
|
const { events, login } = useMatch();
|
|
4512
|
-
const [status, setStatus] =
|
|
5564
|
+
const [status, setStatus] = useState24("");
|
|
4513
5565
|
const statusRef = React10.useRef(status);
|
|
4514
|
-
const [error, setError] =
|
|
4515
|
-
const connected =
|
|
4516
|
-
return !!
|
|
4517
|
-
}, [
|
|
5566
|
+
const [error, setError] = useState24("");
|
|
5567
|
+
const connected = useMemo13(() => {
|
|
5568
|
+
return !!address;
|
|
5569
|
+
}, [address]);
|
|
4518
5570
|
const disconnect = async () => {
|
|
4519
5571
|
wallet && wallet.disconnet && wallet.disconnet();
|
|
4520
5572
|
setStatus("");
|
|
@@ -4523,11 +5575,11 @@ function BTCConnectModal({
|
|
|
4523
5575
|
setError("");
|
|
4524
5576
|
};
|
|
4525
5577
|
const toLoginInWallet = async () => {
|
|
4526
|
-
if (statusRef.current || !
|
|
5578
|
+
if (statusRef.current || !address || !wallet) return;
|
|
4527
5579
|
try {
|
|
4528
5580
|
setStatus("nonce");
|
|
4529
5581
|
statusRef.current = "nonce";
|
|
4530
|
-
const res = type == "bind" ? await getWalletInitApi({ address
|
|
5582
|
+
const res = type == "bind" ? await getWalletInitApi({ address, type: "BTC" }) : await getWalletNonceApi({ address, type: "BTC" });
|
|
4531
5583
|
if (!isSuccess(res)) {
|
|
4532
5584
|
throw new Error(res.message);
|
|
4533
5585
|
}
|
|
@@ -4539,7 +5591,7 @@ function BTCConnectModal({
|
|
|
4539
5591
|
const signedMessage = await wallet.signMessage(message);
|
|
4540
5592
|
let obj = {
|
|
4541
5593
|
type: "BTC",
|
|
4542
|
-
address
|
|
5594
|
+
address,
|
|
4543
5595
|
signature: signedMessage,
|
|
4544
5596
|
message,
|
|
4545
5597
|
connector_type: "BTC",
|
|
@@ -4576,7 +5628,7 @@ function BTCConnectModal({
|
|
|
4576
5628
|
statusRef.current = "";
|
|
4577
5629
|
}
|
|
4578
5630
|
};
|
|
4579
|
-
|
|
5631
|
+
useEffect22(() => {
|
|
4580
5632
|
if (wallet) {
|
|
4581
5633
|
console.log("onConnect");
|
|
4582
5634
|
try {
|
|
@@ -4589,12 +5641,12 @@ function BTCConnectModal({
|
|
|
4589
5641
|
setStatus("");
|
|
4590
5642
|
}
|
|
4591
5643
|
}, [wallet]);
|
|
4592
|
-
|
|
4593
|
-
if (
|
|
5644
|
+
useEffect22(() => {
|
|
5645
|
+
if (address) {
|
|
4594
5646
|
toLoginInWallet();
|
|
4595
5647
|
}
|
|
4596
|
-
}, [
|
|
4597
|
-
|
|
5648
|
+
}, [address]);
|
|
5649
|
+
useEffect22(() => {
|
|
4598
5650
|
if (!props.isOpen) {
|
|
4599
5651
|
disconnect();
|
|
4600
5652
|
}
|
|
@@ -4606,26 +5658,26 @@ function BTCConnectModal({
|
|
|
4606
5658
|
statusRef.current = "";
|
|
4607
5659
|
setError("");
|
|
4608
5660
|
};
|
|
4609
|
-
return /* @__PURE__ */
|
|
5661
|
+
return /* @__PURE__ */ jsx26(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4610
5662
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4611
5663
|
}, {
|
|
4612
5664
|
name: "BTC"
|
|
4613
|
-
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */
|
|
5665
|
+
}), onBack: wallet ? onBack : void 0, children: wallet ? /* @__PURE__ */ jsx26(
|
|
4614
5666
|
WalletModalContent,
|
|
4615
5667
|
{
|
|
4616
5668
|
error,
|
|
4617
5669
|
setError,
|
|
4618
5670
|
status,
|
|
4619
5671
|
disconnect,
|
|
4620
|
-
address:
|
|
5672
|
+
address: address || "",
|
|
4621
5673
|
connected,
|
|
4622
5674
|
visible: true,
|
|
4623
5675
|
setVisible: () => {
|
|
4624
5676
|
}
|
|
4625
5677
|
}
|
|
4626
|
-
) : /* @__PURE__ */
|
|
5678
|
+
) : /* @__PURE__ */ jsx26("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsxs18("div", { className: "matchid-login-recommend-list", children: [
|
|
4627
5679
|
installedWallets.map((wallet2) => {
|
|
4628
|
-
return /* @__PURE__ */
|
|
5680
|
+
return /* @__PURE__ */ jsx26(
|
|
4629
5681
|
RecommendItem,
|
|
4630
5682
|
{
|
|
4631
5683
|
icon: iconMaps[wallet2.walletKey],
|
|
@@ -4638,14 +5690,14 @@ function BTCConnectModal({
|
|
|
4638
5690
|
);
|
|
4639
5691
|
}),
|
|
4640
5692
|
wallets2.filter((wallet2) => !installedWallets.find((installedWallet) => installedWallet.walletKey == wallet2.walletKey)).map((wallet2) => {
|
|
4641
|
-
return /* @__PURE__ */
|
|
5693
|
+
return /* @__PURE__ */ jsx26(
|
|
4642
5694
|
RecommendItem,
|
|
4643
5695
|
{
|
|
4644
5696
|
icon: iconMaps[wallet2.walletKey],
|
|
4645
5697
|
name: wallet2.name,
|
|
4646
5698
|
onClick: () => {
|
|
4647
5699
|
},
|
|
4648
|
-
footer: /* @__PURE__ */
|
|
5700
|
+
footer: /* @__PURE__ */ jsx26(Button, { size: "sm", onClick: () => {
|
|
4649
5701
|
window.open(wallet2.website);
|
|
4650
5702
|
}, children: "Install" })
|
|
4651
5703
|
},
|
|
@@ -4655,23 +5707,23 @@ function BTCConnectModal({
|
|
|
4655
5707
|
] }) }) });
|
|
4656
5708
|
}
|
|
4657
5709
|
function BTCModal(props) {
|
|
4658
|
-
return props.isOpen && /* @__PURE__ */
|
|
5710
|
+
return props.isOpen && /* @__PURE__ */ jsx26(BTCConnectModal, { ...props });
|
|
4659
5711
|
}
|
|
4660
5712
|
|
|
4661
5713
|
// src/components/WalletModal/index.tsx
|
|
4662
|
-
import { useMemo as
|
|
4663
|
-
import { useIntl as
|
|
4664
|
-
import { jsx as
|
|
5714
|
+
import { useMemo as useMemo14 } from "react";
|
|
5715
|
+
import { useIntl as useIntl15 } from "react-intl";
|
|
5716
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
4665
5717
|
function WalletConnectModal({
|
|
4666
5718
|
type,
|
|
4667
5719
|
methods: _methods,
|
|
4668
5720
|
...props
|
|
4669
5721
|
}) {
|
|
4670
|
-
const intl =
|
|
5722
|
+
const intl = useIntl15();
|
|
4671
5723
|
const { walletMap } = useWalletConfig();
|
|
4672
5724
|
const { bind, login } = useUserInfo();
|
|
4673
5725
|
const config = useAppConfig();
|
|
4674
|
-
const methods =
|
|
5726
|
+
const methods = useMemo14(() => {
|
|
4675
5727
|
if (_methods) return _methods;
|
|
4676
5728
|
if (!config.platform) {
|
|
4677
5729
|
return [];
|
|
@@ -4679,13 +5731,13 @@ function WalletConnectModal({
|
|
|
4679
5731
|
const platform = config.platform.map((p) => p.toLowerCase());
|
|
4680
5732
|
return WALLET_METHODS.filter((m) => platform.includes(m));
|
|
4681
5733
|
}, [config.platform, _methods]);
|
|
4682
|
-
return /* @__PURE__ */
|
|
5734
|
+
return /* @__PURE__ */ jsx27(ModalWithHeader, { ...props, title: props.title || intl.formatMessage({
|
|
4683
5735
|
id: type == "bind" ? "bindWith" : "loginWith"
|
|
4684
5736
|
}, {
|
|
4685
5737
|
name: ""
|
|
4686
|
-
}), children: /* @__PURE__ */
|
|
5738
|
+
}), children: /* @__PURE__ */ jsx27("div", { className: "matchid-login-box", children: /* @__PURE__ */ jsx27("div", { className: "matchid-login-recommend-list", children: methods.map((method, index) => {
|
|
4687
5739
|
const m = walletMap[method];
|
|
4688
|
-
return /* @__PURE__ */
|
|
5740
|
+
return /* @__PURE__ */ jsx27(
|
|
4689
5741
|
RecommendItem,
|
|
4690
5742
|
{
|
|
4691
5743
|
icon: m?.icon,
|
|
@@ -4699,7 +5751,586 @@ function WalletConnectModal({
|
|
|
4699
5751
|
}) }) }) });
|
|
4700
5752
|
}
|
|
4701
5753
|
function WalletModal(props) {
|
|
4702
|
-
return props.isOpen && /* @__PURE__ */
|
|
5754
|
+
return props.isOpen && /* @__PURE__ */ jsx27(WalletConnectModal, { ...props });
|
|
5755
|
+
}
|
|
5756
|
+
|
|
5757
|
+
// src/components/AlphaAvatar/index.tsx
|
|
5758
|
+
import { useEffect as useEffect23, useState as useState25 } from "react";
|
|
5759
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
5760
|
+
function AlphaAvatar2({ name, size = 40, className = "" }) {
|
|
5761
|
+
const [avatar, setAvatar] = useState25(void 0);
|
|
5762
|
+
useEffect23(() => {
|
|
5763
|
+
if (name) {
|
|
5764
|
+
const char = name[0].toUpperCase();
|
|
5765
|
+
setAvatar(char);
|
|
5766
|
+
}
|
|
5767
|
+
}, [name]);
|
|
5768
|
+
return /* @__PURE__ */ jsx28("div", { className: `matchid-alpha-avatar ${className}`, style: {
|
|
5769
|
+
width: size,
|
|
5770
|
+
height: size,
|
|
5771
|
+
fontSize: Math.ceil(size / 2)
|
|
5772
|
+
}, children: avatar });
|
|
5773
|
+
}
|
|
5774
|
+
|
|
5775
|
+
// src/components/WalletAsset/index.tsx
|
|
5776
|
+
import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5777
|
+
function WalletAsset({
|
|
5778
|
+
onAssetClick,
|
|
5779
|
+
matchWalletAssetsOptions
|
|
5780
|
+
}) {
|
|
5781
|
+
const walletAssets = useMatchWalletAssets(matchWalletAssetsOptions);
|
|
5782
|
+
const matchWalletAssetList = useMatchWalletAssetList({
|
|
5783
|
+
list: walletAssets.mergedAssets
|
|
5784
|
+
});
|
|
5785
|
+
const { list } = useMatchChain();
|
|
5786
|
+
return /* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-list", children: matchWalletAssetList.list.map((n, index) => {
|
|
5787
|
+
const clickFunc = onAssetClick && onAssetClick(n);
|
|
5788
|
+
const chain = list?.find((m) => m.id.toString() === n.chain_id);
|
|
5789
|
+
const getFooterColor = () => {
|
|
5790
|
+
if (!n.price_change_24h) {
|
|
5791
|
+
return "";
|
|
5792
|
+
}
|
|
5793
|
+
if (n.price_change_24h > 0) {
|
|
5794
|
+
return "matchid-wallet-asset-up";
|
|
5795
|
+
}
|
|
5796
|
+
if (n.price_change_24h < 0) {
|
|
5797
|
+
return "matchid-wallet-asset-down";
|
|
5798
|
+
}
|
|
5799
|
+
return "";
|
|
5800
|
+
};
|
|
5801
|
+
return /* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-item`, onClick: clickFunc, style: {
|
|
5802
|
+
cursor: clickFunc ? "pointer" : "default"
|
|
5803
|
+
}, children: [
|
|
5804
|
+
/* @__PURE__ */ jsxs19("div", { className: "matchid-wallet-asset-logo", title: n.symbol || n.name || "", children: [
|
|
5805
|
+
n.icon ? /* @__PURE__ */ jsx29("img", { src: n.icon, alt: n.symbol, className: `matchid-wallet-asset-icon` }) : /* @__PURE__ */ jsx29(
|
|
5806
|
+
AlphaAvatar2,
|
|
5807
|
+
{
|
|
5808
|
+
className: `matchid-wallet-asset-icon`,
|
|
5809
|
+
size: 40,
|
|
5810
|
+
name: n.symbol || n.name || ""
|
|
5811
|
+
}
|
|
5812
|
+
),
|
|
5813
|
+
chain?.iconUrl && /* @__PURE__ */ jsx29("img", { src: chain.iconUrl, alt: chain.name, className: `matchid-wallet-asset-chain` })
|
|
5814
|
+
] }),
|
|
5815
|
+
/* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-info`, children: [
|
|
5816
|
+
/* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-name`, children: n.symbol }),
|
|
5817
|
+
"price" in n && /* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-content`, children: [
|
|
5818
|
+
/* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-price", children: /* @__PURE__ */ jsx29(
|
|
5819
|
+
NumberFormatter,
|
|
5820
|
+
{
|
|
5821
|
+
value: n.price,
|
|
5822
|
+
prefix: "$ ",
|
|
5823
|
+
tFixNum: 2
|
|
5824
|
+
}
|
|
5825
|
+
) }),
|
|
5826
|
+
/* @__PURE__ */ jsx29("div", { className: "matchid-wallet-asset-value", children: /* @__PURE__ */ jsx29(
|
|
5827
|
+
NumberFormatter,
|
|
5828
|
+
{
|
|
5829
|
+
value: n.value,
|
|
5830
|
+
prefix: "$ ",
|
|
5831
|
+
tFixNum: 2
|
|
5832
|
+
}
|
|
5833
|
+
) })
|
|
5834
|
+
] }),
|
|
5835
|
+
/* @__PURE__ */ jsxs19("div", { className: `matchid-wallet-asset-footer`, children: [
|
|
5836
|
+
/* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-balance`, children: /* @__PURE__ */ jsx29(
|
|
5837
|
+
NumberFormatter,
|
|
5838
|
+
{
|
|
5839
|
+
value: n.balance,
|
|
5840
|
+
tFixNum: 3
|
|
5841
|
+
}
|
|
5842
|
+
) }),
|
|
5843
|
+
"price_change_24h" in n && /* @__PURE__ */ jsx29("div", { className: `matchid-wallet-asset-change ${getFooterColor()}`, children: /* @__PURE__ */ jsx29(
|
|
5844
|
+
NumberFormatter,
|
|
5845
|
+
{
|
|
5846
|
+
prefix: `${(n?.price_change_24h || 0) < 0 ? "-" : "+"} `,
|
|
5847
|
+
value: Math.abs(n.price_change_24h || 0),
|
|
5848
|
+
suffix: "%",
|
|
5849
|
+
tFixNum: 3
|
|
5850
|
+
}
|
|
5851
|
+
) })
|
|
5852
|
+
] })
|
|
5853
|
+
] })
|
|
5854
|
+
] }, index);
|
|
5855
|
+
}) });
|
|
5856
|
+
}
|
|
5857
|
+
|
|
5858
|
+
// src/components/TokenSend/index.tsx
|
|
5859
|
+
import { useEffect as useEffect24, useMemo as useMemo15, useState as useState26 } from "react";
|
|
5860
|
+
import { defineChain as defineChain4, encodeFunctionData as encodeFunctionData2, erc20Abi as erc20Abi3, http as http6, parseUnits as parseUnits2 } from "viem";
|
|
5861
|
+
import { FormattedMessage as FormattedMessage11, useIntl as useIntl16 } from "react-intl";
|
|
5862
|
+
import { jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
5863
|
+
function Input2({
|
|
5864
|
+
onChange,
|
|
5865
|
+
placeholder,
|
|
5866
|
+
value,
|
|
5867
|
+
maxLength,
|
|
5868
|
+
type,
|
|
5869
|
+
error,
|
|
5870
|
+
size = "df"
|
|
5871
|
+
}) {
|
|
5872
|
+
return /* @__PURE__ */ jsxs20("div", { className: `matchid-token-input-box ${"matchid-token-input-" + size}`, children: [
|
|
5873
|
+
/* @__PURE__ */ jsx30(
|
|
5874
|
+
"input",
|
|
5875
|
+
{
|
|
5876
|
+
placeholder,
|
|
5877
|
+
onChange,
|
|
5878
|
+
maxLength,
|
|
5879
|
+
type,
|
|
5880
|
+
value,
|
|
5881
|
+
className: `matchid-token-input ${error ? "matchid-token-input-error" : ""}`
|
|
5882
|
+
}
|
|
5883
|
+
),
|
|
5884
|
+
error && /* @__PURE__ */ jsx30("div", { className: "matchid-token-input-error-text", children: error })
|
|
5885
|
+
] });
|
|
5886
|
+
}
|
|
5887
|
+
function TokenSend({
|
|
5888
|
+
onClose,
|
|
5889
|
+
zIndex,
|
|
5890
|
+
token,
|
|
5891
|
+
onBack
|
|
5892
|
+
}) {
|
|
5893
|
+
const { list: chainList } = useMatchChain();
|
|
5894
|
+
const intl = useIntl16();
|
|
5895
|
+
const { createWalletClient: createWalletClient2 } = useWallet();
|
|
5896
|
+
const isNative = token.address.toLowerCase() == NATIVE_TOKEN_ADDRESS;
|
|
5897
|
+
const chain = useMemo15(() => {
|
|
5898
|
+
return chainList?.find((m) => m.id.toString() === token.chain_id);
|
|
5899
|
+
}, [chainList, token.chain_id]);
|
|
5900
|
+
const walletClient = useMemo15(() => {
|
|
5901
|
+
return createWalletClient2({
|
|
5902
|
+
// @ts-ignore
|
|
5903
|
+
chain: defineChain4(chain),
|
|
5904
|
+
transport: http6()
|
|
5905
|
+
});
|
|
5906
|
+
}, [chain]);
|
|
5907
|
+
const [amount, setAmount] = useState26("");
|
|
5908
|
+
const [address, setAddress] = useState26("");
|
|
5909
|
+
const [loading, setLoading] = useState26(false);
|
|
5910
|
+
const [sending, setSending] = useState26(false);
|
|
5911
|
+
const [txError, setTxError] = useState26("");
|
|
5912
|
+
const transaction = useMemo15(() => {
|
|
5913
|
+
const reg = /^0x[a-fA-F0-9]{40}$/;
|
|
5914
|
+
if (!amount || !address || !reg.test(address)) {
|
|
5915
|
+
return;
|
|
5916
|
+
}
|
|
5917
|
+
const viemChain = defineChain4(chain);
|
|
5918
|
+
const to = isNative ? address : token.address;
|
|
5919
|
+
const value = isNative ? parseUnits2(amount, parseInt(token?.decimals || "18")) : BigInt(0);
|
|
5920
|
+
const data = isNative ? "0x" : encodeFunctionData2({
|
|
5921
|
+
abi: erc20Abi3,
|
|
5922
|
+
functionName: "transfer",
|
|
5923
|
+
args: [address, parseUnits2(amount, parseInt(token?.decimals || "18"))]
|
|
5924
|
+
});
|
|
5925
|
+
return {
|
|
5926
|
+
to,
|
|
5927
|
+
value,
|
|
5928
|
+
data,
|
|
5929
|
+
chain: viemChain
|
|
5930
|
+
};
|
|
5931
|
+
}, [amount, address]);
|
|
5932
|
+
const onCal = async () => {
|
|
5933
|
+
try {
|
|
5934
|
+
setLoading(true);
|
|
5935
|
+
await walletClient?.prepareTransactionRequest(transaction);
|
|
5936
|
+
} catch (error2) {
|
|
5937
|
+
console.error(error2);
|
|
5938
|
+
setTxError(error2.details || error2.message);
|
|
5939
|
+
} finally {
|
|
5940
|
+
setLoading(false);
|
|
5941
|
+
}
|
|
5942
|
+
};
|
|
5943
|
+
const error = useMemo15(() => {
|
|
5944
|
+
setTxError("");
|
|
5945
|
+
let amountError = "";
|
|
5946
|
+
let addressError = "";
|
|
5947
|
+
if (amount) {
|
|
5948
|
+
if (parseFloat(amount) <= 0) {
|
|
5949
|
+
amountError = intl.formatMessage({
|
|
5950
|
+
id: "tokenAmountMin"
|
|
5951
|
+
});
|
|
5952
|
+
} else if ("balance" in token && parseFloat(amount) > (token.balance || 0)) {
|
|
5953
|
+
amountError = intl.formatMessage({
|
|
5954
|
+
id: "tokenAmountMax"
|
|
5955
|
+
});
|
|
5956
|
+
}
|
|
5957
|
+
}
|
|
5958
|
+
if (address) {
|
|
5959
|
+
if (address.length < 42) {
|
|
5960
|
+
addressError = intl.formatMessage({
|
|
5961
|
+
id: "tokenAddressError"
|
|
5962
|
+
});
|
|
5963
|
+
} else {
|
|
5964
|
+
const reg = /^0x[a-fA-F0-9]{40}$/;
|
|
5965
|
+
if (!reg.test(address)) {
|
|
5966
|
+
addressError = intl.formatMessage({
|
|
5967
|
+
id: "tokenAddressError"
|
|
5968
|
+
});
|
|
5969
|
+
}
|
|
5970
|
+
}
|
|
5971
|
+
}
|
|
5972
|
+
if (amount && address && !amountError && !addressError && walletClient) {
|
|
5973
|
+
onCal();
|
|
5974
|
+
}
|
|
5975
|
+
return {
|
|
5976
|
+
amount: amountError,
|
|
5977
|
+
address: addressError
|
|
5978
|
+
};
|
|
5979
|
+
}, [amount, token, chain, address, walletClient]);
|
|
5980
|
+
const onChangeAmount = (e) => {
|
|
5981
|
+
const value = e.target.value;
|
|
5982
|
+
if (value.match(/^\d*\.?\d*$/)) {
|
|
5983
|
+
setAmount(value);
|
|
5984
|
+
}
|
|
5985
|
+
};
|
|
5986
|
+
const canSend = useMemo15(() => {
|
|
5987
|
+
return !error.amount && !error.address && amount && address;
|
|
5988
|
+
}, [error]);
|
|
5989
|
+
const onNext = async () => {
|
|
5990
|
+
setSending(true);
|
|
5991
|
+
if (transaction) {
|
|
5992
|
+
await walletClient?.sendTransaction(transaction);
|
|
5993
|
+
}
|
|
5994
|
+
onClose();
|
|
5995
|
+
};
|
|
5996
|
+
useEffect24(() => {
|
|
5997
|
+
const receiveMessage = (event) => {
|
|
5998
|
+
if (event.data) {
|
|
5999
|
+
if (event.data.source == "match-wallet") {
|
|
6000
|
+
if (event.data.method == "sendTransaction" && event.data.messageId == "openIframe") {
|
|
6001
|
+
onBack();
|
|
6002
|
+
setSending(false);
|
|
6003
|
+
}
|
|
6004
|
+
}
|
|
6005
|
+
}
|
|
6006
|
+
};
|
|
6007
|
+
window.addEventListener("message", receiveMessage);
|
|
6008
|
+
return () => {
|
|
6009
|
+
window.removeEventListener("message", receiveMessage);
|
|
6010
|
+
};
|
|
6011
|
+
}, []);
|
|
6012
|
+
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: [
|
|
6013
|
+
/* @__PURE__ */ jsxs20("div", { className: "matchid-token-send-content", children: [
|
|
6014
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-content`, children: [
|
|
6015
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-header`, children: [
|
|
6016
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-amount-title`, children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "amount" }) }),
|
|
6017
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-chain`, children: [
|
|
6018
|
+
token.icon ? /* @__PURE__ */ jsx30(
|
|
6019
|
+
"img",
|
|
6020
|
+
{
|
|
6021
|
+
src: token?.icon,
|
|
6022
|
+
alt: token?.symbol,
|
|
6023
|
+
className: `matchid-token-amount-chain-icon`
|
|
6024
|
+
}
|
|
6025
|
+
) : /* @__PURE__ */ jsx30(AlphaAvatar, { name: token.symbol || token.name || "", size: 16 }),
|
|
6026
|
+
/* @__PURE__ */ jsx30("span", { children: token?.symbol })
|
|
6027
|
+
] })
|
|
6028
|
+
] }),
|
|
6029
|
+
/* @__PURE__ */ jsx30(
|
|
6030
|
+
Input2,
|
|
6031
|
+
{
|
|
6032
|
+
type: "text",
|
|
6033
|
+
onChange: onChangeAmount,
|
|
6034
|
+
placeholder: intl.formatMessage({
|
|
6035
|
+
id: "amountPlaceholder"
|
|
6036
|
+
}),
|
|
6037
|
+
value: amount,
|
|
6038
|
+
maxLength: 40,
|
|
6039
|
+
error: error.amount || txError
|
|
6040
|
+
}
|
|
6041
|
+
),
|
|
6042
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-footer`, children: [
|
|
6043
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-amount-title`, children: [
|
|
6044
|
+
/* @__PURE__ */ jsx30(FormattedMessage11, { id: "balance" }),
|
|
6045
|
+
":"
|
|
6046
|
+
] }),
|
|
6047
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-amount-value`, children: /* @__PURE__ */ jsx30(NumberFormatter, { value: token.balance, tFixNum: 10, suffix: " " + token.symbol }) })
|
|
6048
|
+
] }),
|
|
6049
|
+
/* @__PURE__ */ jsx30(TransferIcon, { className: "matchid-token-amount-transfer" })
|
|
6050
|
+
] }),
|
|
6051
|
+
/* @__PURE__ */ jsxs20("div", { className: `matchid-token-address-content`, children: [
|
|
6052
|
+
/* @__PURE__ */ jsx30("div", { className: `matchid-token-address-header`, children: /* @__PURE__ */ jsx30("div", { className: `matchid-token-address-title`, children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "receiveTitle" }) }) }),
|
|
6053
|
+
/* @__PURE__ */ jsx30(
|
|
6054
|
+
Input2,
|
|
6055
|
+
{
|
|
6056
|
+
type: "text",
|
|
6057
|
+
size: "sm",
|
|
6058
|
+
onChange: (e) => setAddress(e.target.value),
|
|
6059
|
+
placeholder: intl.formatMessage({
|
|
6060
|
+
id: "receivePlaceholder"
|
|
6061
|
+
}),
|
|
6062
|
+
value: address,
|
|
6063
|
+
maxLength: 42,
|
|
6064
|
+
error: error.address
|
|
6065
|
+
}
|
|
6066
|
+
)
|
|
6067
|
+
] })
|
|
6068
|
+
] }),
|
|
6069
|
+
/* @__PURE__ */ jsx30(
|
|
6070
|
+
Button,
|
|
6071
|
+
{
|
|
6072
|
+
size: "lg",
|
|
6073
|
+
block: true,
|
|
6074
|
+
highlight: true,
|
|
6075
|
+
disabled: !canSend || !!txError,
|
|
6076
|
+
onClick: onNext,
|
|
6077
|
+
loading: loading || sending,
|
|
6078
|
+
children: /* @__PURE__ */ jsx30(FormattedMessage11, { id: "next" })
|
|
6079
|
+
}
|
|
6080
|
+
)
|
|
6081
|
+
] }) });
|
|
6082
|
+
}
|
|
6083
|
+
|
|
6084
|
+
// src/components/TokenDetail/index.tsx
|
|
6085
|
+
import { FormattedMessage as FormattedMessage12, useIntl as useIntl17 } from "react-intl";
|
|
6086
|
+
import { jsx as jsx31, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
6087
|
+
function TokenDetail({
|
|
6088
|
+
onClose,
|
|
6089
|
+
token
|
|
6090
|
+
}) {
|
|
6091
|
+
const { list: chainList } = useMatchChain();
|
|
6092
|
+
const modal = useModal();
|
|
6093
|
+
const chain = chainList?.find((m) => m.id.toString() === token.chain_id);
|
|
6094
|
+
const onSend = () => {
|
|
6095
|
+
modal.show((props) => {
|
|
6096
|
+
return /* @__PURE__ */ jsx31(TokenSend, { onClose: () => {
|
|
6097
|
+
props.close();
|
|
6098
|
+
onClose();
|
|
6099
|
+
}, onBack: props.close, zIndex: props.zIndex, token });
|
|
6100
|
+
});
|
|
6101
|
+
};
|
|
6102
|
+
const intl = useIntl17();
|
|
6103
|
+
return /* @__PURE__ */ jsx31(ModalDrawer, { isOpen: true, title: intl.formatMessage({
|
|
6104
|
+
id: "tokenDetails"
|
|
6105
|
+
}), onClose, children: /* @__PURE__ */ jsxs21("div", { className: `matchid-token-detail`, children: [
|
|
6106
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-main`, children: [
|
|
6107
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-info`, children: [
|
|
6108
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-logo`, children: [
|
|
6109
|
+
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 || "" }),
|
|
6110
|
+
chain?.iconUrl && /* @__PURE__ */ jsx31("img", { src: chain.iconUrl, alt: chain.name, className: `matchid-token-chain` })
|
|
6111
|
+
] }),
|
|
6112
|
+
/* @__PURE__ */ jsxs21("div", { className: `matchid-token-name`, children: [
|
|
6113
|
+
/* @__PURE__ */ jsx31(NumberFormatter, { value: token.balance, tFixNum: 10 }),
|
|
6114
|
+
" ",
|
|
6115
|
+
token.symbol
|
|
6116
|
+
] })
|
|
6117
|
+
] }),
|
|
6118
|
+
token.address.toLowerCase() != NATIVE_TOKEN_ADDRESS && /* @__PURE__ */ jsxs21("div", { className: `matchid-token-contract`, children: [
|
|
6119
|
+
/* @__PURE__ */ jsx31("div", { className: "matchid-token-contract-title", children: "Contract address" }),
|
|
6120
|
+
/* @__PURE__ */ jsx31("div", { className: "matchid-token-contract-address", children: token.address })
|
|
6121
|
+
] })
|
|
6122
|
+
] }),
|
|
6123
|
+
/* @__PURE__ */ jsx31(Button, { size: "lg", block: true, highlight: true, onClick: onSend, children: /* @__PURE__ */ jsx31(FormattedMessage12, { id: "send" }) })
|
|
6124
|
+
] }) });
|
|
6125
|
+
}
|
|
6126
|
+
|
|
6127
|
+
// src/components/TokenSendList/index.tsx
|
|
6128
|
+
import { useState as useState27 } from "react";
|
|
6129
|
+
import { FormattedMessage as FormattedMessage13 } from "react-intl";
|
|
6130
|
+
import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
6131
|
+
function TokenSendList({ close }) {
|
|
6132
|
+
const walletAssets = useMatchWalletAssets();
|
|
6133
|
+
const matchWalletAssetList = useMatchWalletAssetList({
|
|
6134
|
+
list: walletAssets.mergedAssets
|
|
6135
|
+
});
|
|
6136
|
+
const { list } = useMatchChain();
|
|
6137
|
+
const [checked, setChecked] = useState27();
|
|
6138
|
+
const modal = useModal();
|
|
6139
|
+
const onNext = () => {
|
|
6140
|
+
checked && modal.show((props) => {
|
|
6141
|
+
return /* @__PURE__ */ jsx32(TokenSend, { onClose: () => {
|
|
6142
|
+
props.close();
|
|
6143
|
+
close();
|
|
6144
|
+
}, onBack: props.close, zIndex: props.zIndex, token: checked });
|
|
6145
|
+
});
|
|
6146
|
+
};
|
|
6147
|
+
return /* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-list-box", children: [
|
|
6148
|
+
/* @__PURE__ */ jsx32("div", { className: "matchid-token-send-list", children: matchWalletAssetList.list.map((n, index) => {
|
|
6149
|
+
const chain = list?.find((m) => m.id.toString() === n.chain_id);
|
|
6150
|
+
return /* @__PURE__ */ jsxs22(
|
|
6151
|
+
"div",
|
|
6152
|
+
{
|
|
6153
|
+
className: `matchid-token-send-item ${checked?.address == n.address ? "matchid-token-send-chekced" : ""}`,
|
|
6154
|
+
onClick: () => {
|
|
6155
|
+
setChecked(n);
|
|
6156
|
+
},
|
|
6157
|
+
children: [
|
|
6158
|
+
/* @__PURE__ */ jsx32(Radio, { checked: checked?.address == n.address }),
|
|
6159
|
+
/* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-content", children: [
|
|
6160
|
+
/* @__PURE__ */ jsxs22("div", { className: "matchid-token-send-logo", children: [
|
|
6161
|
+
n.icon ? /* @__PURE__ */ jsx32("img", { src: n.icon, alt: n.symbol, className: `matchid-token-send-icon` }) : /* @__PURE__ */ jsx32(
|
|
6162
|
+
AlphaAvatar2,
|
|
6163
|
+
{
|
|
6164
|
+
className: `matchid-token-send-icon`,
|
|
6165
|
+
size: 40,
|
|
6166
|
+
name: n.symbol || n.name || ""
|
|
6167
|
+
}
|
|
6168
|
+
),
|
|
6169
|
+
chain?.iconUrl && /* @__PURE__ */ jsx32(
|
|
6170
|
+
"img",
|
|
6171
|
+
{
|
|
6172
|
+
src: chain.iconUrl,
|
|
6173
|
+
alt: chain.name,
|
|
6174
|
+
className: `matchid-token-send-chain`
|
|
6175
|
+
}
|
|
6176
|
+
)
|
|
6177
|
+
] }),
|
|
6178
|
+
/* @__PURE__ */ jsxs22("div", { className: `matchid-token-send-info`, children: [
|
|
6179
|
+
/* @__PURE__ */ jsx32("div", { className: `matchid-token-send-name`, children: n.symbol }),
|
|
6180
|
+
/* @__PURE__ */ jsx32("div", { className: `matchid-token-send-balance`, children: /* @__PURE__ */ jsx32(NumberFormatter, { value: n.balance, tFixNum: 3 }) })
|
|
6181
|
+
] })
|
|
6182
|
+
] })
|
|
6183
|
+
]
|
|
6184
|
+
},
|
|
6185
|
+
index
|
|
6186
|
+
);
|
|
6187
|
+
}) }),
|
|
6188
|
+
/* @__PURE__ */ jsx32(Button, { size: "lg", highlight: true, block: true, disabled: !checked, onClick: onNext, children: /* @__PURE__ */ jsx32(FormattedMessage13, { id: "next" }) })
|
|
6189
|
+
] });
|
|
6190
|
+
}
|
|
6191
|
+
|
|
6192
|
+
// src/components/TransactionList/index.tsx
|
|
6193
|
+
import InfiniteScroll from "react-infinite-scroll-component";
|
|
6194
|
+
import { useEffect as useEffect25, useMemo as useMemo16, useState as useState28 } from "react";
|
|
6195
|
+
import { decodeFunctionData, defineChain as defineChain5, formatUnits as formatUnits3 } from "viem";
|
|
6196
|
+
import { erc20Abi as erc20Abi4 } from "viem";
|
|
6197
|
+
import { FormattedMessage as FormattedMessage14 } from "react-intl";
|
|
6198
|
+
import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
6199
|
+
var Item = ({ data }) => {
|
|
6200
|
+
const { address } = useWallet();
|
|
6201
|
+
const isOut = data.from.toLowerCase() == address.toLowerCase();
|
|
6202
|
+
const { chain, chainId, explorerLink, formatUnits: chainFormatUnits } = useMatchChain();
|
|
6203
|
+
const { contracts } = useContractStore_default();
|
|
6204
|
+
const [shouldRefetch, setShouldRefetch] = useState28(true);
|
|
6205
|
+
const transferType = useMemo16(() => {
|
|
6206
|
+
const methodId = data.input.substring(2, 10);
|
|
6207
|
+
if (methodId == "095ea7b3") {
|
|
6208
|
+
return "erc20_approve";
|
|
6209
|
+
}
|
|
6210
|
+
if (methodId == "a9059cbb") {
|
|
6211
|
+
return "erc20_transfer";
|
|
6212
|
+
}
|
|
6213
|
+
return "unknown";
|
|
6214
|
+
}, [data.input]);
|
|
6215
|
+
const to = useMemo16(() => {
|
|
6216
|
+
if (!isOut) {
|
|
6217
|
+
return data.from;
|
|
6218
|
+
}
|
|
6219
|
+
if (transferType == "erc20_transfer") {
|
|
6220
|
+
const decodeData = decodeFunctionData({
|
|
6221
|
+
abi: erc20Abi4,
|
|
6222
|
+
data: data.input
|
|
6223
|
+
});
|
|
6224
|
+
return decodeData.args[0];
|
|
6225
|
+
}
|
|
6226
|
+
return data.to;
|
|
6227
|
+
}, [data.input, transferType, data.to, isOut]);
|
|
6228
|
+
const amount = useMemo16(() => {
|
|
6229
|
+
if (transferType == "erc20_transfer") {
|
|
6230
|
+
const decodeData = decodeFunctionData({
|
|
6231
|
+
abi: erc20Abi4,
|
|
6232
|
+
data: data.input
|
|
6233
|
+
});
|
|
6234
|
+
const value = decodeData.args[1];
|
|
6235
|
+
return formatUnits3(value, contracts[`${chainId}-${data.to.toLowerCase()}`]?.decimals || 18);
|
|
6236
|
+
}
|
|
6237
|
+
return chainFormatUnits(BigInt(data.value));
|
|
6238
|
+
}, [data.input, transferType, data.value, contracts, chainId, data.to]);
|
|
6239
|
+
const hashQuery = useHash({
|
|
6240
|
+
hash: data.hash,
|
|
6241
|
+
//@ts-ignore
|
|
6242
|
+
chain: defineChain5(chain),
|
|
6243
|
+
refetchInterval: shouldRefetch ? 3e3 : false,
|
|
6244
|
+
enabled: shouldRefetch && data.source == "local"
|
|
6245
|
+
});
|
|
6246
|
+
const status = useMemo16(() => {
|
|
6247
|
+
if (data.source == "matchain") {
|
|
6248
|
+
switch (data.extra.status) {
|
|
6249
|
+
case "ok":
|
|
6250
|
+
return "success";
|
|
6251
|
+
case "error":
|
|
6252
|
+
return "error";
|
|
6253
|
+
}
|
|
6254
|
+
} else if (data.source == "auto") {
|
|
6255
|
+
if (data.extra.receipt_status == 1) {
|
|
6256
|
+
return "success";
|
|
6257
|
+
} else {
|
|
6258
|
+
return "error";
|
|
6259
|
+
}
|
|
6260
|
+
} else {
|
|
6261
|
+
if (hashQuery.data == 1) {
|
|
6262
|
+
return "success";
|
|
6263
|
+
}
|
|
6264
|
+
if (hashQuery.data == -1) {
|
|
6265
|
+
return "error";
|
|
6266
|
+
}
|
|
6267
|
+
if (Date.now() / 1e3 - parseInt(data.timestamp) > 3600) {
|
|
6268
|
+
return "error";
|
|
6269
|
+
}
|
|
6270
|
+
}
|
|
6271
|
+
return "loading";
|
|
6272
|
+
}, [data.extra?.status, data.source, hashQuery.data]);
|
|
6273
|
+
useEffect25(() => {
|
|
6274
|
+
if (data.hash) {
|
|
6275
|
+
setShouldRefetch(status == "loading");
|
|
6276
|
+
}
|
|
6277
|
+
}, [status, data.hash]);
|
|
6278
|
+
const symbol = useMemo16(() => {
|
|
6279
|
+
if (transferType == "erc20_transfer") {
|
|
6280
|
+
const contract = contracts[`${chainId}-${data.to.toLowerCase()}`];
|
|
6281
|
+
return contract?.symbol || contract?.name || "unknown";
|
|
6282
|
+
}
|
|
6283
|
+
return chain?.nativeCurrency.symbol || chain?.nativeCurrency.name;
|
|
6284
|
+
}, [transferType, chain, contracts, chainId, data.to]);
|
|
6285
|
+
return /* @__PURE__ */ jsxs23(
|
|
6286
|
+
"a",
|
|
6287
|
+
{
|
|
6288
|
+
href: explorerLink(`tx/${data.hash}`),
|
|
6289
|
+
target: "_blank",
|
|
6290
|
+
className: `matchid-transaction-item`,
|
|
6291
|
+
children: [
|
|
6292
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transacton-item-container`, children: [
|
|
6293
|
+
/* @__PURE__ */ jsx33("div", { className: "matchid-transaction-item-icon", children: /* @__PURE__ */ jsx33(ArrowSendIcon, { className: !isOut ? "rotate-180" : "" }) }),
|
|
6294
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transaction-item-details`, children: [
|
|
6295
|
+
/* @__PURE__ */ jsx33("div", { className: `matchid-transaction-item-address`, children: formatAddress(to, 6, 4) }),
|
|
6296
|
+
/* @__PURE__ */ jsx33(
|
|
6297
|
+
"div",
|
|
6298
|
+
{
|
|
6299
|
+
className: `matchid-transaction-item-timestamp`,
|
|
6300
|
+
children: formatDate(data.timestamp, "MM/DD HH:mm:ss")
|
|
6301
|
+
}
|
|
6302
|
+
)
|
|
6303
|
+
] })
|
|
6304
|
+
] }),
|
|
6305
|
+
/* @__PURE__ */ jsxs23("div", { className: `matchid-transaction-item-amount ${"matchid-transaction-item-" + status}`, children: [
|
|
6306
|
+
/* @__PURE__ */ jsx33(NumberFormatter, { value: amount, tFixNum: 6, prefix: isOut ? "-" : "+", suffix: " " + symbol }),
|
|
6307
|
+
status == "loading" && /* @__PURE__ */ jsx33(LoadingIcon_default, { color: "#000000", size: 16, rotate: true }),
|
|
6308
|
+
status == "success" && /* @__PURE__ */ jsx33(CheckRoundIcon, { size: 16 }),
|
|
6309
|
+
status == "error" && /* @__PURE__ */ jsx33(InfoRoundIcon, { size: 16 })
|
|
6310
|
+
] })
|
|
6311
|
+
]
|
|
6312
|
+
}
|
|
6313
|
+
);
|
|
6314
|
+
};
|
|
6315
|
+
function TransactionList({
|
|
6316
|
+
scrollableTarget
|
|
6317
|
+
}) {
|
|
6318
|
+
const { fetchMoreData, hasMore, items } = useMatchWalletRecords();
|
|
6319
|
+
return /* @__PURE__ */ jsx33(
|
|
6320
|
+
InfiniteScroll,
|
|
6321
|
+
{
|
|
6322
|
+
scrollableTarget,
|
|
6323
|
+
dataLength: items.length,
|
|
6324
|
+
next: fetchMoreData,
|
|
6325
|
+
hasMore,
|
|
6326
|
+
loader: /* @__PURE__ */ jsxs23("div", { className: "matchid-list-nomore", children: [
|
|
6327
|
+
/* @__PURE__ */ jsx33(LoadingIcon_default, { rotate: true, size: 16, color: "black" }),
|
|
6328
|
+
"Loading..."
|
|
6329
|
+
] }),
|
|
6330
|
+
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" }) }),
|
|
6331
|
+
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)) })
|
|
6332
|
+
}
|
|
6333
|
+
);
|
|
4703
6334
|
}
|
|
4704
6335
|
|
|
4705
6336
|
export {
|
|
@@ -4715,9 +6346,9 @@ export {
|
|
|
4715
6346
|
mintPassportNftApi,
|
|
4716
6347
|
useUserInfo,
|
|
4717
6348
|
useMatchEvents,
|
|
6349
|
+
useModal,
|
|
4718
6350
|
useWallet,
|
|
4719
6351
|
useCopyClipboard,
|
|
4720
|
-
useModal,
|
|
4721
6352
|
useToast,
|
|
4722
6353
|
wallet_exports,
|
|
4723
6354
|
useMatchChain,
|
|
@@ -4732,12 +6363,20 @@ export {
|
|
|
4732
6363
|
TONModal,
|
|
4733
6364
|
BTCModal,
|
|
4734
6365
|
WalletModal,
|
|
6366
|
+
WalletAsset,
|
|
6367
|
+
TokenSend,
|
|
6368
|
+
TokenDetail,
|
|
6369
|
+
TokenSendList,
|
|
6370
|
+
TransactionList,
|
|
4735
6371
|
components_exports,
|
|
4736
6372
|
useMatchWallet,
|
|
4737
6373
|
useMatchWalletRecords,
|
|
6374
|
+
useMatchWalletAssets,
|
|
6375
|
+
useMatchWalletAssetList,
|
|
4738
6376
|
useReceipt,
|
|
6377
|
+
useTransaction,
|
|
4739
6378
|
hooks_exports,
|
|
4740
6379
|
MatchProvider,
|
|
4741
6380
|
useMatch
|
|
4742
6381
|
};
|
|
4743
|
-
//# sourceMappingURL=chunk-
|
|
6382
|
+
//# sourceMappingURL=chunk-KIVNILBF.mjs.map
|