From d0ea6d9e8d943d6ab3fb8e7b51504962bb23806b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 21 Jul 2025 14:32:03 +0300 Subject: [PATCH] feat(views/board): use same note title editing mechanism for insert above/below --- .../widgets/view_widgets/board_view/api.ts | 7 +++++-- .../view_widgets/board_view/context_menu.ts | 8 +++++--- .../widgets/view_widgets/board_view/index.ts | 20 ++++++++++++++++++- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/view_widgets/board_view/api.ts b/apps/client/src/widgets/view_widgets/board_view/api.ts index cd94abce9..2cf6b8cc2 100644 --- a/apps/client/src/widgets/view_widgets/board_view/api.ts +++ b/apps/client/src/widgets/view_widgets/board_view/api.ts @@ -1,7 +1,7 @@ import appContext from "../../../components/app_context"; import FNote from "../../../entities/fnote"; import attributes from "../../../services/attributes"; -import bulk_action, { executeBulkActions } from "../../../services/bulk_action"; +import { executeBulkActions } from "../../../services/bulk_action"; import note_create from "../../../services/note_create"; import ViewModeStorage from "../view_mode_storage"; import { BoardData } from "./config"; @@ -40,7 +40,8 @@ export default class BoardApi { const { note } = await note_create.createNote(this._parentNoteId, { activate: false, targetBranchId: relativeToBranchId, - target: direction + target: direction, + title: "New item" }); if (!note) { @@ -52,6 +53,8 @@ export default class BoardApi { if (open) { this.openNote(noteId); } + + return note; } async renameColumn(oldValue: string, newValue: string, noteIds: string[]) { diff --git a/apps/client/src/widgets/view_widgets/board_view/context_menu.ts b/apps/client/src/widgets/view_widgets/board_view/context_menu.ts index 9ee9909e0..f5e792d53 100644 --- a/apps/client/src/widgets/view_widgets/board_view/context_menu.ts +++ b/apps/client/src/widgets/view_widgets/board_view/context_menu.ts @@ -4,13 +4,15 @@ import branches from "../../../services/branches.js"; import dialog from "../../../services/dialog.js"; import { t } from "../../../services/i18n.js"; import BoardApi from "./api.js"; +import type BoardView from "./index.js"; interface ShowNoteContextMenuArgs { $container: JQuery; api: BoardApi; + boardView: BoardView; } -export function setupContextMenu({ $container, api }: ShowNoteContextMenuArgs) { +export function setupContextMenu({ $container, api, boardView }: ShowNoteContextMenuArgs) { $container.on("contextmenu", ".board-note", showNoteContextMenu); $container.on("contextmenu", ".board-column", showColumnContextMenu); @@ -71,12 +73,12 @@ export function setupContextMenu({ $container, api }: ShowNoteContextMenuArgs) { { title: t("board_view.insert-above"), uiIcon: "bx bx-list-plus", - handler: () => api.insertRowAtPosition(column, branchId, "before") + handler: () => boardView.insertItemAtPosition(column, branchId, "before") }, { title: t("board_view.insert-below"), uiIcon: "bx bx-empty", - handler: () => api.insertRowAtPosition(column, branchId, "after") + handler: () => boardView.insertItemAtPosition(column, branchId, "after") }, { title: "----" }, { diff --git a/apps/client/src/widgets/view_widgets/board_view/index.ts b/apps/client/src/widgets/view_widgets/board_view/index.ts index 60e347320..8d28051dc 100644 --- a/apps/client/src/widgets/view_widgets/board_view/index.ts +++ b/apps/client/src/widgets/view_widgets/board_view/index.ts @@ -311,7 +311,8 @@ export default class BoardView extends ViewMode { setupContextMenu({ $container: this.$container, - api: this.api + api: this.api, + boardView: this }); // Setup column title editing and add column functionality @@ -437,6 +438,23 @@ export default class BoardView extends ViewMode { } } + async insertItemAtPosition(column: string, relativeToBranchId: string, direction: "before" | "after"): Promise { + try { + // Create the note without opening it + const newNote = await this.api?.insertRowAtPosition(column, relativeToBranchId, direction, false); + + if (newNote) { + // Refresh the board to show the new item + await this.renderList(); + + // Start inline editing of the newly created card + this.startInlineEditingCard(newNote.noteId); + } + } catch (error) { + console.error("Failed to insert new item:", error); + } + } + private startInlineEditingCard(noteId: string) { this.renderer?.startInlineEditing(noteId); }