From aa42eab698a9c2be2a729eb5f0a4fdee8d686a70 Mon Sep 17 00:00:00 2001 From: Trang Doan Date: Tue, 5 May 2026 18:18:15 -0400 Subject: [PATCH] ENG-1692: Open ModifyNodeModal pre-populated on hotkey node creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of immediately calling createDiscourseNode after a type is picked in InlineNodeTypePicker, open ModifyNodeModal with the selected text as initialTitle and the chosen type pre-selected — consistent with right-click and tag-click creation flows. Co-Authored-By: Claude Sonnet 4.6 --- .../src/components/InlineNodeTypePicker.ts | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/apps/obsidian/src/components/InlineNodeTypePicker.ts b/apps/obsidian/src/components/InlineNodeTypePicker.ts index 1bf42f0bd..14ca6f8f0 100644 --- a/apps/obsidian/src/components/InlineNodeTypePicker.ts +++ b/apps/obsidian/src/components/InlineNodeTypePicker.ts @@ -1,7 +1,8 @@ -import { Editor } from "obsidian"; +import { Editor, MarkdownView } from "obsidian"; import { DiscourseNode } from "~/types"; -import { createDiscourseNode } from "~/utils/createNode"; import type DiscourseGraphPlugin from "~/index"; +import { createModifyNodeModalSubmitHandler } from "~/utils/registerCommands"; +import ModifyNodeModal from "./ModifyNodeModal"; /** * A popover that shows all node types inline near the cursor/selection. @@ -98,7 +99,7 @@ export class InlineNodeTypePicker { itemEl.addEventListener("mousedown", (e) => { e.preventDefault(); e.stopPropagation(); - void this.selectItem(item); + this.selectItem(item); }); itemEl.addEventListener("mouseenter", () => { @@ -138,14 +139,22 @@ export class InlineNodeTypePicker { } } - private async selectItem(item: DiscourseNode) { + private selectItem(item: DiscourseNode) { this.close(); - await createDiscourseNode({ + const currentFile = + this.options.plugin.app.workspace.getActiveViewOfType(MarkdownView) + ?.file || undefined; + new ModifyNodeModal(this.options.plugin.app, { + nodeTypes: this.options.plugin.settings.nodeTypes, plugin: this.options.plugin, - nodeType: item, - text: this.options.selectedText, - editor: this.options.editor, - }); + initialTitle: this.options.selectedText, + initialNodeType: item, + currentFile, + onSubmit: createModifyNodeModalSubmitHandler( + this.options.plugin, + this.options.editor, + ), + }).open(); } private setupEventHandlers() { @@ -173,7 +182,7 @@ export class InlineNodeTypePicker { e.stopPropagation(); const selectedItem = this.items[this.selectedIndex]; if (selectedItem) { - void this.selectItem(selectedItem); + this.selectItem(selectedItem); } } else if (e.key === "Escape") { e.preventDefault();