Browse Source

Fix following rebase

Frederic Collonval 5 years ago
parent
commit
6b69db33e9

+ 6 - 3
docs/source/developer/ui_helpers.rst

@@ -77,6 +77,7 @@ Here is an example to request a file.
 .. code:: typescript
 
     const dialog = FileDialog.getExistingDirectory({
+      iconRegistry, // IIconRegistry
       manager, // IDocumentManager
       filter: model => model.type == 'notebook' // optional (model: Contents.IModel) => boolean
     });
@@ -92,6 +93,7 @@ And for a folder.
 .. code:: typescript
 
     const dialog = FileDialog.getExistingDirectory({
+      iconRegistry, // IIconRegistry
       manager // IDocumentManager
     });
 
@@ -101,6 +103,7 @@ And for a folder.
       let folders = result.value;
     }
 
-.. note:: The document manager can be obtained in a plugin by requesting 
-    ``IFileBrowserFactory`` service. The manager will be accessed through
-    ``factory.defaultBrowser.model.manager``.
+.. note:: The document manager and the icon registry can be obtained in a plugin by
+    requesting ``IFileBrowserFactory`` token. The ``manager`` will be accessed through 
+    ``factory.defaultBrowser.model.manager`` and the ``iconRegistry`` through
+    ``factory.defaultBrowser.model.iconRegistry``.

+ 17 - 1
packages/filebrowser/src/opendialog.ts

@@ -8,6 +8,7 @@ import { PathExt } from '@jupyterlab/coreutils';
 import { Dialog } from '@jupyterlab/apputils';
 import { IDocumentManager } from '@jupyterlab/docmanager';
 import { Contents } from '@jupyterlab/services';
+import { IIconRegistry } from '@jupyterlab/ui-components';
 
 import { FileBrowser } from './browser';
 import { FilterFileBrowserModel } from './model';
@@ -35,6 +36,11 @@ export namespace FileDialog {
         >
       >
     > {
+    /**
+     * An icon registry instance.
+     */
+    iconRegistry: IIconRegistry;
+
     /**
      * Document manager
      */
@@ -75,7 +81,11 @@ export namespace FileDialog {
       focusNodeSelector: options.focusNodeSelector,
       host: options.host,
       renderer: options.renderer,
-      body: new OpenDialog(options.manager, options.filter)
+      body: new OpenDialog(
+        options.iconRegistry,
+        options.manager,
+        options.filter
+      )
     };
     let dialog = new Dialog(dialogOptions);
     return dialog.launch();
@@ -107,6 +117,7 @@ export namespace FileDialog {
 class OpenDialog extends Widget
   implements Dialog.IBodyWidget<Contents.IModel[]> {
   constructor(
+    iconRegistry: IIconRegistry,
     manager: IDocumentManager,
     filter?: (value: Contents.IModel) => boolean
   ) {
@@ -115,6 +126,7 @@ class OpenDialog extends Widget
 
     this._browser = Private.createFilteredFileBrowser(
       'filtered-file-browser-dialog',
+      iconRegistry,
       manager,
       filter
     );
@@ -161,6 +173,8 @@ namespace Private {
    *
    * @param id - The widget/DOM id of the file browser.
    *
+   * @param iconRegistry - An icon registry instance.
+   *
    * @param manager - A document manager instance.
    *
    * @param filter - function to filter file browser item.
@@ -180,11 +194,13 @@ namespace Private {
    */
   export const createFilteredFileBrowser = (
     id: string,
+    iconRegistry: IIconRegistry,
     manager: IDocumentManager,
     filter?: (value: Contents.IModel) => boolean,
     options: IFileBrowserFactory.IOptions = {}
   ) => {
     const model = new FilterFileBrowserModel({
+      iconRegistry,
       manager,
       filter,
       driveName: options.driveName,

+ 33 - 12
tests/test-filebrowser/src/openfiledialog.spec.ts

@@ -10,7 +10,10 @@ import {
   FilterFileBrowserModel,
   FileBrowserModel
 } from '@jupyterlab/filebrowser';
-import { ServiceManager } from '@jupyterlab/services';
+import { ServiceManager, Contents } from '@jupyterlab/services';
+
+import { defaultIconRegistry, IIconRegistry } from '@jupyterlab/ui-components';
+
 import { expect } from 'chai';
 import {
   acceptDialog,
@@ -22,6 +25,7 @@ import {
 import { simulate } from 'simulate-event';
 
 describe('@jupyterlab/filebrowser', () => {
+  let iconRegistry: IIconRegistry;
   let manager: IDocumentManager;
   let serviceManager: ServiceManager.IManager;
   let registry: DocumentRegistry;
@@ -37,6 +41,7 @@ describe('@jupyterlab/filebrowser', () => {
       textModelFactory: new TextModelFactory()
     });
     serviceManager = new ServiceManager({ standby: 'never' });
+    iconRegistry = defaultIconRegistry;
     manager = new DocumentManager({
       registry,
       opener,
@@ -52,14 +57,15 @@ describe('@jupyterlab/filebrowser', () => {
   describe('FilterFileBrowserModel', () => {
     describe('#constructor()', () => {
       it('should construct a new filtered file browser model', () => {
-        let model = new FilterFileBrowserModel({ manager });
+        let model = new FilterFileBrowserModel({ iconRegistry, manager });
         expect(model).to.be.an.instanceof(FilterFileBrowserModel);
       });
 
       it('should accept filter option', () => {
         let model = new FilterFileBrowserModel({
+          iconRegistry,
           manager,
-          filter: model => false
+          filter: (model: Contents.IModel) => false
         });
         expect(model).to.be.an.instanceof(FilterFileBrowserModel);
       });
@@ -67,9 +73,12 @@ describe('@jupyterlab/filebrowser', () => {
 
     describe('#items()', () => {
       it('should list all elements if no filter is defined', async () => {
-        let filteredModel = new FilterFileBrowserModel({ manager });
+        let filteredModel = new FilterFileBrowserModel({
+          iconRegistry,
+          manager
+        });
         await filteredModel.cd();
-        let model = new FileBrowserModel({ manager });
+        let model = new FileBrowserModel({ iconRegistry, manager });
         await model.cd();
 
         const filteredItems = toArray(filteredModel.items());
@@ -79,11 +88,12 @@ describe('@jupyterlab/filebrowser', () => {
 
       it('should list all directories whatever the filter', async () => {
         let filteredModel = new FilterFileBrowserModel({
+          iconRegistry,
           manager,
-          filter: model => false
+          filter: (model: Contents.IModel) => false
         });
         await filteredModel.cd();
-        let model = new FileBrowserModel({ manager });
+        let model = new FileBrowserModel({ iconRegistry, manager });
         await model.cd();
 
         const filteredItems = toArray(filteredModel.items());
@@ -94,14 +104,17 @@ describe('@jupyterlab/filebrowser', () => {
 
       it('should respect the filter', async () => {
         let filteredModel = new FilterFileBrowserModel({
+          iconRegistry,
           manager,
-          filter: model => model.type === 'notebook'
+          filter: (model: Contents.IModel) => model.type === 'notebook'
         });
         await filteredModel.cd();
-        let model = new FileBrowserModel({ manager });
+        let model = new FileBrowserModel({ iconRegistry, manager });
         await model.cd();
 
-        const filteredItems = toArray(filteredModel.items());
+        const filteredItems = toArray(
+          filteredModel.items()
+        ) as Contents.IModel[];
         const items = toArray(model.items());
         const shownItems = items.filter(
           item => item.type === 'directory' || item.type === 'notebook'
@@ -118,6 +131,7 @@ describe('@jupyterlab/filebrowser', () => {
   describe('FileDialog.getOpenFiles()', () => {
     it('should create a dialog', async () => {
       let dialog = FileDialog.getOpenFiles({
+        iconRegistry,
         manager
       });
 
@@ -135,10 +149,11 @@ describe('@jupyterlab/filebrowser', () => {
       document.body.appendChild(node);
 
       let dialog = FileDialog.getOpenFiles({
+        iconRegistry,
         manager,
         title: 'Select a notebook',
         host: node,
-        filter: value => value.type === 'notebook'
+        filter: (value: Contents.IModel) => value.type === 'notebook'
       });
 
       await acceptDialog();
@@ -158,10 +173,11 @@ describe('@jupyterlab/filebrowser', () => {
       document.body.appendChild(node);
 
       let dialog = FileDialog.getOpenFiles({
+        iconRegistry,
         manager,
         title: 'Select a notebook',
         host: node,
-        filter: value => value.type === 'notebook'
+        filter: (value: Contents.IModel) => value.type === 'notebook'
       });
 
       await waitForDialog();
@@ -204,6 +220,7 @@ describe('@jupyterlab/filebrowser', () => {
 
     it('should return current path if nothing is selected', async () => {
       let dialog = FileDialog.getOpenFiles({
+        iconRegistry,
         manager
       });
 
@@ -221,6 +238,7 @@ describe('@jupyterlab/filebrowser', () => {
   describe('FileDialog.getExistingDirectory()', () => {
     it('should create a dialog', async () => {
       let dialog = FileDialog.getExistingDirectory({
+        iconRegistry,
         manager
       });
 
@@ -238,6 +256,7 @@ describe('@jupyterlab/filebrowser', () => {
       document.body.appendChild(node);
 
       let dialog = FileDialog.getExistingDirectory({
+        iconRegistry,
         manager,
         title: 'Select a folder',
         host: node
@@ -259,6 +278,7 @@ describe('@jupyterlab/filebrowser', () => {
       document.body.appendChild(node);
 
       let dialog = FileDialog.getExistingDirectory({
+        iconRegistry,
         manager,
         title: 'Select a folder',
         host: node
@@ -303,6 +323,7 @@ describe('@jupyterlab/filebrowser', () => {
 
     it('should return current path if nothing is selected', async () => {
       let dialog = FileDialog.getExistingDirectory({
+        iconRegistry,
         manager
       });