@equinor/fusion-framework-react-module
Version:
Utils for initializing and consuming fusion framework modules
52 lines • 1.98 kB
JavaScript
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