From d0fce88dbd793aff3dcfd1a82b1033f3970c340d Mon Sep 17 00:00:00 2001 From: thesn10 <38666407+thesn10@users.noreply.github.com> Date: Thu, 2 Jul 2026 22:22:04 +0200 Subject: [PATCH] Add WalletProvider --- app/src/state/wallet.tsx | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 app/src/state/wallet.tsx diff --git a/app/src/state/wallet.tsx b/app/src/state/wallet.tsx new file mode 100644 index 0000000..abcb2ae --- /dev/null +++ b/app/src/state/wallet.tsx @@ -0,0 +1,44 @@ +import type { JSX, PropsWithChildren } from "react"; +import { createContext, useCallback, useContext, useMemo, useState } from "react"; + +export type WalletName = "phantom" | "solflare" | "backpack"; + +const WALLET_ADDRESSES: Record = { + phantom: "Gh9Z…k3mP", + solflare: "Bx3K…7pRq", + backpack: "Kx7P…2mJc", +}; + +interface WalletContextValue { + connected: boolean; + address: string | null; + connect: (wallet: WalletName) => void; + disconnect: () => void; +} + +const WalletContext = createContext(null); + +export function WalletProvider({ children }: PropsWithChildren): JSX.Element { + const [address, setAddress] = useState(null); + + const connect = useCallback((wallet: WalletName) => { + setAddress(WALLET_ADDRESSES[wallet]); + }, []); + + const disconnect = useCallback(() => { + setAddress(null); + }, []); + + const value = useMemo( + () => ({ connected: address !== null, address, connect, disconnect }), + [address, connect, disconnect], + ); + + return {children}; +} + +export function useWallet(): WalletContextValue { + const ctx = useContext(WalletContext); + if (!ctx) throw new Error("useWallet must be used within a WalletProvider"); + return ctx; +}