From de853931ffa2699569f9f47f8a533bbc15febdd3 Mon Sep 17 00:00:00 2001 From: eericxu <2681350846@qq.com> Date: Thu, 11 Jul 2024 11:01:22 +0800 Subject: [PATCH] fix ton-connect --- lib/wallet/TonConnect.ts | 25 ++++++++++--------------- lib/wallet/hooks.ts | 3 +++ pages/index.tsx | 11 +++++++---- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/lib/wallet/TonConnect.ts b/lib/wallet/TonConnect.ts index 182b875a..614a6a78 100644 --- a/lib/wallet/TonConnect.ts +++ b/lib/wallet/TonConnect.ts @@ -70,30 +70,25 @@ export async function CreateMessage(message: ParsedMessage): Promise { } - +let _toncoonectui: TonConnectUI; export class TonConnect implements BaseWallet{ isInit: boolean; tonconnectui: TonConnectUI tonProof?: TonProofItemReplySuccess - + cancelStateSub?: () => void async init(): Promise { if(this.isInit) return const payload = await fetch('https://tonapi.io/v2/tonconnect/payload').then(res => res.json()).then(res => res.payload) this.tonProof = undefined - this.tonconnectui = new TonConnectUI({ - manifestUrl: `${window.location.origin}/tonconnect-manifest${IS_DEV?'-dev':''}.json`, - }); + if(_toncoonectui){ + this.tonconnectui = _toncoonectui + }else{ + this.tonconnectui = new TonConnectUI({ + manifestUrl: `${window.location.origin}/tonconnect-manifest${IS_DEV?'-dev':''}.json`, + }); + } + _toncoonectui = this.tonconnectui this.tonconnectui.setConnectRequestParameters({state: 'ready', value: { tonProof: payload }}) - this.tonconnectui.onStatusChange((walelt) => { - this.tonProof = undefined - if(walelt?.connectItems?.tonProof){ - const tonProof = walelt.connectItems.tonProof as TonProofItemReplySuccess - if(tonProof.proof){ - this.tonProof = tonProof - } - } - console.info('tonwallet:', walelt) - }) this.isInit = true; } diff --git a/lib/wallet/hooks.ts b/lib/wallet/hooks.ts index 2c2d06bf..323ce7e3 100644 --- a/lib/wallet/hooks.ts +++ b/lib/wallet/hooks.ts @@ -447,6 +447,9 @@ export function useLoginUser(key: KEY_TYPE = "files:login"): WrapLoginUser { algorand.wallet.disconnect(); algorand.isInit = false; algorand.account = null; + } else if(account.wallet === 'ton-connect'){ + const tonConnect = WALLETMAP['ton-connect'] as TonConnect; + tonConnect.tonconnectui.disconnect(); } setLoginUser({ ...defLoginUser }); diff --git a/pages/index.tsx b/pages/index.tsx index 76fcb3d2..6c89b3ce 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -21,6 +21,7 @@ import { WALLETMAP, lastUser, useContextWrapLoginUser } from "../lib/wallet/hook import { getPerfix } from "../lib/wallet/tools"; import { useWeb3Auth } from "../lib/web3auth/web3auth"; import { StorageChainConfig } from "./setting"; +import { TonProofItemReplySuccess } from "@tonconnect/ui-react"; interface ItemWallet { name: string; image: string; @@ -669,15 +670,17 @@ function Home({ className }: { className?: string }) { const _onClickTonConnect = useCallback(async () => { const tc = WALLETMAP["ton-connect"] as TonConnect; await tc.init(); - tc.tonconnectui.onStatusChange((w) => { - if (w) { + const cancelStatusSub = tc.tonconnectui.onStatusChange((w) => { + if (w && w.connectItems && w.connectItems.tonProof && (w.connectItems.tonProof as TonProofItemReplySuccess).proof) { + tc.tonProof = (w.connectItems.tonProof as TonProofItemReplySuccess); tc.login() .then(([_accounts, lu]) => { setLogined(lu, tc); }) .catch(console.error); } - tc.tonconnectui.closeModal() + tc.tonconnectui.closeModal(); + cancelStatusSub(); }); await tc.tonconnectui.openModal(); }, []); @@ -928,7 +931,7 @@ function Home({ className }: { className?: string }) { {/* Ton Connect */}
- {"Ton Connect"} + {"Ton Connect"}
setShowMore(!showMore)}> More Options