From f602ad8a636ad3ee70d0e9f4d8cc2e91a6baf3cf Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Thu, 16 Jan 2025 17:42:17 +0000 Subject: [PATCH] Desktop: Resolves #11664: Reorganised note list context menu --- .../commands/openNoteInNewWindow.ts | 2 +- .../commands/startExternalEditing.ts | 2 +- .../app-desktop/gui/utils/NoteListUtils.ts | 96 ++++++++++--------- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/packages/app-desktop/commands/openNoteInNewWindow.ts b/packages/app-desktop/commands/openNoteInNewWindow.ts index 7683e635d7..13d8e3a63c 100644 --- a/packages/app-desktop/commands/openNoteInNewWindow.ts +++ b/packages/app-desktop/commands/openNoteInNewWindow.ts @@ -7,7 +7,7 @@ import Setting from '@joplin/lib/models/Setting'; export const declaration: CommandDeclaration = { name: 'openNoteInNewWindow', - label: () => _('Edit in new window'), + label: () => _('Open in new window'), iconName: 'icon-share', }; diff --git a/packages/app-desktop/commands/startExternalEditing.ts b/packages/app-desktop/commands/startExternalEditing.ts index c1ed130155..42cfacd509 100644 --- a/packages/app-desktop/commands/startExternalEditing.ts +++ b/packages/app-desktop/commands/startExternalEditing.ts @@ -7,7 +7,7 @@ const bridge = require('@electron/remote').require('./bridge').default; export const declaration: CommandDeclaration = { name: 'startExternalEditing', - label: () => _('Edit in external editor'), + label: () => _('Open in external editor'), iconName: 'icon-share', }; diff --git a/packages/app-desktop/gui/utils/NoteListUtils.ts b/packages/app-desktop/gui/utils/NoteListUtils.ts index cafef6a464..20017890f4 100644 --- a/packages/app-desktop/gui/utils/NoteListUtils.ts +++ b/packages/app-desktop/gui/utils/NoteListUtils.ts @@ -42,34 +42,24 @@ export default class NoteListUtils { const menu = new Menu(); if (!includeEncryptedNotes && !includeDeletedNotes) { + if (singleNoteId) { + menu.append( + new MenuItem(menuUtils.commandToStatefulMenuItem('openNoteInNewWindow', singleNoteId)), + ); + + const cmd = props.watchedNoteFiles.includes(singleNoteId) ? 'stopExternalEditing' : 'startExternalEditing'; + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + menu.append(new MenuItem(menuUtils.commandToStatefulMenuItem(cmd, singleNoteId) as any)); + + menu.append(new MenuItem({ type: 'separator' })); + } + menu.append( // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied new MenuItem(menuUtils.commandToStatefulMenuItem('setTags', noteIds) as any), ); - menu.append( - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - new MenuItem(menuUtils.commandToStatefulMenuItem('moveToFolder', noteIds) as any), - ); - - menu.append( - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - new MenuItem(menuUtils.commandToStatefulMenuItem('duplicateNote', noteIds) as any), - ); - - if (singleNoteId) { - const editInMenu = new Menu(); - - const cmd = props.watchedNoteFiles.includes(singleNoteId) ? 'stopExternalEditing' : 'startExternalEditing'; - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - editInMenu.append(new MenuItem(menuUtils.commandToStatefulMenuItem(cmd, singleNoteId) as any)); - editInMenu.append( - new MenuItem(menuUtils.commandToStatefulMenuItem('openNoteInNewWindow', singleNoteId)), - ); - - menu.append(new MenuItem({ label: _('Edit in...'), submenu: editInMenu })); - } - + menu.append(new MenuItem({ type: 'separator' })); if (noteIds.length <= 1) { menu.append( @@ -107,6 +97,41 @@ export default class NoteListUtils { ); } + menu.append( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + new MenuItem(menuUtils.commandToStatefulMenuItem('moveToFolder', noteIds) as any), + ); + + menu.append( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + new MenuItem(menuUtils.commandToStatefulMenuItem('duplicateNote', noteIds) as any), + ); + + if (includeDeletedNotes) { + menu.append( + new MenuItem( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + menuUtils.commandToStatefulMenuItem('restoreNote', noteIds) as any, + ), + ); + + menu.append( + new MenuItem( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + menuUtils.commandToStatefulMenuItem('permanentlyDeleteNote', noteIds) as any, + ), + ); + } else { + menu.append( + new MenuItem( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied + menuUtils.commandToStatefulMenuItem('deleteNote', noteIds) as any, + ), + ); + } + + menu.append(new MenuItem({ type: 'separator' })); + menu.append( new MenuItem({ label: _('Copy Markdown link'), @@ -132,6 +157,8 @@ export default class NoteListUtils { ); } + menu.append(new MenuItem({ type: 'separator' })); + if ([9, 10].includes(Setting.value('sync.target'))) { menu.append( new MenuItem( @@ -177,29 +204,6 @@ export default class NoteListUtils { menu.append(exportMenuItem); } - if (includeDeletedNotes) { - menu.append( - new MenuItem( - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - menuUtils.commandToStatefulMenuItem('restoreNote', noteIds) as any, - ), - ); - - menu.append( - new MenuItem( - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - menuUtils.commandToStatefulMenuItem('permanentlyDeleteNote', noteIds) as any, - ), - ); - } else { - menu.append( - new MenuItem( - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied - menuUtils.commandToStatefulMenuItem('deleteNote', noteIds) as any, - ), - ); - } - const pluginViewInfos = pluginUtils.viewInfosByType(props.plugins, 'menuItem'); for (const info of pluginViewInfos) {