Skip to content

Commit 60c8eec

Browse files
Rename class DriveListing -> DriveBrowser, rename file browser.ts -> multidrivesbrowser.ts, dirlisting.ts -> drivelisting.ts. Restore in index.ts a proper logics to add the content of an added driveBrowser to the multidrives browser when a drive is selected and added in the dialog.
1 parent 2e46f8a commit 60c8eec

File tree

6 files changed

+73
-57
lines changed

6 files changed

+73
-57
lines changed

src/crumbslayout.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '@lumino/widgets';
1111
import { caretDownIcon } from '@jupyterlab/ui-components';
1212
import { BreadCrumbs } from '@jupyterlab/filebrowser';
13-
import { DriveListing } from './drivelisting';
13+
import { DriveBrowser } from './drivebrowser';
1414

1515
/**
1616
* Accordion panel layout that adds a breadcrumb in widget title if present.
@@ -31,7 +31,7 @@ export class BreadCrumbsLayout extends AccordionLayout {
3131
* #### Undefined Behavior
3232
* An `index` which is non-integral.
3333
*/
34-
insertWidget(index: number, widget: DriveListing): void {
34+
insertWidget(index: number, widget: DriveBrowser): void {
3535
if (widget.breadcrumbs) {
3636
this._breadcrumbs.set(widget, widget.breadcrumbs);
3737
widget.breadcrumbs.addClass('jp-AccordionPanel-breadcrumbs');

src/drivelisting.ts renamed to src/drivebrowser.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import { ITranslator } from '@jupyterlab/translation';
1212
*/
1313
const CRUMBS_CLASS = 'jp-FileBrowser-crumbs';
1414

15-
export class DriveListing extends DirListing {
16-
constructor(options: DriveListing.IOptions) {
15+
export class DriveBrowser extends DirListing {
16+
constructor(options: DriveBrowser.IOptions) {
1717
super({
1818
model: options.model,
1919
translator: options.translator,
@@ -35,7 +35,7 @@ export class DriveListing extends DirListing {
3535
private _breadcrumbs: BreadCrumbs;
3636
}
3737

38-
export namespace DriveListing {
38+
export namespace DriveBrowser {
3939
/**
4040
* An options object for initializing DrivesListing widget.
4141
*/

src/index.ts

+57-40
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ import { DriveListModel, DriveListView } from './drivelistmanager';
1111
import { DriveIcon } from './icons';
1212
import { IDocumentManager } from '@jupyterlab/docmanager';
1313
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';
1616
import { ISettingRegistry } from '@jupyterlab/settingregistry';
1717
import {
1818
createToolbarFactory,
1919
IToolbarWidgetRegistry,
2020
setToolbar
2121
} from '@jupyterlab/apputils';
22+
import { DriveBrowser } from './drivebrowser';
2223

2324
const FILE_BROWSER_FACTORY = 'FileBrowser';
2425
const 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
},

src/browser.ts renamed to src/multidrivesbrowser.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import { IDocumentManager } from '@jupyterlab/docmanager';
1414
import { AccordionPanel } from '@lumino/widgets';
1515
import { BreadCrumbsLayout } from './crumbslayout';
16-
import { DriveListing } from './drivelisting';
16+
import { DriveBrowser } from './drivebrowser';
1717

1818
/*
1919
* The class name added to file browsers.
@@ -76,7 +76,7 @@ export class MultiDrivesFileBrowser extends SidePanel {
7676
driveName = 'Local Drive';
7777
}
7878
console.log('driveName:', driveName);
79-
const listing = new DriveListing({
79+
const listing = new DriveBrowser({
8080
model: model,
8181
translator: translator,
8282
renderer: renderer,
@@ -103,22 +103,22 @@ export class MultiDrivesFileBrowser extends SidePanel {
103103
*
104104
* @returns The created DirListing instance.
105105
*/
106-
protected createDriveListing(options: DriveListing.IOptions): DriveListing {
107-
return new DriveListing(options);
106+
protected createDriveBrowser(options: DriveBrowser.IOptions): DriveBrowser {
107+
return new DriveBrowser(options);
108108
}
109109

110110
/**
111111
* Rename the first currently selected item.
112112
*
113113
* @returns A promise that resolves with the new name of the item.
114114
*/
115-
rename(listing: DriveListing): Promise<string> {
115+
rename(listing: DriveBrowser): Promise<string> {
116116
return listing.rename();
117117
}
118118

119119
private async _createNew(
120120
options: Contents.ICreateOptions,
121-
listing: DriveListing
121+
listing: DriveBrowser
122122
): Promise<Contents.IModel> {
123123
try {
124124
const model = await this.manager.newUntitled(options);
@@ -137,7 +137,7 @@ export class MultiDrivesFileBrowser extends SidePanel {
137137
*/
138138
async createNewDirectory(
139139
model: FilterFileBrowserModel,
140-
listing: DriveListing
140+
listing: DriveBrowser
141141
): Promise<Contents.IModel> {
142142
if (this._directoryPending) {
143143
return this._directoryPending;
@@ -162,7 +162,7 @@ export class MultiDrivesFileBrowser extends SidePanel {
162162
async createNewFile(
163163
options: MultiDrivesFileBrowser.IFileOptions,
164164
model: FilterFileBrowserModel,
165-
listing: DriveListing
165+
listing: DriveBrowser
166166
): Promise<Contents.IModel> {
167167
if (this._filePending) {
168168
return this._filePending;

style/base.css

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ li {
7373
display: none;
7474
}
7575

76-
.lm-SplitPanel-handle {
76+
/*.lm-SplitPanel-handle {
7777
display: none;
78-
}
78+
}*/
7979

8080
.lm-AccordionPanel .jp-AccordionPanel-title {
8181
box-sizing: border-box;

style/drive.svg

+1-2
Loading

0 commit comments

Comments
 (0)