@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
JavaScript
'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 };