/usr/share/grafana/public/app/features/plugins/extensions/registry
import { ReplaySubject } from 'rxjs'; import { PluginExtensionAddedComponentConfig } from '@grafana/data'; import * as errors from '../errors'; import { isGrafanaDevMode, wrapWithPluginContext } from '../utils'; import { isAddedComponentMetaInfoMissing } from '../validators'; import { PluginExtensionConfigs, Registry, RegistryType } from './Registry'; const logPrefix = 'Could not register component extension. Reason:'; export type AddedComponentRegistryItem<Props = {}> = { pluginId: string; title: string; description?: string; component: React.ComponentType<Props>; }; export class AddedComponentsRegistry extends Registry< AddedComponentRegistryItem[], PluginExtensionAddedComponentConfig > { constructor( options: { registrySubject?: ReplaySubject<RegistryType<AddedComponentRegistryItem[]>>; initialState?: RegistryType<AddedComponentRegistryItem[]>; } = {} ) { super(options); } mapToRegistry( registry: RegistryType<AddedComponentRegistryItem[]>, item: PluginExtensionConfigs<PluginExtensionAddedComponentConfig> ): RegistryType<AddedComponentRegistryItem[]> { const { pluginId, configs } = item; for (const config of configs) { const configLog = this.logger.child({ description: config.description, title: config.title, pluginId, }); if (!config.title) { configLog.error(`${logPrefix} ${errors.TITLE_MISSING}`); continue; } if ( pluginId !== 'grafana' && isGrafanaDevMode() && isAddedComponentMetaInfoMissing(pluginId, config, configLog) ) { continue; } const extensionPointIds = Array.isArray(config.targets) ? config.targets : [config.targets]; for (const extensionPointId of extensionPointIds) { const pointIdLog = configLog.child({ extensionPointId }); const result = { pluginId, component: wrapWithPluginContext({ pluginId, extensionTitle: config.title, Component: config.component, log: pointIdLog, }), description: config.description, title: config.title, }; pointIdLog.debug('Added component extension successfully registered'); if (!(extensionPointId in registry)) { registry[extensionPointId] = [result]; } else { registry[extensionPointId].push(result); } } } return registry; } // Returns a read-only version of the registry. readOnly() { return new AddedComponentsRegistry({ registrySubject: this.registrySubject, }); } }
.
Edit
..
Edit
AddedComponentsRegistry.test.ts
Edit
AddedComponentsRegistry.ts
Edit
AddedFunctionsRegistry.test.ts
Edit
AddedFunctionsRegistry.ts
Edit
AddedLinksRegistry.test.ts
Edit
AddedLinksRegistry.ts
Edit
ExposedComponentsRegistry.test.ts
Edit
ExposedComponentsRegistry.ts
Edit
Registry.ts
Edit
setup.ts
Edit
types.ts
Edit