UNPKG

@equinor/fusion-framework-react-module

Version:

Utils for initializing and consuming fusion framework modules

52 lines 1.98 kB
import { jsx as _jsx } from "react/jsx-runtime"; /* eslint-disable @typescript-eslint/no-explicit-any */ import { lazy, useEffect, } from 'react'; import { initializeModules, } from '@equinor/fusion-framework-module'; import moduleContext from './context'; /** * Function for creating a `ModuleProvider` component. * * __NOTE:__ this function requires component to be wrapped in `Suspense` * * @example * ```ts * import http, { HttpModule } from '@equinor/fusion-framework-module-http'; * import msal, { MsalModule } from '@equinor/fusion-framework-module-msal'; * import { createModuleProvider } from '@equinor/fusion-framework-react-module'; * * export default createModuleProvider( * (config) => { * config.auth.configureDefault({ * tenantId: 'MY_TENANT_ID', * clientId: 'MY_CLIENT_ID', * redirectUri: '/authentication/login-callback', * }); * config.http.configureClient('foo', { * baseUri: 'https://foo.bar', * defaultScopes: ['FOO_CLIENT_ID/.default'], * }); * }, * [http, msal] *); * ``` * @param configurator callback for configuring provided modules * @param modules modules which should be initiated * @param ref optional parent module instance * @returns Suspensive `ModuleProvider` */ export const createModuleProvider = async (configurator, ref) => { const Component = lazy(async () => { const { dispose, ...instance } = await initializeModules(configurator, ref); return { default: ({ children }) => { // biome-ignore lint/correctness/useExhaustiveDependencies: should dispose when new instance is provided useEffect(() => dispose, [instance]); return _jsx(ModuleProvider, { value: instance, children: children }); }, }; }); return Component; }; export const ModuleProvider = moduleContext.Provider; export default ModuleProvider; //# sourceMappingURL=ModuleProvider.js.map