UNPKG

@coinmeca/wallet-provider

Version:

This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

41 lines 1.83 kB
"use client"; import React, { createContext, useContext, useEffect, useLayoutEffect, useState } from "react"; import { CoinmecaWalletAdapter } from "@coinmeca/wallet-sdk/adapter"; import { TelegramProvider } from "./telegram"; const CoinmecaWalletAdapterContext = createContext(undefined); export const useCoinmecaWallet = () => { const context = useContext(CoinmecaWalletAdapterContext); if (!context) throw new Error("CoinmecaWalletAdapterContext is not initialized. Ensure the provider is set up correctly before using useCoinmecaWallet."); return context; }; export const CoinmecaWalletAdapterContextProvider = ({ config, children }) => { const [adapter, setAdapter] = useState(); const [updates, setUpdate] = useState(false); const update = () => setUpdate((_) => !_); const address = adapter?.address; const chain = adapter?.chain; useLayoutEffect(() => { setAdapter(window?.ethereum?.providerMap?.get("CoinmecaWallet") || new CoinmecaWalletAdapter(config)); const updateStorage = (event) => { if (event.storageArea === localStorage) update(); }; window.addEventListener("storage", updateStorage); return () => { window.removeEventListener("storage", updateStorage); }; }, []); useEffect(() => { adapter?.on("accountChanged", update); adapter?.on("chainChanged", update); return () => { adapter?.off("accountChanged", update); adapter?.off("chainChanged", update); }; }, [adapter]); return (<TelegramProvider> <CoinmecaWalletAdapterContext.Provider value={{ adapter, address, chain }}>{children}</CoinmecaWalletAdapterContext.Provider> </TelegramProvider>); }; //# sourceMappingURL=adapter.jsx.map