Skip to content

Commit e32f185

Browse files
committed
Move handling of the file browser settings to a separate plugin
1 parent dd6db47 commit e32f185

File tree

1 file changed

+51
-19
lines changed

1 file changed

+51
-19
lines changed

packages/tree-extension/src/index.ts

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,56 @@ const fileActions: JupyterFrontEndPlugin<void> = {
186186
},
187187
};
188188

189+
/**
190+
* A plugin to set the default file browser settings.
191+
*/
192+
const fileBrowserSettings: JupyterFrontEndPlugin<void> = {
193+
id: '@jupyter-notebook/tree-extension:settings',
194+
description: 'Set up the default file browser settings',
195+
requires: [IDefaultFileBrowser, ISettingRegistry],
196+
autoStart: true,
197+
activate: (
198+
app: JupyterFrontEnd,
199+
browser: IDefaultFileBrowser,
200+
settingRegistry: ISettingRegistry
201+
) => {
202+
/**
203+
* File browser default configuration.
204+
*/
205+
const defaultFileBrowserConfig = {
206+
navigateToCurrentDirectory: false,
207+
singleClickNavigation: true,
208+
showLastModifiedColumn: true,
209+
showFileSizeColumn: true,
210+
showHiddenFiles: false,
211+
showFileCheckboxes: true,
212+
sortNotebooksFirst: true,
213+
showFullPath: false,
214+
};
215+
216+
// apply defaults
217+
let key: keyof typeof defaultFileBrowserConfig;
218+
for (key in defaultFileBrowserConfig) {
219+
browser[key] = defaultFileBrowserConfig[key];
220+
}
221+
222+
void settingRegistry.load(FILE_BROWSER_PLUGIN_ID).then((settings) => {
223+
function onSettingsChanged(settings: ISettingRegistry.ISettings): void {
224+
let key: keyof typeof defaultFileBrowserConfig;
225+
for (key in defaultFileBrowserConfig) {
226+
const value = settings.get(key).user as boolean;
227+
// only set the setting if it is defined by the user
228+
if (value === undefined) {
229+
browser[key] = value;
230+
}
231+
}
232+
}
233+
settings.changed.connect(onSettingsChanged);
234+
onSettingsChanged(settings);
235+
});
236+
},
237+
};
238+
189239
/**
190240
* A plugin to add the file filter toggle command to the palette
191241
*/
@@ -360,25 +410,6 @@ const notebookTreeWidget: JupyterFrontEndPlugin<INotebookTree> = {
360410
nbTreeWidget.tabBar.addTab(running.title);
361411
}
362412

363-
const settings = settingRegistry.load(FILE_BROWSER_PLUGIN_ID);
364-
Promise.all([settings, app.restored])
365-
.then(([settings]) => {
366-
// Set Notebook 7 defaults if there is no user setting override
367-
[
368-
'showFileCheckboxes',
369-
'showFileSizeColumn',
370-
'sortNotebooksFirst',
371-
'showFullPath',
372-
].forEach((setting) => {
373-
if (settings.user[setting] === undefined) {
374-
void settings.set(setting, true);
375-
}
376-
});
377-
})
378-
.catch((reason: Error) => {
379-
console.error(reason.message);
380-
});
381-
382413
app.shell.add(nbTreeWidget, 'main', { rank: 100 });
383414

384415
// add a separate tab for each setting editor
@@ -419,6 +450,7 @@ const notebookTreeWidget: JupyterFrontEndPlugin<INotebookTree> = {
419450
const plugins: JupyterFrontEndPlugin<any>[] = [
420451
createNew,
421452
fileActions,
453+
fileBrowserSettings,
422454
fileFilterCommand,
423455
loadPlugins,
424456
openFileBrowser,

0 commit comments

Comments
 (0)