@@ -11,14 +11,15 @@ import { DriveListModel, DriveListView } from './drivelistmanager';
1111import { DriveIcon } from './icons' ;
1212import { IDocumentManager } from '@jupyterlab/docmanager' ;
1313import { Drive } from './contents' ;
14- import { MultiDrivesFileBrowser } from './browser ' ;
15- import { FilterFileBrowserModel } from '@jupyterlab/filebrowser' ;
14+ import { MultiDrivesFileBrowser } from './multidrivesbrowser ' ;
15+ import { BreadCrumbs , FilterFileBrowserModel } from '@jupyterlab/filebrowser' ;
1616import { ISettingRegistry } from '@jupyterlab/settingregistry' ;
1717import {
1818 createToolbarFactory ,
1919 IToolbarWidgetRegistry ,
2020 setToolbar
2121} from '@jupyterlab/apputils' ;
22+ import { DriveBrowser } from './drivebrowser' ;
2223
2324const FILE_BROWSER_FACTORY = 'FileBrowser' ;
2425const FILE_BROWSER_PLUGIN_ID = '@jupyter/drives:widget' ;
@@ -100,7 +101,7 @@ export async function activateAddDrivesPlugin(
100101 avocadoDrive . baseUrl = '/avocado/url' ;
101102 avocadoDrive . name = 'avocadoDrive' ;
102103
103- const selectedList1 : Drive [ ] = [ cocoDrive ] ;
104+ const selectedList1 : Drive [ ] = [ peachDrive , mangoDrive ] ;
104105 const availableList1 : Drive [ ] = [
105106 avocadoDrive ,
106107 cocoDrive ,
@@ -111,32 +112,30 @@ export async function activateAddDrivesPlugin(
111112 pearDrive ,
112113 tomatoDrive
113114 ] ;
114- function buildInitialBrowserModelList ( ) {
115- const modelList : FilterFileBrowserModel [ ] = [ ] ;
116- const drive1 = new Drive ( app . docRegistry ) ;
117- drive1 . name = 'Drive1' ;
118- manager . services . contents . addDrive ( drive1 ) ;
119- const drive1Model = new FilterFileBrowserModel ( {
120- manager : manager ,
121- driveName : drive1 . name
122- } ) ;
123115
124- const drive2 = new Drive ( app . docRegistry ) ;
125- drive2 . name = 'SuperCoolDrive2' ;
126- manager . services . contents . addDrive ( drive2 ) ;
127- const drive2Model = new FilterFileBrowserModel ( {
116+ function createFilterFileBrowserModel (
117+ manager : IDocumentManager ,
118+ drive ?: Drive
119+ ) : FilterFileBrowserModel {
120+ const driveModel = new FilterFileBrowserModel ( {
128121 manager : manager ,
129- driveName : drive2 . name
122+ driveName : drive ? .name
130123 } ) ;
131124
132- const localDriveModel = new FilterFileBrowserModel ( { manager : manager } ) ;
133- modelList . push ( localDriveModel ) ;
134- modelList . push ( drive1Model ) ;
135- modelList . push ( drive2Model ) ;
125+ return driveModel ;
126+ }
127+ function buildInitialBrowserModelList ( selectedDrives : Drive [ ] ) {
128+ const browserModelList : FilterFileBrowserModel [ ] = [ ] ;
129+ const localDriveModel = createFilterFileBrowserModel ( manager ) ;
130+ browserModelList . push ( localDriveModel ) ;
131+ selectedDrives . forEach ( drive => {
132+ const driveBrowserModel = createFilterFileBrowserModel ( manager , drive ) ;
133+ browserModelList . push ( driveBrowserModel ) ;
134+ } ) ;
136135
137- return modelList ;
136+ return browserModelList ;
138137 }
139- const browserModelList = buildInitialBrowserModelList ( ) ;
138+ const browserModelList = buildInitialBrowserModelList ( selectedList1 ) ;
140139 const trans = translator . load ( 'jupyter_drives' ) ;
141140 const panel = new MultiDrivesFileBrowser ( {
142141 modelList : browserModelList ,
@@ -162,48 +161,71 @@ export async function activateAddDrivesPlugin(
162161 translator
163162 )
164163 ) ;
165-
166- function addDriveContentsToPanel ( addedDrive : Drive ) {
164+ function addToBrowserModelList (
165+ browserModelList : FilterFileBrowserModel [ ] ,
166+ addedDrive : Drive
167+ ) {
168+ const addedDriveModel = createFilterFileBrowserModel ( manager , addedDrive ) ;
169+ browserModelList . push ( addedDriveModel ) ;
170+ return browserModelList ;
171+ }
172+ function addDriveContentsToPanel (
173+ browserModelList : FilterFileBrowserModel [ ] ,
174+ addedDrive : Drive ,
175+ panel : MultiDrivesFileBrowser
176+ ) {
177+ const addedDriveModel = createFilterFileBrowserModel ( manager , addedDrive ) ;
178+ browserModelList = addToBrowserModelList ( browserModelList , addedDrive ) ;
167179 manager . services . contents . addDrive ( addedDrive ) ;
180+ const AddedDriveBrowser = new DriveBrowser ( {
181+ model : addedDriveModel ,
182+ breadCrumbs : new BreadCrumbs ( { model : addedDriveModel } ) ,
183+ driveName : addedDrive . name
184+ } ) ;
185+ panel . addWidget ( AddedDriveBrowser ) ;
168186 }
169187
170188 /* Dialog to select the drive */
171189 addJupyterLabThemeChangeListener ( ) ;
172190 const selectedDrivesModelMap = new Map < Drive [ ] , DriveListModel > ( ) ;
173191 let selectedDrives : Drive [ ] = selectedList1 ;
174192 const availableDrives : Drive [ ] = availableList1 ;
175- let model = selectedDrivesModelMap . get ( selectedDrives ) ;
193+ let driveListModel = selectedDrivesModelMap . get ( selectedDrives ) ;
176194
177195 commands . addCommand ( CommandIDs . openDrivesDialog , {
178196 execute : async args => {
179- if ( ! model ) {
180- model = new DriveListModel ( availableDrives , selectedDrives ) ;
181- selectedDrivesModelMap . set ( selectedDrives , model ) ;
197+ if ( ! driveListModel ) {
198+ driveListModel = new DriveListModel ( availableDrives , selectedDrives ) ;
199+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
182200 } else {
183- selectedDrives = model . selectedDrives ;
184- selectedDrivesModelMap . set ( selectedDrives , model ) ;
201+ selectedDrives = driveListModel . selectedDrives ;
202+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
185203 }
186204 async function onDriveAdded ( selectedDrives : Drive [ ] ) {
187- if ( model ) {
188- const response = model . sendConnectionRequest ( selectedDrives ) ;
205+ if ( driveListModel ) {
206+ const response = driveListModel . sendConnectionRequest ( selectedDrives ) ;
189207 if ( ( await response ) === true ) {
190- addDriveContentsToPanel ( selectedDrives [ selectedDrives . length - 1 ] ) ;
208+ addDriveContentsToPanel (
209+ browserModelList ,
210+ selectedDrives [ selectedDrives . length - 1 ] ,
211+ panel
212+ ) ;
191213 } else {
192214 console . warn ( 'Connection with the drive was not possible' ) ;
193215 }
194216 }
195217 }
196218
197- if ( model ) {
219+ if ( driveListModel ) {
198220 showDialog ( {
199- body : new DriveListView ( model , app . docRegistry ) ,
221+ body : new DriveListView ( driveListModel , app . docRegistry ) ,
200222 buttons : [ Dialog . cancelButton ( ) ]
201223 } ) ;
202224 }
203225
204- model . stateChanged . connect ( async ( ) => {
205- if ( model ) {
206- onDriveAdded ( model . selectedDrives ) ;
226+ driveListModel . stateChanged . connect ( async ( ) => {
227+ if ( driveListModel ) {
228+ onDriveAdded ( driveListModel . selectedDrives ) ;
207229 }
208230 } ) ;
209231 } ,
0 commit comments