From 73a947de96941d7d254f397d7f2cbb0df7f69958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Krassowski?= <5832902+krassowski@users.noreply.github.com> Date: Tue, 16 Apr 2024 09:44:28 +0100 Subject: [PATCH] Fix recents menu not getting updated after loading history (#16149) * Fix recents menu not getting updated after loading history * Update items even before first change from manager, add isEnabled on the clear recent documents command. --- packages/docmanager-extension/src/recents.ts | 3 +++ packages/docmanager/src/recents.ts | 1 + packages/docmanager/test/recents.spec.ts | 13 +++++++++++++ packages/mainmenu-extension/src/recents.ts | 3 ++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/docmanager-extension/src/recents.ts b/packages/docmanager-extension/src/recents.ts index 24a3341f52f7..7561becbef83 100644 --- a/packages/docmanager-extension/src/recents.ts +++ b/packages/docmanager-extension/src/recents.ts @@ -67,6 +67,9 @@ export const recentsManagerPlugin: JupyterFrontEndPlugin = { execute: () => { recentsManager.clearRecents(); }, + isEnabled: () => + recentsManager.recentlyOpened.length != 0 || + recentsManager.recentlyClosed.length != 0, label: trans.__('Clear Recent Documents'), caption: trans.__('Clear the list of recently opened items.') }); diff --git a/packages/docmanager/src/recents.ts b/packages/docmanager/src/recents.ts index eaef2f5dcd29..e6fad90bcb7e 100644 --- a/packages/docmanager/src/recents.ts +++ b/packages/docmanager/src/recents.ts @@ -218,6 +218,7 @@ export class RecentsManager implements IRecentsManager { type as 'opened' | 'closed' ); } + this._recentsChanged.emit(undefined); } /** diff --git a/packages/docmanager/test/recents.spec.ts b/packages/docmanager/test/recents.spec.ts index f19564842f6a..2db411e8b326 100644 --- a/packages/docmanager/test/recents.spec.ts +++ b/packages/docmanager/test/recents.spec.ts @@ -46,6 +46,19 @@ describe('@jupyterlab/docmanager', () => { it('should create a new recents manager', () => { expect(manager).toBeInstanceOf(RecentsManager); }); + + it('should emit `changed` signal after loading', async () => { + const stateDB = new StateDB(); + const done = new PromiseDelegate(); + manager = new TestRecentsManager({ + stateDB, + contents: services.contents + }); + manager.changed.connect(() => { + done.resolve(true); + }); + expect(await done.promise).toBe(true); + }); }); describe('#isDisposed', () => { diff --git a/packages/mainmenu-extension/src/recents.ts b/packages/mainmenu-extension/src/recents.ts index b83670051e9a..ce266771044a 100644 --- a/packages/mainmenu-extension/src/recents.ts +++ b/packages/mainmenu-extension/src/recents.ts @@ -52,6 +52,7 @@ class RecentsMenu extends Menu { super(options); this._manager = options.manager; this._showDirectories = options.showDirectories; + this.updateItems(); this._manager.changed.connect(this.updateItems, this); } @@ -230,7 +231,7 @@ export const recentsMenuPlugin: JupyterFrontEndPlugin = { }); submenu.title.label = trans.__('Open Recent'); mainMenu.fileMenu.addItem({ - type: 'submenu' as Menu.ItemType, + type: 'submenu', submenu, rank: 1 });