diff --git a/api-goldens/dashboards-ng/index.api.md b/api-goldens/dashboards-ng/index.api.md index d06d1f564..e04475191 100644 --- a/api-goldens/dashboards-ng/index.api.md +++ b/api-goldens/dashboards-ng/index.api.md @@ -141,7 +141,7 @@ export const provideDashboardToolbarItems: (toolbarItems?: { secondary?: DashboardToolbarItem[]; }) => Provider; -// @public +// @public (undocumented) export type SetupComponentFn = (factory: WidgetComponentFactory, componentName: string, host: ViewContainerRef, injector: Injector, envInjector: EnvironmentInjector) => Observable>; // @public (undocumented) @@ -338,16 +338,6 @@ export interface WidgetConfigStatus { modified: boolean; } -// @public (undocumented) -export const widgetFactoryRegistry: { - _factories: { - [key: string]: SetupComponentFn; - }; - register(name: string, factoryFn: SetupComponentFn): void; - getFactoryFn(name: string): SetupComponentFn; - hasFactoryFn(name: string): boolean; -}; - // @public export interface WidgetImage { alt: string; diff --git a/projects/dashboards-ng/src/widget-loader.spec.ts b/projects/dashboards-ng/src/widget-loader.spec.ts index 2e16caced..3ec8e721f 100644 --- a/projects/dashboards-ng/src/widget-loader.spec.ts +++ b/projects/dashboards-ng/src/widget-loader.spec.ts @@ -33,13 +33,13 @@ describe('widget-loader', () => { describe('widgetFactoryRegistry', () => { it('#hasFactoryFn() should return false for a not existing factory function', () => { - expect(widgetFactoryRegistry.hasFactoryFn('nothing')).toBe(false); + expect(widgetFactoryRegistry.hasFactoryFn('module-federation')).toBe(false); }); it('#register() should add a factory function to the registry', () => { const factoryFn = {} as SetupComponentFn; - widgetFactoryRegistry.register('my-function', factoryFn); - expect(widgetFactoryRegistry.hasFactoryFn('my-function')).toBe(true); - expect(widgetFactoryRegistry.getFactoryFn('my-function')).toBe(factoryFn); + widgetFactoryRegistry.register('module-federation', factoryFn); + expect(widgetFactoryRegistry.hasFactoryFn('module-federation')).toBe(true); + expect(widgetFactoryRegistry.getFactoryFn('module-federation')).toBe(factoryFn); }); }); diff --git a/projects/dashboards-ng/src/widget-loader.ts b/projects/dashboards-ng/src/widget-loader.ts index 63f484038..52221f895 100644 --- a/projects/dashboards-ng/src/widget-loader.ts +++ b/projects/dashboards-ng/src/widget-loader.ts @@ -14,6 +14,8 @@ import { Observable, ReplaySubject, Subject, throwError } from 'rxjs'; import { SiWebComponentEditorWrapperComponent } from './components/web-component-wrapper/si-web-component-editor-wrapper.component'; import { SiWebComponentWrapperComponent } from './components/web-component-wrapper/si-web-component-wrapper.component'; import { + FederatedBridgeModule, + FederatedModule, WebComponent, WidgetComponentFactory, WidgetComponentTypeFactory, @@ -21,6 +23,8 @@ import { WidgetInstanceEditor } from './model/widgets.model'; +type WidgetFactoryType = FederatedModule['factoryType'] | FederatedBridgeModule['factoryType']; + export type SetupComponentFn = ( factory: WidgetComponentFactory, componentName: string, @@ -29,18 +33,19 @@ export type SetupComponentFn = ( envInjector: EnvironmentInjector ) => Observable>; +/** @internal */ export const widgetFactoryRegistry = { - _factories: {} as { [key: string]: SetupComponentFn }, + _factories: {} as { [key in WidgetFactoryType]?: SetupComponentFn }, - register(name: string, factoryFn: SetupComponentFn) { + register(name: WidgetFactoryType, factoryFn: SetupComponentFn) { this._factories[name] = factoryFn; }, - getFactoryFn(name: string) { + getFactoryFn(name: WidgetFactoryType) { return this._factories[name]; }, - hasFactoryFn(name: string) { + hasFactoryFn(name: WidgetFactoryType) { return this._factories[name] !== undefined; } };