Skip to main content
Version: 3.9.0-beta.104 (Latest)

Extension Manager

Overview​

The ExtensionManager is a class made available to us via the @ohif/core project (platform/core). Our application instantiates a single instance of it, and provides a ServicesManager and CommandsManager along with the application's configuration through the appConfig key (optional).

const commandsManager = new CommandsManager();
const servicesManager = new ServicesManager();
const extensionManager = new ExtensionManager({
commandsManager,
servicesManager,
appConfig,
});

Events​

The following events get published by the ExtensionManager:

EventDescription
ACTIVE_DATA_SOURCE_CHANGEDFired when the active data source is changed - either replaced with an entirely different one or the existing active data source gets its definition changed via updateDataSourceConfiguration.

API​

The ExtensionManager only has the following public API:

  • setActiveDataSource - Sets the active data source for the application
  • getDataSources - Returns the registered data sources
  • getActiveDataSource - Returns the currently active data source
  • getModuleEntry - Returns the module entry by the give id.
  • addDataSource - Dynamically adds a data source and optionally sets it as the active data source
  • updateDataSourceConfiguration - Updates the configuration of a specified data source (name).
  • getDataSourceDef - Gets the data source definition for a particular data source name.

Accessing Modules​

We use getModuleEntry in our ViewerLayout logic to find the panels based on the provided IDs in the mode's configuration.

For instance: extensionManager.getModuleEntry("@ohif/extension-measurement-tracking.panelModule.seriesList") accesses the seriesList panel from panelModule of the @ohif/extension-measurement-tracking extension.

const getPanelData = id => {
const entry = extensionManager.getModuleEntry(id);
const content = entry.component;

return {
iconName: entry.iconName,
iconLabel: entry.iconLabel,
label: entry.label,
name: entry.name,
content,
};
};