@@ -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 [ ] = [ ] ;
104105 const availableList1 : Drive [ ] = [
105106 avocadoDrive ,
106107 cocoDrive ,
@@ -111,32 +112,25 @@ 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 ) ;
136-
137- return modelList ;
125+ return driveModel ;
126+ }
127+ function buildInitialBrowserModelList ( selectedDrives : Drive [ ] ) {
128+ const browserModelList : FilterFileBrowserModel [ ] = [ ] ;
129+ const localDriveModel = createFilterFileBrowserModel ( manager ) ;
130+ browserModelList . push ( localDriveModel ) ;
131+ return browserModelList ;
138132 }
139- const browserModelList = buildInitialBrowserModelList ( ) ;
133+ const browserModelList = buildInitialBrowserModelList ( selectedList1 ) ;
140134 const trans = translator . load ( 'jupyter_drives' ) ;
141135 const panel = new MultiDrivesFileBrowser ( {
142136 modelList : browserModelList ,
@@ -162,48 +156,71 @@ export async function activateAddDrivesPlugin(
162156 translator
163157 )
164158 ) ;
165-
166- function addDriveContentsToPanel ( addedDrive : Drive ) {
159+ function addToBrowserModelList (
160+ browserModelList : FilterFileBrowserModel [ ] ,
161+ addedDrive : Drive
162+ ) {
163+ const addedDriveModel = createFilterFileBrowserModel ( manager , addedDrive ) ;
164+ browserModelList . push ( addedDriveModel ) ;
165+ return browserModelList ;
166+ }
167+ function addDriveContentsToPanel (
168+ browserModelList : FilterFileBrowserModel [ ] ,
169+ addedDrive : Drive ,
170+ panel : MultiDrivesFileBrowser
171+ ) {
172+ const addedDriveModel = createFilterFileBrowserModel ( manager , addedDrive ) ;
173+ browserModelList = addToBrowserModelList ( browserModelList , addedDrive ) ;
167174 manager . services . contents . addDrive ( addedDrive ) ;
175+ const AddedDriveBrowser = new DriveBrowser ( {
176+ model : addedDriveModel ,
177+ breadCrumbs : new BreadCrumbs ( { model : addedDriveModel } ) ,
178+ driveName : addedDrive . name
179+ } ) ;
180+ panel . addWidget ( AddedDriveBrowser ) ;
168181 }
169182
170183 /* Dialog to select the drive */
171184 addJupyterLabThemeChangeListener ( ) ;
172185 const selectedDrivesModelMap = new Map < Drive [ ] , DriveListModel > ( ) ;
173186 let selectedDrives : Drive [ ] = selectedList1 ;
174187 const availableDrives : Drive [ ] = availableList1 ;
175- let model = selectedDrivesModelMap . get ( selectedDrives ) ;
188+ let driveListModel = selectedDrivesModelMap . get ( selectedDrives ) ;
176189
177190 commands . addCommand ( CommandIDs . openDrivesDialog , {
178191 execute : async args => {
179- if ( ! model ) {
180- model = new DriveListModel ( availableDrives , selectedDrives ) ;
181- selectedDrivesModelMap . set ( selectedDrives , model ) ;
192+ if ( ! driveListModel ) {
193+ driveListModel = new DriveListModel ( availableDrives , selectedDrives ) ;
194+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
182195 } else {
183- selectedDrives = model . selectedDrives ;
184- selectedDrivesModelMap . set ( selectedDrives , model ) ;
196+ selectedDrives = driveListModel . selectedDrives ;
197+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
185198 }
186199 async function onDriveAdded ( selectedDrives : Drive [ ] ) {
187- if ( model ) {
188- const response = model . sendConnectionRequest ( selectedDrives ) ;
200+ if ( driveListModel ) {
201+ const response = driveListModel . sendConnectionRequest ( selectedDrives ) ;
189202 if ( ( await response ) === true ) {
190- addDriveContentsToPanel ( selectedDrives [ selectedDrives . length - 1 ] ) ;
203+ addDriveContentsToPanel (
204+ browserModelList ,
205+ selectedDrives [ selectedDrives . length - 1 ] ,
206+ panel
207+ ) ;
191208 } else {
192209 console . warn ( 'Connection with the drive was not possible' ) ;
193210 }
194211 }
195212 }
196213
197- if ( model ) {
214+ if ( driveListModel ) {
198215 showDialog ( {
199- body : new DriveListView ( model , app . docRegistry ) ,
216+ body : new DriveListView ( driveListModel , app . docRegistry ) ,
200217 buttons : [ Dialog . cancelButton ( ) ]
201218 } ) ;
202219 }
203220
204- model . stateChanged . connect ( async ( ) => {
205- if ( model ) {
206- onDriveAdded ( model . selectedDrives ) ;
221+ driveListModel . stateChanged . connect ( async ( ) => {
222+ if ( driveListModel ) {
223+ onDriveAdded ( driveListModel . selectedDrives ) ;
207224 }
208225 } ) ;
209226 } ,
0 commit comments