From 14d25494036e680521928b5fc195ee4fde4c04f0 Mon Sep 17 00:00:00 2001 From: Syed Ghufran Hassan Date: Wed, 21 Jan 2026 16:48:43 +0500 Subject: [PATCH] Update MessageBoard.jsx feat: add wallet event listeners for real-time account/chain updates - Listen for accountsChanged to update UI when user switches/disconnects wallet - Listen for chainChanged to detect network changes and prompt Base network - Listen for disconnect event to properly reset state - Add cleanup to prevent memory leaks --- components/MessageBoard.jsx | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/components/MessageBoard.jsx b/components/MessageBoard.jsx index dfb47cc..f1226e0 100644 --- a/components/MessageBoard.jsx +++ b/components/MessageBoard.jsx @@ -38,6 +38,53 @@ export default function MessageBoard() { loadMessages(); }, []); + // Add this useEffect to handle account/chain changes and cleanup +useEffect(() => { + if (!window.ethereum && !(sdk?.wallet?.ethProvider)) return; + + const provider = getProvider(); + if (!provider) return; + + // Handle account changes + const handleAccountsChanged = (accounts) => { + if (accounts.length === 0) { + setUserAddress(""); + setBalance("0"); + addLog("Disconnected"); + } else { + setUserAddress(accounts[0]); + addLog("Account changed"); + loadMessages(); + } + }; + + // Handle chain changes + const handleChainChanged = (chainId) => { + if (Number(chainId) !== BASE_CHAIN_ID_DECIMAL) { + addLog("Wrong network! Please switch to Base"); + } else { + loadMessages(); + } + }; + + // Handle disconnect + const handleDisconnect = () => { + setUserAddress(""); + setBalance("0"); + addLog("Disconnected"); + }; + + provider.on("accountsChanged", handleAccountsChanged); + provider.on("chainChanged", handleChainChanged); + provider.on("disconnect", handleDisconnect); + + return () => { + provider.removeListener("accountsChanged", handleAccountsChanged); + provider.removeListener("chainChanged", handleChainChanged); + provider.removeListener("disconnect", handleDisconnect); + }; +}, [addLog]); + // --- 1. Простой выбор провайдера --- const getProvider = () => { // Если открыто в Warpcast