@0xsequence/connect
Version:
Connect package for Sequence Web SDK
99 lines • 5.89 kB
JavaScript
"use strict";
'use client';
Object.defineProperty(exports, "__esModule", { value: true });
exports.SequenceConnectPreviewProvider = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const _0xsequence_1 = require("0xsequence");
const design_system_1 = require("@0xsequence/design-system");
const google_1 = require("@react-oauth/google");
const react_1 = require("react");
const wagmi_1 = require("wagmi");
const ethAuth_js_1 = require("../../constants/ethAuth.js");
const localStorage_js_1 = require("../../constants/localStorage.js");
const Analytics_js_1 = require("../../contexts/Analytics.js");
const ConnectConfig_js_1 = require("../../contexts/ConnectConfig.js");
const ConnectModal_js_1 = require("../../contexts/ConnectModal.js");
const Theme_js_1 = require("../../contexts/Theme.js");
const WalletConfig_js_1 = require("../../contexts/WalletConfig.js");
const useStorage_js_1 = require("../../hooks/useStorage.js");
const useWaasEmailConflict_js_1 = require("../../hooks/useWaasEmailConflict.js");
const Connect_js_1 = require("../Connect/Connect.js");
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 = ethAuth_js_1.DEFAULT_SESSION_EXPIRATION, app = defaultAppName, origin, nonce } = ethAuth;
const [openConnectModal, setOpenConnectModal] = (0, react_1.useState)(false);
const [theme, setTheme] = (0, react_1.useState)(defaultTheme || 'dark');
const [modalPosition, setModalPosition] = (0, react_1.useState)(position);
const [displayedAssets, setDisplayedAssets] = (0, react_1.useState)(displayedAssetsSetting);
const [analytics, setAnalytics] = (0, react_1.useState)();
const { address, isConnected } = (0, wagmi_1.useAccount)();
const wagmiConfig = (0, wagmi_1.useConfig)();
const storage = (0, useStorage_js_1.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 = _0xsequence_1.sequence.initWallet(projectAccessKey);
const sequenceAnalytics = s.client.analytics;
setAnalytics(sequenceAnalytics);
};
(0, react_1.useEffect)(() => {
if (!isConnected) {
analytics?.reset();
return;
}
if (address) {
analytics?.identify(address.toLowerCase());
}
}, [analytics, address, isConnected]);
(0, react_1.useEffect)(() => {
if (!disableAnalytics) {
setupAnalytics(config.projectAccessKey);
}
}, []);
(0, react_1.useEffect)(() => {
if (theme !== defaultTheme) {
setTheme(defaultTheme);
}
}, [defaultTheme]);
// Write data in local storage for retrieval in connectors
(0, react_1.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(localStorage_js_1.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(localStorage_js_1.LocalStorageKey.EthAuthSettings, {
expiry,
app,
origin: origin || location.origin,
nonce
});
}, [theme, ethAuth]);
(0, react_1.useEffect)(() => {
setDisplayedAssets(displayedAssets);
}, [displayedAssetsSetting]);
const { emailConflictInfo } = (0, useWaasEmailConflict_js_1.useEmailConflict)();
return ((0, jsx_runtime_1.jsx)(ConnectConfig_js_1.ConnectConfigContextProvider, { value: config, children: (0, jsx_runtime_1.jsx)(Theme_js_1.ThemeContextProvider, { value: {
theme,
setTheme,
position: modalPosition,
setPosition: setModalPosition
}, children: (0, jsx_runtime_1.jsx)(google_1.GoogleOAuthProvider, { clientId: googleClientId, children: (0, jsx_runtime_1.jsx)(ConnectModal_js_1.ConnectModalContextProvider, { value: { isConnectModalOpen: openConnectModal, setOpenConnectModal, openConnectModalState: openConnectModal }, children: (0, jsx_runtime_1.jsx)(WalletConfig_js_1.WalletConfigContextProvider, { value: {
setDisplayedAssets,
displayedAssets,
readOnlyNetworks,
hideExternalConnectOptions,
hideConnectedWallets,
hideSocialConnectOptions
}, children: (0, jsx_runtime_1.jsxs)(Analytics_js_1.AnalyticsContextProvider, { value: { setAnalytics, analytics }, children: [(0, jsx_runtime_1.jsx)("div", { id: "kit-provider", children: (0, jsx_runtime_1.jsx)(design_system_1.ThemeProvider, { root: "#kit-provider", scope: "kit", theme: theme, children: (0, jsx_runtime_1.jsx)(Connect_js_1.Connect, { onClose: () => setOpenConnectModal(false), emailConflictInfo: emailConflictInfo, isPreview: true, ...props }) }) }), children] }) }) }) }) }) }));
};
exports.SequenceConnectPreviewProvider = SequenceConnectPreviewProvider;
//# sourceMappingURL=SequenceConnectPreviewProvider.js.map