UNPKG

@0xsequence/connect

Version:
95 lines 5.21 kB
'use client'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { sequence } from '0xsequence'; import { ThemeProvider } from '@0xsequence/design-system'; import { GoogleOAuthProvider } from '@react-oauth/google'; import { useEffect, useState } from 'react'; import { useAccount, useConfig } from 'wagmi'; import { DEFAULT_SESSION_EXPIRATION } from '../../constants/ethAuth.js'; import { LocalStorageKey } from '../../constants/localStorage.js'; import { AnalyticsContextProvider } from '../../contexts/Analytics.js'; import { ConnectConfigContextProvider } from '../../contexts/ConnectConfig.js'; import { ConnectModalContextProvider } from '../../contexts/ConnectModal.js'; import { ThemeContextProvider } from '../../contexts/Theme.js'; import { WalletConfigContextProvider } from '../../contexts/WalletConfig.js'; import { useStorage } from '../../hooks/useStorage.js'; import { useEmailConflict } from '../../hooks/useWaasEmailConflict.js'; import { Connect } from '../Connect/Connect.js'; export const SequenceConnectPreviewProvider = (props) => { const { config, children } = props; const { defaultTheme = 'dark', signIn = {}, position = 'center', displayedAssets: displayedAssetsSetting = [], readOnlyNetworks, ethAuth = {}, disableAnalytics = false, hideExternalConnectOptions = false, hideConnectedWallets = false, hideSocialConnectOptions = false } = config; const defaultAppName = signIn.projectName || 'app'; const { expiry = DEFAULT_SESSION_EXPIRATION, app = defaultAppName, origin, nonce } = ethAuth; const [openConnectModal, setOpenConnectModal] = useState(false); const [theme, setTheme] = useState(defaultTheme || 'dark'); const [modalPosition, setModalPosition] = useState(position); const [displayedAssets, setDisplayedAssets] = useState(displayedAssetsSetting); const [analytics, setAnalytics] = useState(); const { address, isConnected } = useAccount(); const wagmiConfig = useConfig(); const storage = useStorage(); const googleWaasConnector = wagmiConfig.connectors.find(c => c.id === 'sequence-waas' && c._wallet.id === 'google-waas'); const googleClientId = googleWaasConnector?.params?.googleClientId || ''; const setupAnalytics = (projectAccessKey) => { const s = sequence.initWallet(projectAccessKey); const sequenceAnalytics = s.client.analytics; setAnalytics(sequenceAnalytics); }; useEffect(() => { if (!isConnected) { analytics?.reset(); return; } if (address) { analytics?.identify(address.toLowerCase()); } }, [analytics, address, isConnected]); useEffect(() => { if (!disableAnalytics) { setupAnalytics(config.projectAccessKey); } }, []); useEffect(() => { if (theme !== defaultTheme) { setTheme(defaultTheme); } }, [defaultTheme]); // Write data in local storage for retrieval in connectors useEffect(() => { // Theme // TODO: set the sequence theme once it is added to connect options if (typeof theme === 'object') { // localStorage.setItem(LocalStorageKey.Theme, JSON.stringify(theme)) } else { localStorage.setItem(LocalStorageKey.Theme, theme); } // EthAuth // note: keep an eye out for potential race-conditions, though they shouldn't occur. // If there are race conditions, the settings could be a function executed prior to being passed to wagmi storage?.setItem(LocalStorageKey.EthAuthSettings, { expiry, app, origin: origin || location.origin, nonce }); }, [theme, ethAuth]); useEffect(() => { setDisplayedAssets(displayedAssets); }, [displayedAssetsSetting]); const { emailConflictInfo } = useEmailConflict(); return (_jsx(ConnectConfigContextProvider, { value: config, children: _jsx(ThemeContextProvider, { value: { theme, setTheme, position: modalPosition, setPosition: setModalPosition }, children: _jsx(GoogleOAuthProvider, { clientId: googleClientId, children: _jsx(ConnectModalContextProvider, { value: { isConnectModalOpen: openConnectModal, setOpenConnectModal, openConnectModalState: openConnectModal }, children: _jsx(WalletConfigContextProvider, { value: { setDisplayedAssets, displayedAssets, readOnlyNetworks, hideExternalConnectOptions, hideConnectedWallets, hideSocialConnectOptions }, children: _jsxs(AnalyticsContextProvider, { value: { setAnalytics, analytics }, children: [_jsx("div", { id: "kit-provider", children: _jsx(ThemeProvider, { root: "#kit-provider", scope: "kit", theme: theme, children: _jsx(Connect, { onClose: () => setOpenConnectModal(false), emailConflictInfo: emailConflictInfo, isPreview: true, ...props }) }) }), children] }) }) }) }) }) })); }; //# sourceMappingURL=SequenceConnectPreviewProvider.js.map