UNPKG

@dynamic-labs/sdk-react-core

Version:

A React SDK for implementing wallet web3 authentication and authorization to your website.

59 lines (56 loc) 2.56 kB
'use client' import { jsx } from 'react/jsx-runtime'; import { createContext, useContext, useState, useRef, useCallback, cloneElement } from 'react'; import '@dynamic-labs/sdk-api-core'; import '../../utils/constants/values.js'; import '@dynamic-labs/utils'; import '../../../../_virtual/_tslib.js'; import '@dynamic-labs/multi-wallet'; import '../../shared/logger.js'; import '../../utils/constants/colors.js'; import 'react-international-phone'; import '@dynamic-labs/iconic'; import '@dynamic-labs/wallet-connector-core'; import '../ViewContext/ViewContext.js'; import '@dynamic-labs/wallet-book'; import '../../shared/consts/index.js'; import '../../store/state/nonce/nonce.js'; import { randomString } from '../../utils/functions/randomString/randomString.js'; import '../../store/state/projectSettings/projectSettings.js'; import '../../config/ApiEndpoint.js'; import '../../store/state/user/user.js'; import '../../locale/locale.js'; import '../../store/state/dynamicContextProps/dynamicContextProps.js'; import '../../store/state/primaryWalletId/primaryWalletId.js'; import '../../store/state/connectedWalletsInfo/connectedWalletsInfo.js'; const reinitializeContext = createContext(undefined); /** * Provider that provides a reinitialize function to its children. * @param children The children to render. * @param onReinitialize A callback that is called when reinitialize is called. */ const ReinitializeContextProvider = ({ children, onReinitialize }) => { // Initial key is undefined to not interfere on react strick mode const [key, setKey] = useState(); const onReinitializeCallbackRef = useRef(onReinitialize); onReinitializeCallbackRef.current = onReinitialize; const reinitialize = useCallback(() => { var _a; const newKey = randomString(8); (_a = onReinitializeCallbackRef.current) === null || _a === void 0 ? void 0 : _a.call(onReinitializeCallbackRef, newKey); setKey(newKey); }, []); return (jsx(reinitializeContext.Provider, { value: { key, reinitialize }, children: cloneElement(children, { key }) })); }; /** * Custom hook that provides an reinitialize function for the DynamicContextProvider. * @returns The reinitialize function. */ const useReinitialize = () => { const context = useContext(reinitializeContext); if (context === undefined) { throw new Error('usage of useReinitialize not wrapped in `ReinitializeContextProvider`.'); } return context.reinitialize; }; export { ReinitializeContextProvider, reinitializeContext, useReinitialize };