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).

87 lines 3.9 kB
"use client"; import React, { createContext, useContext, useLayoutEffect, useState } from "react"; import { CoinmecaWalletProvider } from "@coinmeca/wallet-sdk/provider"; import { TelegramProvider } from "./telegram"; const CoinmecaWalletContext = createContext(undefined); export const useCoinmecaWalletProvider = () => { const context = useContext(CoinmecaWalletContext); if (!context) throw new Error("CoinmecaWalletContext is not initialized yet. Ensure the provider is correctly set up before using useCoinmecaWalletProvider."); return context; }; export const CoinmecaWalletContextProvider = ({ children }) => { const [provider, setProvider] = useState(); const [, setUpdate] = useState(0); const updates = () => setUpdate((_) => _ + 1); useLayoutEffect(() => { const sessionId = new Date().toJSON(); const chainId = window?.coinmeca?.request?.chainId; const provider = window?.coinmeca?.wallet || new CoinmecaWalletProvider({ chainId, sessionId }); setProvider(provider); const updateStorage = (event) => { if (event.storageArea === localStorage) updates(); }; window.addEventListener("storage", updateStorage); return () => { window.removeEventListener("storage", updateStorage); }; }, []); useLayoutEffect(() => { if (provider) { provider?.on("lock", updates); provider?.on("unlock", updates); provider?.on("lockTimeUpdated", updates); provider?.on("accountChanged", updates); provider?.on("accountUpdated", updates); provider?.on("chainChanged", updates); provider?.on("chainUpdated", updates); provider?.on("appUpdated", updates); provider?.on("tokenUpdated", updates); provider?.on("nftUpdated", updates); provider?.on("nftUpdated", updates); provider?.on("txUpdated", updates); provider?.on("storageUpdated", updates); provider?.on("storageCleared", updates); return () => { provider?.off("lock", updates); provider?.off("unlock", updates); provider?.off("lockTimeUpdated", updates); provider?.off("accountChanged", updates); provider?.off("accountUpdated", updates); provider?.off("chainChanged", updates); provider?.off("chainUpdated", updates); provider?.off("appUpdated", updates); provider?.off("tokenUpdated", updates); provider?.off("nftUpdated", updates); provider?.off("nftUpdated", updates); provider?.off("txUpdated", updates); provider?.off("storageUpdated", updates); provider?.off("storageCleared", updates); }; } }, [provider]); const chain = provider?.chain; const chainId = chain?.chainId?.toString() || ""; const account = provider?.account(); return (<TelegramProvider> <CoinmecaWalletContext.Provider value={{ provider, account, accounts: provider?.accounts(), chain, chains: provider?.chains, apps: provider?.apps, tokens: { fungibles: chainId ? account?.tokens?.fungibles?.[chainId] : undefined, nonFungibles: chainId ? account?.tokens?.nonFungibles?.[chainId] : undefined, multiTokens: chainId ? account?.tokens?.multiTokens?.[chainId] : undefined, }, tx: account?.tx?.[chainId || ""], contact: provider?.contact, }}> {children} </CoinmecaWalletContext.Provider> </TelegramProvider>); }; //# sourceMappingURL=provider.jsx.map