UNPKG

bigblocks

Version:

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

15 lines 3.02 kB
{ "name": "providers-bitcoinauthprovider", "type": "registry:component", "dependencies": [], "devDependencies": [], "registryDependencies": [], "files": [ { "path": "components/providers/BitcoinAuthProvider.tsx", "type": "registry:component", "content": "\"use client\";\n\nimport type React from \"react\";\nimport { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { AuthManager } from \"../../lib/AuthManager\";\nimport {\n\ttype AuthMessages,\n\tAuthMessagesContext,\n\tdefaultMessages,\n\tmergeMessages,\n} from \"../../lib/auth-messages\";\nimport type {\n\tAuthActions,\n\tAuthEvent,\n\tAuthState,\n\tBitcoinAuthConfig,\n} from \"../../lib/types\";\n\nexport interface BitcoinAuthContextValue extends AuthState, AuthActions {\n\tconfig: BitcoinAuthConfig;\n}\n\nexport const BitcoinAuthContext = createContext<BitcoinAuthContextValue | null>(\n\tnull,\n);\n\nexport interface BitcoinAuthProviderProps {\n\tconfig: BitcoinAuthConfig;\n\tchildren: React.ReactNode;\n\tmessages?: Partial<AuthMessages>;\n}\n\nexport function BitcoinAuthProvider({\n\tconfig,\n\tchildren,\n\tmessages,\n}: BitcoinAuthProviderProps) {\n\tconst [authManager] = useState(() => new AuthManager(config));\n\tconst [state, setState] = useState<AuthState>(authManager.getState());\n\n\tuseEffect(() => {\n\t\t// Subscribe to auth manager events\n\t\tconst unsubscribe = authManager.subscribe((event: AuthEvent) => {\n\t\t\t// Update local state based on events\n\t\t\tsetState(authManager.getState());\n\n\t\t\t// Handle specific events if needed\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"AUTH_SUCCESS\":\n\t\t\t\t\tconsole.log(\"Auth success:\", event.user);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"AUTH_FAILED\":\n\t\t\t\t\tconsole.error(\"Auth failed:\", event.error);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"OAUTH_LINKED\":\n\t\t\t\t\tconsole.log(\"OAuth linked:\", event.provider);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn unsubscribe;\n\t}, [authManager]);\n\n\t// Get actions from auth manager\n\tconst actions = useMemo(() => authManager.getActions(), [authManager]);\n\n\t// Create context value\n\tconst contextValue = useMemo<BitcoinAuthContextValue>(\n\t\t() => ({\n\t\t\t...state,\n\t\t\t...actions,\n\t\t\tconfig,\n\t\t}),\n\t\t[state, actions, config],\n\t);\n\n\tconst mergedMessages = useMemo(\n\t\t() => (messages ? mergeMessages(messages) : defaultMessages),\n\t\t[messages],\n\t);\n\n\treturn (\n\t\t<AuthMessagesContext.Provider value={mergedMessages}>\n\t\t\t<BitcoinAuthContext.Provider value={contextValue}>\n\t\t\t\t{children}\n\t\t\t</BitcoinAuthContext.Provider>\n\t\t</AuthMessagesContext.Provider>\n\t);\n}\n\nexport function useBitcoinAuthContext() {\n\tconst context = useContext(BitcoinAuthContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useBitcoinAuthContext must be used within a BitcoinAuthProvider\",\n\t\t);\n\t}\n\treturn context;\n}\n", "target": "<%- config.aliases.components %>/bitcoinauthprovider.tsx" } ] }