@@ -11,14 +11,15 @@ import { DriveListModel, DriveListView } from './drivelistmanager';
11
11
import { DriveIcon } from './icons' ;
12
12
import { IDocumentManager } from '@jupyterlab/docmanager' ;
13
13
import { 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' ;
16
16
import { ISettingRegistry } from '@jupyterlab/settingregistry' ;
17
17
import {
18
18
createToolbarFactory ,
19
19
IToolbarWidgetRegistry ,
20
20
setToolbar
21
21
} from '@jupyterlab/apputils' ;
22
+ import { DriveBrowser } from './drivebrowser' ;
22
23
23
24
const FILE_BROWSER_FACTORY = 'FileBrowser' ;
24
25
const FILE_BROWSER_PLUGIN_ID = '@jupyter/drives:widget' ;
@@ -100,7 +101,7 @@ export async function activateAddDrivesPlugin(
100
101
avocadoDrive . baseUrl = '/avocado/url' ;
101
102
avocadoDrive . name = 'avocadoDrive' ;
102
103
103
- const selectedList1 : Drive [ ] = [ cocoDrive ] ;
104
+ const selectedList1 : Drive [ ] = [ peachDrive , mangoDrive ] ;
104
105
const availableList1 : Drive [ ] = [
105
106
avocadoDrive ,
106
107
cocoDrive ,
@@ -111,32 +112,30 @@ export async function activateAddDrivesPlugin(
111
112
pearDrive ,
112
113
tomatoDrive
113
114
] ;
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
- } ) ;
123
115
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 ( {
128
121
manager : manager ,
129
- driveName : drive2 . name
122
+ driveName : drive ? .name
130
123
} ) ;
131
124
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
+ } ) ;
136
135
137
- return modelList ;
136
+ return browserModelList ;
138
137
}
139
- const browserModelList = buildInitialBrowserModelList ( ) ;
138
+ const browserModelList = buildInitialBrowserModelList ( selectedList1 ) ;
140
139
const trans = translator . load ( 'jupyter_drives' ) ;
141
140
const panel = new MultiDrivesFileBrowser ( {
142
141
modelList : browserModelList ,
@@ -162,48 +161,71 @@ export async function activateAddDrivesPlugin(
162
161
translator
163
162
)
164
163
) ;
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 ) ;
167
179
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 ) ;
168
186
}
169
187
170
188
/* Dialog to select the drive */
171
189
addJupyterLabThemeChangeListener ( ) ;
172
190
const selectedDrivesModelMap = new Map < Drive [ ] , DriveListModel > ( ) ;
173
191
let selectedDrives : Drive [ ] = selectedList1 ;
174
192
const availableDrives : Drive [ ] = availableList1 ;
175
- let model = selectedDrivesModelMap . get ( selectedDrives ) ;
193
+ let driveListModel = selectedDrivesModelMap . get ( selectedDrives ) ;
176
194
177
195
commands . addCommand ( CommandIDs . openDrivesDialog , {
178
196
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 ) ;
182
200
} else {
183
- selectedDrives = model . selectedDrives ;
184
- selectedDrivesModelMap . set ( selectedDrives , model ) ;
201
+ selectedDrives = driveListModel . selectedDrives ;
202
+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
185
203
}
186
204
async function onDriveAdded ( selectedDrives : Drive [ ] ) {
187
- if ( model ) {
188
- const response = model . sendConnectionRequest ( selectedDrives ) ;
205
+ if ( driveListModel ) {
206
+ const response = driveListModel . sendConnectionRequest ( selectedDrives ) ;
189
207
if ( ( await response ) === true ) {
190
- addDriveContentsToPanel ( selectedDrives [ selectedDrives . length - 1 ] ) ;
208
+ addDriveContentsToPanel (
209
+ browserModelList ,
210
+ selectedDrives [ selectedDrives . length - 1 ] ,
211
+ panel
212
+ ) ;
191
213
} else {
192
214
console . warn ( 'Connection with the drive was not possible' ) ;
193
215
}
194
216
}
195
217
}
196
218
197
- if ( model ) {
219
+ if ( driveListModel ) {
198
220
showDialog ( {
199
- body : new DriveListView ( model , app . docRegistry ) ,
221
+ body : new DriveListView ( driveListModel , app . docRegistry ) ,
200
222
buttons : [ Dialog . cancelButton ( ) ]
201
223
} ) ;
202
224
}
203
225
204
- model . stateChanged . connect ( async ( ) => {
205
- if ( model ) {
206
- onDriveAdded ( model . selectedDrives ) ;
226
+ driveListModel . stateChanged . connect ( async ( ) => {
227
+ if ( driveListModel ) {
228
+ onDriveAdded ( driveListModel . selectedDrives ) ;
207
229
}
208
230
} ) ;
209
231
} ,
0 commit comments