diff --git a/packages/apputils-extension/src/index.ts b/packages/apputils-extension/src/index.ts index 24f886e6c083..0ec48ef99eec 100644 --- a/packages/apputils-extension/src/index.ts +++ b/packages/apputils-extension/src/index.ts @@ -9,7 +9,6 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; - import { Dialog, ICommandPalette, @@ -18,28 +17,20 @@ import { WindowResolver, Printing } from '@jupyterlab/apputils'; - import { Debouncer, - ISettingRegistry, IStateDB, - PageConfig, - SettingRegistry, StateDB, Throttler, URLExt } from '@jupyterlab/coreutils'; - import { defaultIconRegistry } from '@jupyterlab/ui-components'; import { PromiseDelegate } from '@lumino/coreutils'; - import { DisposableDelegate } from '@lumino/disposable'; import { Palette } from './palette'; - -import { SettingConnector } from './settingconnector'; - +import { settingsPlugin } from './settingsplugin'; import { themesPlugin, themesPaletteMenuPlugin } from './themeplugins'; /** @@ -86,51 +77,6 @@ const paletteRestorer: JupyterFrontEndPlugin = { autoStart: true }; -/** - * The default setting registry provider. - */ -const settings: JupyterFrontEndPlugin = { - id: '@jupyterlab/apputils-extension:settings', - activate: async (app: JupyterFrontEnd): Promise => { - const { isDisabled } = PageConfig.Extension; - const connector = new SettingConnector(app.serviceManager.settings); - - const registry = new SettingRegistry({ - connector, - plugins: (await connector.list('active')).values - }); - - // If there are plugins that have schemas that are not in the setting - // registry after the application has restored, try to load them manually - // because otherwise, its settings will never become available in the - // setting registry. - void app.restored.then(async () => { - const plugins = await connector.list('all'); - plugins.ids.forEach(async (id, index) => { - if (isDisabled(id) || id in registry.plugins) { - return; - } - - try { - await registry.load(id); - } catch (error) { - console.warn(`Settings failed to load for (${id})`, error); - if (plugins.values[index].schema['jupyter.lab.transform']) { - console.warn( - `This may happen if {autoStart: false} in (${id}) ` + - `or if it is one of the deferredExtensions in page config.` - ); - } - } - }); - }); - - return registry; - }, - autoStart: true, - provides: ISettingRegistry -}; - /** * The default window name resolver provider. */ @@ -497,13 +443,13 @@ const state: JupyterFrontEndPlugin = { const plugins: JupyterFrontEndPlugin[] = [ palette, paletteRestorer, + print, resolver, - settings, + settingsPlugin, state, splash, themesPlugin, - themesPaletteMenuPlugin, - print + themesPaletteMenuPlugin ]; export default plugins; diff --git a/packages/apputils-extension/src/settingconnector.ts b/packages/apputils-extension/src/settingconnector.ts index b1192c57a799..41113be14eff 100644 --- a/packages/apputils-extension/src/settingconnector.ts +++ b/packages/apputils-extension/src/settingconnector.ts @@ -40,5 +40,9 @@ export class SettingConnector extends DataConnector< }; } + async save(id: string, raw: string): Promise { + await this._connector.save(id, raw); + } + private _connector: IDataConnector; } diff --git a/packages/apputils-extension/src/settingsplugin.ts b/packages/apputils-extension/src/settingsplugin.ts new file mode 100644 index 000000000000..dab9d4b80c9c --- /dev/null +++ b/packages/apputils-extension/src/settingsplugin.ts @@ -0,0 +1,61 @@ +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +import { + JupyterFrontEnd, + JupyterFrontEndPlugin +} from '@jupyterlab/application'; +import { + ISettingRegistry, + PageConfig, + SettingRegistry +} from '@jupyterlab/coreutils'; + +import { SettingConnector } from './settingconnector'; + +/** + * The default setting registry provider. + */ +export const settingsPlugin: JupyterFrontEndPlugin = { + id: '@jupyterlab/apputils-extension:settings', + activate: async (app: JupyterFrontEnd): Promise => { + const { isDisabled } = PageConfig.Extension; + const connector = new SettingConnector(app.serviceManager.settings); + + const registry = new SettingRegistry({ + connector, + plugins: (await connector.list('active')).values + }); + + // If there are plugins that have schemas that are not in the setting + // registry after the application has restored, try to load them manually + // because otherwise, its settings will never become available in the + // setting registry. + void app.restored.then(async () => { + const plugins = await connector.list('all'); + plugins.ids.forEach(async (id, index) => { + if (isDisabled(id) || id in registry.plugins) { + return; + } + + try { + await registry.load(id); + } catch (error) { + console.warn(`Settings failed to load for (${id})`, error); + if (plugins.values[index].schema['jupyter.lab.transform']) { + console.warn( + `This may happen if {autoStart: false} in (${id}) ` + + `or if it is one of the deferredExtensions in page config.` + ); + } + } + }); + }); + + return registry; + }, + autoStart: true, + provides: ISettingRegistry +};