@@ -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 [ ] = [ ] ;
104
105
const availableList1 : Drive [ ] = [
105
106
avocadoDrive ,
106
107
cocoDrive ,
@@ -111,32 +112,25 @@ 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 ) ;
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 ;
138
132
}
139
- const browserModelList = buildInitialBrowserModelList ( ) ;
133
+ const browserModelList = buildInitialBrowserModelList ( selectedList1 ) ;
140
134
const trans = translator . load ( 'jupyter_drives' ) ;
141
135
const panel = new MultiDrivesFileBrowser ( {
142
136
modelList : browserModelList ,
@@ -162,48 +156,71 @@ export async function activateAddDrivesPlugin(
162
156
translator
163
157
)
164
158
) ;
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 ) ;
167
174
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 ) ;
168
181
}
169
182
170
183
/* Dialog to select the drive */
171
184
addJupyterLabThemeChangeListener ( ) ;
172
185
const selectedDrivesModelMap = new Map < Drive [ ] , DriveListModel > ( ) ;
173
186
let selectedDrives : Drive [ ] = selectedList1 ;
174
187
const availableDrives : Drive [ ] = availableList1 ;
175
- let model = selectedDrivesModelMap . get ( selectedDrives ) ;
188
+ let driveListModel = selectedDrivesModelMap . get ( selectedDrives ) ;
176
189
177
190
commands . addCommand ( CommandIDs . openDrivesDialog , {
178
191
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 ) ;
182
195
} else {
183
- selectedDrives = model . selectedDrives ;
184
- selectedDrivesModelMap . set ( selectedDrives , model ) ;
196
+ selectedDrives = driveListModel . selectedDrives ;
197
+ selectedDrivesModelMap . set ( selectedDrives , driveListModel ) ;
185
198
}
186
199
async function onDriveAdded ( selectedDrives : Drive [ ] ) {
187
- if ( model ) {
188
- const response = model . sendConnectionRequest ( selectedDrives ) ;
200
+ if ( driveListModel ) {
201
+ const response = driveListModel . sendConnectionRequest ( selectedDrives ) ;
189
202
if ( ( await response ) === true ) {
190
- addDriveContentsToPanel ( selectedDrives [ selectedDrives . length - 1 ] ) ;
203
+ addDriveContentsToPanel (
204
+ browserModelList ,
205
+ selectedDrives [ selectedDrives . length - 1 ] ,
206
+ panel
207
+ ) ;
191
208
} else {
192
209
console . warn ( 'Connection with the drive was not possible' ) ;
193
210
}
194
211
}
195
212
}
196
213
197
- if ( model ) {
214
+ if ( driveListModel ) {
198
215
showDialog ( {
199
- body : new DriveListView ( model , app . docRegistry ) ,
216
+ body : new DriveListView ( driveListModel , app . docRegistry ) ,
200
217
buttons : [ Dialog . cancelButton ( ) ]
201
218
} ) ;
202
219
}
203
220
204
- model . stateChanged . connect ( async ( ) => {
205
- if ( model ) {
206
- onDriveAdded ( model . selectedDrives ) ;
221
+ driveListModel . stateChanged . connect ( async ( ) => {
222
+ if ( driveListModel ) {
223
+ onDriveAdded ( driveListModel . selectedDrives ) ;
207
224
}
208
225
} ) ;
209
226
} ,
0 commit comments