From f25ec49b19e7f10a7c8f3e4f564747ac69d93fe6 Mon Sep 17 00:00:00 2001 From: HaudinFlorence Date: Tue, 19 Dec 2023 17:13:59 +0100 Subject: [PATCH] Add a disposed signal on Drive and use it for disposing the proper sidepanel and its respective drive filebrowser. --- src/contents.ts | 9 +++++++++ src/index.ts | 23 +++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/contents.ts b/src/contents.ts index 9abae7b..6f3ed12 100644 --- a/src/contents.ts +++ b/src/contents.ts @@ -267,6 +267,13 @@ export class Drive implements Contents.IDrive { return this._isDisposed; } + /** + * A signal emitted when the drive is disposed. + */ + get disposed(): ISignal { + return this._disposed; + } + /** * Dispose of the resources held by the manager. */ @@ -275,6 +282,7 @@ export class Drive implements Contents.IDrive { return; } this._isDisposed = true; + this._disposed.emit(); Signal.clearData(this); } @@ -768,6 +776,7 @@ export class Drive implements Contents.IDrive { private _creationDate: string = ''; private _fileChanged = new Signal(this); private _isDisposed: boolean = false; + private _disposed = new Signal(this); } export namespace Drive { diff --git a/src/index.ts b/src/index.ts index 90ddd78..3ab9e4c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,7 @@ import { DriveIcon } from './icons'; import { IDocumentManager } from '@jupyterlab/docmanager'; import { Drive } from './contents'; import { - FileBrowser, + /*FileBrowser,*/ /*FilterFileBrowserModel,*/ IFileBrowserFactory } from '@jupyterlab/filebrowser'; @@ -100,12 +100,10 @@ export async function activateAddDrivesPlugin( function restoreDriveName(id: string) { const list1 = id.split('-file-'); let driveName = list1[0]; - console.log('driveName:', driveName); for (let i = 0; i < driveName.length; i++) { if (driveName[i] === '-') { const index = i; const char = driveName.charAt(index + 1).toUpperCase(); - console.log('char:', char); driveName = driveName.replace(driveName.charAt(index + 1), char); driveName = driveName.replace(driveName.charAt(index), ''); } @@ -134,16 +132,17 @@ export async function activateAddDrivesPlugin( return panel; } - const PanelDriveBrowserMap = new Map(); function addDriveToPanel( drive: Drive, factory: IFileBrowserFactory - ): Map { + ): void { const driveBrowser = factory.createFileBrowser('drive-browser', { driveName: drive.name }); const panel = createSidePanel(drive.name); - PanelDriveBrowserMap.set(driveBrowser, panel); + drive.disposed.connect(() => { + panel.dispose(); + }); panel.addWidget(driveBrowser); factory.tracker.add(driveBrowser); @@ -157,7 +156,6 @@ export async function activateAddDrivesPlugin( translator ) ); - return PanelDriveBrowserMap; } driveList.forEach(drive => { @@ -179,16 +177,9 @@ export async function activateAddDrivesPlugin( const node = app.contextMenuHitTest(test); if (node?.dataset.id) { const driveName = restoreDriveName(node?.dataset.id); - driveList.forEach(drive => { - if (drive.name === driveName) { - drive.dispose(); - } - }); + const drive = driveList.find(drive => drive.name === driveName); + drive?.dispose(); } - const panelToDispose = Array.from(app.shell.widgets('left')).find( - widget => widget.id === node?.dataset.id - ); - panelToDispose?.dispose(); } }, caption: trans.__('Remove drive filebrowser.'),