浏览代码

Improve API

Frederic Collonval 6 年之前
父节点
当前提交
a4543e553e
共有 2 个文件被更改,包括 101 次插入92 次删除
  1. 90 77
      packages/filebrowser/src/opendialog.ts
  2. 11 15
      tests/test-filebrowser/src/openfiledialog.spec.ts

+ 90 - 77
packages/filebrowser/src/opendialog.ts

@@ -19,52 +19,101 @@ import { IFileBrowserFactory } from './factory';
 const OPEN_DIALOG_CLASS = 'jp-Open-Dialog';
 
 /**
- * Create and show a open files dialog.
- *
- * Note: if nothing is selected when `getValue` will return the browser
- * model current path.
- *
- * @param options - The dialog setup options.
- *
- * @returns A promise that resolves with whether the dialog was accepted.
+ * Namespace for file dialog
  */
-export function getOpenFiles(
-  options: OpenFileDialog.IOptions
-): Promise<Dialog.IResult<Contents.IModel[]>> {
-  let dialogOptions: Partial<Dialog.IOptions<Contents.IModel[]>> = {
-    title: options.title,
-    buttons: [
-      Dialog.cancelButton(),
-      Dialog.okButton({
-        label: 'Select'
-      })
-    ],
-    focusNodeSelector: options.focusNodeSelector,
-    host: options.host,
-    renderer: options.renderer,
-    body: new OpenDialog(options.manager, options.filter)
-  };
-  let dialog = new Dialog(dialogOptions);
-  return dialog.launch();
+export namespace FileDialog {
+  /**
+   * Options for the open directory dialog
+   */
+  export interface IDirectoryOptions
+    extends Partial<
+      Pick<
+        Dialog.IOptions<Promise<Contents.IModel[]>>,
+        Exclude<
+          keyof Dialog.IOptions<Promise<Contents.IModel[]>>,
+          'body' | 'buttons' | 'defaultButton'
+        >
+      >
+    > {
+    /**
+     * Document manager
+     */
+    manager: IDocumentManager;
+  }
+
+  /**
+   * Options for the open file dialog
+   */
+  export interface IFileOptions extends IDirectoryOptions {
+    /**
+     * Filter function on file browser item model
+     */
+    filter?: (value: Contents.IModel) => boolean;
+  }
+
+  /**
+   * Create and show a open files dialog.
+   *
+   * Note: if nothing is selected when `getValue` will return the browser
+   * model current path.
+   *
+   * @param options - The dialog setup options.
+   *
+   * @returns A promise that resolves with whether the dialog was accepted.
+   */
+  export function getOpenFiles(
+    options: IFileOptions
+  ): Promise<Dialog.IResult<Contents.IModel[]>> {
+    let dialogOptions: Partial<Dialog.IOptions<Contents.IModel[]>> = {
+      title: options.title,
+      buttons: [
+        Dialog.cancelButton(),
+        Dialog.okButton({
+          label: 'Select'
+        })
+      ],
+      focusNodeSelector: options.focusNodeSelector,
+      host: options.host,
+      renderer: options.renderer,
+      body: new OpenDialog(options.manager, options.filter)
+    };
+    let dialog = new Dialog(dialogOptions);
+    return dialog.launch();
+  }
+
+  /**
+   * Create and show a open directory dialog.
+   *
+   * Note: if nothing is selected when `getValue` will return the browser
+   * model current path.
+   *
+   * @param options - The dialog setup options.
+   *
+   * @returns A promise that resolves with whether the dialog was accepted.
+   */
+  export function getExistingDirectory(
+    options: IDirectoryOptions
+  ): Promise<Dialog.IResult<Contents.IModel[]>> {
+    return getOpenFiles({
+      ...options,
+      filter: model => false
+    });
+  }
 }
 
 /**
- * Create and show a open directory dialog.
- *
- * Note: if nothing is selected when `getValue` will return the browser
- * model current path.
- *
- * @param options - The dialog setup options.
- *
- * @returns A promise that resolves with whether the dialog was accepted.
+ * Namespace for the filtered file browser model
  */
-export function getExistingDirectory(
-  options: OpenDirectoryDialog.IOptions
-): Promise<Dialog.IResult<Contents.IModel[]>> {
-  return getOpenFiles({
-    ...options,
-    filter: model => false
-  });
+export namespace FilterFileBrowserModel {
+  /**
+   * Constructor options
+   */
+  export interface IOptions extends FileBrowserModel.IOptions {
+    /**
+     * Filter function on file browser item model
+     */
+    filter?: (value: Contents.IModel) => boolean;
+  }
 }
 
 /**
@@ -149,42 +198,6 @@ class OpenDialog extends Widget
   private _browser: FileBrowser;
 }
 
-export namespace OpenDirectoryDialog {
-  export interface IOptions
-    extends Partial<
-      Pick<
-        Dialog.IOptions<Promise<Contents.IModel[]>>,
-        Exclude<
-          keyof Dialog.IOptions<Promise<Contents.IModel[]>>,
-          'body' | 'buttons' | 'defaultButton'
-        >
-      >
-    > {
-    /**
-     * Document manager
-     */
-    manager: IDocumentManager;
-  }
-}
-
-export namespace OpenFileDialog {
-  export interface IOptions extends OpenDirectoryDialog.IOptions {
-    /**
-     * Filter function on file browser item model
-     */
-    filter?: (value: Contents.IModel) => boolean;
-  }
-}
-
-namespace FilterFileBrowserModel {
-  export interface IOptions extends FileBrowserModel.IOptions {
-    /**
-     * Filter function on file browser item model
-     */
-    filter?: (value: Contents.IModel) => boolean;
-  }
-}
-
 namespace Private {
   /**
    * Create a new file browser instance.

+ 11 - 15
tests/test-filebrowser/src/openfiledialog.spec.ts

@@ -5,11 +5,7 @@ import { toArray } from '@phosphor/algorithm';
 
 import { DocumentManager, IDocumentManager } from '@jupyterlab/docmanager';
 import { DocumentRegistry, TextModelFactory } from '@jupyterlab/docregistry';
-import {
-  getExistingDirectory,
-  getOpenFiles,
-  FilterFileBrowserModel
-} from '@jupyterlab/filebrowser';
+import { FileDialog, FilterFileBrowserModel } from '@jupyterlab/filebrowser';
 import { ServiceManager } from '@jupyterlab/services';
 import { expect } from 'chai';
 import {
@@ -102,9 +98,9 @@ describe('@jupyterlab/filebrowser', () => {
     });
   });
 
-  describe('getOpenFiles()', () => {
+  describe('FileDialog.getOpenFiles()', () => {
     it('should create a dialog', async () => {
-      let dialog = getOpenFiles({
+      let dialog = FileDialog.getOpenFiles({
         manager
       });
 
@@ -121,7 +117,7 @@ describe('@jupyterlab/filebrowser', () => {
 
       document.body.appendChild(node);
 
-      let dialog = getOpenFiles({
+      let dialog = FileDialog.getOpenFiles({
         manager,
         title: 'Select a notebook',
         host: node,
@@ -144,7 +140,7 @@ describe('@jupyterlab/filebrowser', () => {
 
       document.body.appendChild(node);
 
-      let dialog = getOpenFiles({
+      let dialog = FileDialog.getOpenFiles({
         manager,
         title: 'Select a notebook',
         host: node,
@@ -185,7 +181,7 @@ describe('@jupyterlab/filebrowser', () => {
     });
 
     it('should return current path if nothing is selected', async () => {
-      let dialog = getOpenFiles({
+      let dialog = FileDialog.getOpenFiles({
         manager
       });
 
@@ -200,9 +196,9 @@ describe('@jupyterlab/filebrowser', () => {
     });
   });
 
-  describe('getExistingDirectory()', () => {
+  describe('FileDialog.getExistingDirectory()', () => {
     it('should create a dialog', async () => {
-      let dialog = getExistingDirectory({
+      let dialog = FileDialog.getExistingDirectory({
         manager
       });
 
@@ -219,7 +215,7 @@ describe('@jupyterlab/filebrowser', () => {
 
       document.body.appendChild(node);
 
-      let dialog = getExistingDirectory({
+      let dialog = FileDialog.getExistingDirectory({
         manager,
         title: 'Select a folder',
         host: node
@@ -240,7 +236,7 @@ describe('@jupyterlab/filebrowser', () => {
 
       document.body.appendChild(node);
 
-      let dialog = getExistingDirectory({
+      let dialog = FileDialog.getExistingDirectory({
         manager,
         title: 'Select a folder',
         host: node
@@ -280,7 +276,7 @@ describe('@jupyterlab/filebrowser', () => {
     });
 
     it('should return current path if nothing is selected', async () => {
-      let dialog = getExistingDirectory({
+      let dialog = FileDialog.getExistingDirectory({
         manager
       });