mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-30 12:13:52 +08:00 
			
		
		
		
	chore(client/ts): port menus/launcher_context_menu
This commit is contained in:
		
							parent
							
								
									a14d112a5c
								
							
						
					
					
						commit
						6140bb5d99
					
				| @ -74,6 +74,7 @@ type CommandMappings = { | ||||
|     showPasswordNotSet: CommandData; | ||||
|     showProtectedSessionPasswordDialog: CommandData; | ||||
|     closeProtectedSessionPasswordDialog: CommandData; | ||||
|     resetLauncher: CommandData; | ||||
| } | ||||
| 
 | ||||
| type EventMappings = { | ||||
|  | ||||
							
								
								
									
										7
									
								
								src/public/app/components/events.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/public/app/components/events.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| import { MenuCommandItem } from "../menus/context_menu.js"; | ||||
| 
 | ||||
| type ListenerReturnType = void | Promise<void>; | ||||
| 
 | ||||
| export interface SelectMenuItemEventListener { | ||||
|     selectMenuItemHandler(item: MenuCommandItem): ListenerReturnType; | ||||
| } | ||||
| @ -1,21 +1,28 @@ | ||||
| import treeService from '../services/tree.js'; | ||||
| import treeService, { Node } from '../services/tree.js'; | ||||
| import froca from "../services/froca.js"; | ||||
| import contextMenu from "./context_menu.js"; | ||||
| import contextMenu, { MenuCommandItem, MenuItem } from "./context_menu.js"; | ||||
| import dialogService from "../services/dialog.js"; | ||||
| import server from "../services/server.js"; | ||||
| import { t } from '../services/i18n.js'; | ||||
| import type { SelectMenuItemEventListener } from '../components/events.js'; | ||||
| import NoteTreeWidget from '../widgets/note_tree.js'; | ||||
| 
 | ||||
| export default class LauncherContextMenu { | ||||
|     /** | ||||
|      * @param {NoteTreeWidget} treeWidget | ||||
|      * @param {FancytreeNode} node | ||||
|      */ | ||||
|     constructor(treeWidget, node) { | ||||
| interface ShowContext { | ||||
|     pageX: number; | ||||
|     pageY: number; | ||||
| } | ||||
| 
 | ||||
| export default class LauncherContextMenu implements SelectMenuItemEventListener { | ||||
| 
 | ||||
|     private treeWidget: NoteTreeWidget; | ||||
|     private node: Node; | ||||
| 
 | ||||
|     constructor(treeWidget: NoteTreeWidget, node: Node) { | ||||
|         this.treeWidget = treeWidget; | ||||
|         this.node = node; | ||||
|     } | ||||
| 
 | ||||
|     async show(e) { | ||||
|     async show(e: ShowContext) { | ||||
|         contextMenu.show({ | ||||
|             x: e.pageX, | ||||
|             y: e.pageY, | ||||
| @ -24,17 +31,17 @@ export default class LauncherContextMenu { | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     async getMenuItems() { | ||||
|         const note = await froca.getNote(this.node.data.noteId); | ||||
|     async getMenuItems(): Promise<MenuItem[]> { | ||||
|         const note = this.node.data.noteId ? await froca.getNote(this.node.data.noteId) : null; | ||||
|         const parentNoteId = this.node.getParent().data.noteId; | ||||
| 
 | ||||
|         const isVisibleRoot = note.noteId === '_lbVisibleLaunchers'; | ||||
|         const isAvailableRoot = note.noteId === '_lbAvailableLaunchers'; | ||||
|         const isVisibleRoot = note?.noteId === '_lbVisibleLaunchers'; | ||||
|         const isAvailableRoot = note?.noteId === '_lbAvailableLaunchers'; | ||||
|         const isVisibleItem = parentNoteId === '_lbVisibleLaunchers'; | ||||
|         const isAvailableItem = parentNoteId === '_lbAvailableLaunchers'; | ||||
|         const isItem = isVisibleItem || isAvailableItem; | ||||
|         const canBeDeleted = !note.noteId.startsWith("_"); // fixed notes can't be deleted
 | ||||
|         const canBeReset = !canBeDeleted && note.isLaunchBarConfig(); | ||||
|         const canBeDeleted = !note?.noteId.startsWith("_"); // fixed notes can't be deleted
 | ||||
|         const canBeReset = !canBeDeleted && note?.isLaunchBarConfig(); | ||||
| 
 | ||||
|         return [ | ||||
|             (isVisibleRoot || isAvailableRoot) ? { title: t("launcher_context_menu.add-note-launcher"), command: 'addNoteLauncher', uiIcon: "bx bx-note" } : null, | ||||
| @ -56,7 +63,11 @@ export default class LauncherContextMenu { | ||||
|         ].filter(row => row !== null); | ||||
|     } | ||||
| 
 | ||||
|     async selectMenuItemHandler({command}) { | ||||
|     async selectMenuItemHandler({command}: MenuCommandItem) { | ||||
|         if (!command) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (command === 'resetLauncher') { | ||||
|             const confirmed = await dialogService.confirm(t("launcher_context_menu.reset_launcher_confirm", { title: this.node.title })); | ||||
| 
 | ||||
| @ -5,6 +5,7 @@ import hoistedNoteService from '../services/hoisted_note.js'; | ||||
| import appContext from "../components/app_context.js"; | ||||
| 
 | ||||
| export interface Node { | ||||
|     title: string; | ||||
|     getParent(): Node; | ||||
|     getChildren(): Node[]; | ||||
|     folder: boolean; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Elian Doran
						Elian Doran