From 745a8cfa721d86aba1f2a33687bc0bb3ee30e2e0 Mon Sep 17 00:00:00 2001 From: Buchi-Einstein Date: Mon, 1 Jun 2026 18:24:02 +0100 Subject: [PATCH] I implemented Query-Deduplication | Structural Cache Sharing for Multi-Wallet Hook Passes --- src/app/components/nav.jsx | 24 ++- .../components/providers/WalletProvider.tsx | 144 ++++++++++++++++++ src/app/governance/page.tsx | 21 ++- src/app/hooks/useWalletState.ts | 1 + src/app/layout.tsx | 9 +- 5 files changed, 187 insertions(+), 12 deletions(-) create mode 100644 src/app/components/providers/WalletProvider.tsx create mode 100644 src/app/hooks/useWalletState.ts diff --git a/src/app/components/nav.jsx b/src/app/components/nav.jsx index 1d38ed0..f6b52aa 100644 --- a/src/app/components/nav.jsx +++ b/src/app/components/nav.jsx @@ -6,19 +6,32 @@ import Link from "next/link"; import { useRouter, usePathname } from "next/navigation"; import { Wallet, Bell, CircleUser, LogOut } from "lucide-react"; import { useProgressBar } from "./TopLoadingBar"; +import { useWalletState } from "../hooks/useWalletState"; const Nav = memo(() => { const hasAnomaly = true; const router = useRouter(); const pathname = usePathname(); const { start, done } = useProgressBar(); + const { wallet, isChecking, refreshWalletState } = useWalletState(); + + const walletLabel = wallet?.connected + ? wallet.publicKey + ? `${wallet.publicKey.slice(0, 4)}...${wallet.publicKey.slice(-4)}` + : "Wallet connected" + : "Connect Wallet"; const handleConnectWallet = useCallback(async () => { start(); - await new Promise((resolve) => setTimeout(resolve, 1200)); + const state = await refreshWalletState(); done(); - alert("Connect Wallet clicked! (Add your Web3 logic here)"); - }, [start, done]); + + if (state?.connected) { + alert(`Connected wallet: ${state.publicKey ?? "unknown"}`); + } else { + alert("No active Stellar wallet detected. Please connect your extension."); + } + }, [refreshWalletState, start, done]); return (
@@ -48,12 +61,11 @@ const Nav = memo(() => {
-
-
+
+ Active wallet status: {walletStatus} +
{/* --- Consensus Statistics Rows --- */}
} subtitle="Active voting weights" /> diff --git a/src/app/hooks/useWalletState.ts b/src/app/hooks/useWalletState.ts new file mode 100644 index 0000000..3fe21f8 --- /dev/null +++ b/src/app/hooks/useWalletState.ts @@ -0,0 +1 @@ +export { useWalletState, WalletProvider, type WalletState } from "@/app/components/providers/WalletProvider"; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 061c977..06dc48d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,6 +5,7 @@ import "./globals.css"; import { ThemeProvider } from "./components/ThemeProvider"; import { ProgressBarProvider } from "./components/TopLoadingBar"; import { UserProvider } from "./components/providers/UserProvider"; +import { WalletProvider } from "./components/providers/WalletProvider"; import Script from "next/script"; import {SocketProvider} from "./components/providers/SocketProvider"; @@ -72,9 +73,11 @@ export default function RootLayout({ disableTransitionOnChange > - - {children} - + + + {children} + +