UNPKG

@web3auth/no-modal

Version:
87 lines (83 loc) 3.18 kB
'use strict'; var react = require('react'); require('@babel/runtime/helpers/objectSpread2'); require('@babel/runtime/helpers/defineProperty'); require('@segment/analytics-next'); require('../../base/loglevel.js'); require('@toruslabs/base-controllers'); require('@web3auth/auth'); require('../../base/errors/index.js'); require('../../base/wallet/index.js'); require('../../base/connector/connectorStatus.js'); var constants = require('../../base/connector/constants.js'); require('jwt-decode'); require('../../base/plugin/errors.js'); var IPlugin = require('../../base/plugin/IPlugin.js'); require('@toruslabs/constants'); require('@toruslabs/http-helpers'); const WalletServicesContext = react.createContext(null); function WalletServicesContextProvider({ children, context }) { const web3AuthContext = react.useContext(context); const { getPlugin, isInitialized, isConnected } = web3AuthContext; const [ready, setReady] = react.useState(false); const [connecting, setConnecting] = react.useState(false); const [walletServicesPlugin, setWalletServicesPlugin] = react.useState(null); react.useEffect(() => { if (isInitialized) { const plugin = getPlugin(IPlugin.EVM_PLUGINS.WALLET_SERVICES); setWalletServicesPlugin(plugin); } }, [isInitialized, getPlugin]); react.useEffect(() => { if (isConnected) { const plugin = getPlugin(IPlugin.EVM_PLUGINS.WALLET_SERVICES); setWalletServicesPlugin(plugin); // when rehydrating, the connectedListener may be registered after the connected event is emitted, we need to check the status here if ((plugin === null || plugin === void 0 ? void 0 : plugin.status) === constants.CONNECTOR_STATUS.CONNECTED) setReady(true); } }, [isConnected, getPlugin, walletServicesPlugin]); react.useEffect(() => { const connectedListener = () => { setReady(true); setConnecting(false); }; const disconnectedListener = () => { setReady(false); setConnecting(false); }; const connectingListener = () => { setConnecting(true); }; if (walletServicesPlugin) { walletServicesPlugin.on(IPlugin.PLUGIN_EVENTS.CONNECTED, connectedListener); walletServicesPlugin.on(IPlugin.PLUGIN_EVENTS.DISCONNECTED, disconnectedListener); walletServicesPlugin.on(IPlugin.PLUGIN_EVENTS.CONNECTING, connectingListener); } return () => { if (walletServicesPlugin) { walletServicesPlugin.removeListener(IPlugin.PLUGIN_EVENTS.CONNECTED, connectedListener); walletServicesPlugin.removeListener(IPlugin.PLUGIN_EVENTS.DISCONNECTED, disconnectedListener); walletServicesPlugin.removeListener(IPlugin.PLUGIN_EVENTS.CONNECTING, connectingListener); } }; }, [walletServicesPlugin]); const value = react.useMemo(() => { return { plugin: walletServicesPlugin, ready, connecting }; }, [walletServicesPlugin, ready, connecting]); return react.createElement(WalletServicesContext.Provider, { value }, children); } exports.WalletServicesContext = WalletServicesContext; exports.WalletServicesContextProvider = WalletServicesContextProvider;