UNPKG

bigblocks

Version:

Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React

48 lines (47 loc) 2.1 kB
"use client"; import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useEffect, useMemo, useState } from "react"; import { AuthManager } from "../../lib/AuthManager"; import { AuthMessagesContext, defaultMessages, mergeMessages, } from "../../lib/auth-messages"; export const BitcoinAuthContext = createContext(null); export function BitcoinAuthProvider({ config, children, messages, }) { const [authManager] = useState(() => new AuthManager(config)); const [state, setState] = useState(authManager.getState()); useEffect(() => { // Subscribe to auth manager events const unsubscribe = authManager.subscribe((event) => { // Update local state based on events setState(authManager.getState()); // Handle specific events if needed switch (event.type) { case "AUTH_SUCCESS": console.log("Auth success:", event.user); break; case "AUTH_FAILED": console.error("Auth failed:", event.error); break; case "OAUTH_LINKED": console.log("OAuth linked:", event.provider); break; } }); return unsubscribe; }, [authManager]); // Get actions from auth manager const actions = useMemo(() => authManager.getActions(), [authManager]); // Create context value const contextValue = useMemo(() => ({ ...state, ...actions, config, }), [state, actions, config]); const mergedMessages = useMemo(() => (messages ? mergeMessages(messages) : defaultMessages), [messages]); return (_jsx(AuthMessagesContext.Provider, { value: mergedMessages, children: _jsx(BitcoinAuthContext.Provider, { value: contextValue, children: children }) })); } export function useBitcoinAuthContext() { const context = useContext(BitcoinAuthContext); if (!context) { throw new Error("useBitcoinAuthContext must be used within a BitcoinAuthProvider"); } return context; }