Skip to content

Commit

Permalink
Merge pull request #1711 from GMOD/1535_tp_lvl_plugin_config
Browse files Browse the repository at this point in the history
Add plugin top-level configuration
  • Loading branch information
rbuels authored Feb 22, 2021
2 parents 703b97e + 0cffadc commit 9a8e8ed
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 0 deletions.
3 changes: 3 additions & 0 deletions packages/core/Plugin.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import PluginManager from './PluginManager'
import { AnyConfigurationSchemaType } from './configuration/configurationSchema'

/**
* base class for a JBrowse plugin
Expand All @@ -9,6 +10,8 @@ export default abstract class Plugin {
install(_pluginManager: PluginManager): void {}

configure(_pluginManager: PluginManager): void {}

configurationSchema: AnyConfigurationSchemaType | undefined = undefined
}

export type PluginConstructor = new (...args: unknown[]) => Plugin
10 changes: 10 additions & 0 deletions packages/core/PluginManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,16 @@ export default class PluginManager {
})
}

pluginConfigurationSchemas() {
const configurationSchemas: { [key: string]: unknown } = {}
this.plugins.forEach(plugin => {
if (plugin.configurationSchema) {
configurationSchemas[plugin.name] = plugin.configurationSchema
}
})
return configurationSchemas
}

addPlugin(plugin: Plugin) {
if (this.configured) {
throw new Error('JBrowse already configured, cannot add plugins')
Expand Down
1 change: 1 addition & 0 deletions products/jbrowse-web/src/jbrowseModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export default function JBrowseWeb(
defaultValue: false,
},
theme: { type: 'frozen', defaultValue: {} },
...pluginManager.pluginConfigurationSchemas(),
}),
plugins: types.frozen(),
assemblies: types.array(assemblyConfigSchemasType),
Expand Down
28 changes: 28 additions & 0 deletions products/jbrowse-web/src/tests/JBrowse.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,16 @@ import { TextEncoder } from 'fastestsmallesttextencoderdecoder'
// locals
import { clearCache } from '@jbrowse/core/util/io/rangeFetcher'
import { clearAdapterCache } from '@jbrowse/core/data_adapters/dataAdapterCache'
import { readConfObject, getConf } from '@jbrowse/core/configuration'
import PluginManager from '@jbrowse/core/PluginManager'
import JBrowseRootModelFactory from '../rootModel'
import corePlugins from '../corePlugins'
import * as sessionSharing from '../sessionSharing'
import volvoxConfigSnapshot from '../../test_data/volvox/config.json'
import chromeSizesConfig from '../../test_data/config_chrom_sizes_test.json'
import JBrowse from '../JBrowse'
import { setup, getPluginManager, generateReadBuffer } from './util'
import TestPlugin from './TestPlugin'

window.TextEncoder = TextEncoder

Expand Down Expand Up @@ -65,6 +70,29 @@ test('lollipop track test', async () => {
await expect(findByTestId('three')).resolves.toBeTruthy()
})

test('toplevel configuration', () => {
const pluginManager = new PluginManager(
corePlugins.concat([TestPlugin]).map(P => new P()),
)
pluginManager.createPluggableElements()
const JBrowseRootModel = JBrowseRootModelFactory(pluginManager, true)
const rootModel = JBrowseRootModel.create({
jbrowse: volvoxConfigSnapshot,
assemblyManager: {},
})
rootModel.setDefaultSession()
pluginManager.setRootModel(rootModel)
pluginManager.configure()
const state = pluginManager.rootModel
const { jbrowse } = state
const { configuration } = jbrowse
// test reading top level configurations added by Test Plugin
const test = getConf(jbrowse, ['TestPlugin', 'topLevelTest'])
const test2 = readConfObject(configuration, ['TestPlugin', 'topLevelTest'])
expect(test).toEqual('test works')
expect(test2).toEqual('test works')
})

test('variant track test - opens feature detail view', async () => {
const pluginManager = getPluginManager()
const state = pluginManager.rootModel
Expand Down
16 changes: 16 additions & 0 deletions products/jbrowse-web/src/tests/TestPlugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Plugin from '@jbrowse/core/Plugin'
import { ConfigurationSchema } from '@jbrowse/core/configuration'

export default class TestPlugin extends Plugin {
name = 'TestPlugin'

configurationSchema = ConfigurationSchema('TestPlugin', {
topLevelTest: {
description: 'Test for top level configuration',
type: 'string',
defaultValue: 'test works',
},
})

configure() {}
}

0 comments on commit 9a8e8ed

Please sign in to comment.