@cosmos-kit/react-lite
Version:
cosmos-kit wallet connector
64 lines (63 loc) • 3 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Logger, State, WalletManager, } from '@cosmos-kit/core';
import { createContext, useEffect, useMemo, useState, } from 'react';
export const walletContext = createContext(null);
export function ChainProvider({ chains, assetLists, wallets, walletModal: ProvidedWalletModal, throwErrors = false, subscribeConnectEvents = true, defaultNameService = 'icns', walletConnectOptions, signerOptions, endpointOptions, sessionOptions, logLevel = 'WARN', allowedIframeParentOrigins, children, }) {
const logger = useMemo(() => new Logger(logLevel), []);
const [isViewOpen, setViewOpen] = useState(false);
const [viewWalletRepo, setViewWalletRepo] = useState();
const [data, setData] = useState();
const [state, setState] = useState(State.Init);
const [msg, setMsg] = useState();
const [, setClientState] = useState(State.Init);
const [, setClientMsg] = useState();
const [render, forceRender] = useState(0);
logger.debug('[provider.tsx] data:', data);
logger.debug('[provider.tsx] state:', state);
logger.debug('[provider.tsx] message:', msg);
const [walletManager, setWalletManager] = useState();
useEffect(() => {
const walletManager = new WalletManager(chains, wallets, logger, throwErrors, subscribeConnectEvents, allowedIframeParentOrigins, assetLists, defaultNameService, walletConnectOptions, signerOptions, endpointOptions, sessionOptions);
walletManager.setActions({
viewOpen: setViewOpen,
viewWalletRepo: setViewWalletRepo,
data: setData,
state: setState,
message: setMsg,
});
walletManager.walletRepos.forEach((wr) => {
wr.setActions({
viewOpen: setViewOpen,
viewWalletRepo: setViewWalletRepo,
render: forceRender,
});
wr.wallets.forEach((w) => {
w.setActions({
data: setData,
state: setState,
message: setMsg,
});
});
});
walletManager.mainWallets.forEach((w) => {
w.setActions({
data: setData,
state: setState,
message: setMsg,
clientState: setClientState,
clientMessage: setClientMsg,
});
});
setWalletManager(walletManager);
}, []);
useEffect(() => {
walletManager?.onMounted();
return () => {
setViewOpen(false);
walletManager?.onUnmounted();
};
}, [render, walletManager]);
if (!walletManager)
return null;
return (_jsxs(walletContext.Provider, { value: { walletManager, modalProvided: Boolean(ProvidedWalletModal) }, children: [ProvidedWalletModal && (_jsx(ProvidedWalletModal, { isOpen: isViewOpen, setOpen: setViewOpen, walletRepo: viewWalletRepo })), children] }));
}