From 8a9dc14d816d1cac58246be00b423e42493fe7c4 Mon Sep 17 00:00:00 2001 From: Antonella Sgarlatta Date: Fri, 7 May 2021 12:50:28 -0300 Subject: [PATCH] fix: right-click should select note --- .../javascripts/views/notes/notes_view.ts | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/app/assets/javascripts/views/notes/notes_view.ts b/app/assets/javascripts/views/notes/notes_view.ts index 718cae459b6..dc88da49f77 100644 --- a/app/assets/javascripts/views/notes/notes_view.ts +++ b/app/assets/javascripts/views/notes/notes_view.ts @@ -78,6 +78,7 @@ class NotesViewCtrl extends PureViewCtrl { private searchKeyObserver: any private noteFlags: Partial> = {} private removeObservers: Array<() => void> = []; + private rightClickListeners: Map void> = new Map(); /* @ngInject */ constructor($timeout: ng.ITimeoutService,) { @@ -126,7 +127,7 @@ class NotesViewCtrl extends PureViewCtrl { deinit() { for (const remove of this.removeObservers) remove(); this.removeObservers.length = 0; - this.removeAllContextMenuListeners(); + this.removeRightClickListeners(); this.panelPuppet!.onReady = undefined; this.panelPuppet = undefined; window.removeEventListener('resize', this.onWindowResize, true); @@ -297,8 +298,11 @@ class NotesViewCtrl extends PureViewCtrl { )); } - private openNotesContextMenu = (e: MouseEvent) => { + private openNotesContextMenu(e: MouseEvent, note: SNNote) { e.preventDefault(); + if (!this.state.selectedNotes[note.uuid]) { + this.selectNote(note); + } this.application.getAppState().notes.setContextMenuPosition({ top: e.clientY, left: e.clientX, @@ -306,38 +310,39 @@ class NotesViewCtrl extends PureViewCtrl { this.application.getAppState().notes.setContextMenuOpen(true); } - private removeAllContextMenuListeners = () => { - const { - selectedNotes, - selectedNotesCount, - } = this.application.getAppState().notes; - if (selectedNotesCount > 0) { - Object.values(selectedNotes).forEach(({ uuid }) => { - document - .getElementById(`note-${uuid}`) - ?.removeEventListener('contextmenu', this.openNotesContextMenu); - }); + private removeRightClickListeners() { + for (const [noteUuid, listener] of this.rightClickListeners.entries()) { + document + .getElementById(`note-${noteUuid}`) + ?.removeEventListener('contextmenu', listener); } - }; + this.rightClickListeners.clear(); + } - private addContextMenuListeners = () => { - const { - selectedNotes, - selectedNotesCount, - } = this.application.getAppState().notes; - if (selectedNotesCount > 0) { - Object.values(selectedNotes).forEach(({ uuid }) => { + private addRightClickListeners() { + for (const [noteUuid, listener] of this.rightClickListeners.entries()) { + if (!this.state.renderedNotes.find(note => note.uuid === noteUuid)) { document - .getElementById(`note-${uuid}`) - ?.addEventListener('contextmenu', this.openNotesContextMenu); - }); + .getElementById(`note-${noteUuid}`) + ?.removeEventListener('contextmenu', listener); + this.rightClickListeners.delete(noteUuid); + } + } + for (const note of this.state.renderedNotes) { + if (!this.rightClickListeners.has(note.uuid)) { + const listener = (e: MouseEvent): void => { + return this.openNotesContextMenu(e, note); + }; + document + .getElementById(`note-${note.uuid}`) + ?.addEventListener('contextmenu', listener); + this.rightClickListeners.set(note.uuid, listener); + } } } async selectNote(note: SNNote): Promise { - this.removeAllContextMenuListeners(); await this.appState.notes.selectNote(note.uuid); - this.addContextMenuListeners(); } async createNewNote() { @@ -454,6 +459,7 @@ class NotesViewCtrl extends PureViewCtrl { renderedNotes, }); this.reloadPanelTitle(); + this.addRightClickListeners(); } private notesTagsList(notes: SNNote[]): string[] {