From 3d2a4d8c38f75bbeba0c65cc9ff083248574ee42 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 11 Sep 2025 19:35:46 +0300 Subject: [PATCH] chore(react/collections/table): reintroduce item context menu partially --- .../src/widgets/collections/board/api.ts | 1 + .../widgets/collections/board/context_menu.ts | 43 ++++++++++++ .../src/widgets/collections/board/index.tsx | 14 +++- .../view_widgets/board_view/context_menu.ts | 68 ------------------- 4 files changed, 55 insertions(+), 71 deletions(-) delete mode 100644 apps/client/src/widgets/view_widgets/board_view/context_menu.ts diff --git a/apps/client/src/widgets/collections/board/api.ts b/apps/client/src/widgets/collections/board/api.ts index 7088198de..e937f1735 100644 --- a/apps/client/src/widgets/collections/board/api.ts +++ b/apps/client/src/widgets/collections/board/api.ts @@ -9,6 +9,7 @@ export default class BoardApi { constructor( private byColumn: ColumnMap | undefined, + public columns: string[], private parentNote: FNote, private statusAttribute: string, private viewConfig: BoardViewData, diff --git a/apps/client/src/widgets/collections/board/context_menu.ts b/apps/client/src/widgets/collections/board/context_menu.ts index cdbe6b5e9..7b90d7000 100644 --- a/apps/client/src/widgets/collections/board/context_menu.ts +++ b/apps/client/src/widgets/collections/board/context_menu.ts @@ -1,4 +1,6 @@ import contextMenu, { ContextMenuEvent } from "../../../menus/context_menu"; +import link_context_menu from "../../../menus/link_context_menu"; +import branches from "../../../services/branches"; import dialog from "../../../services/dialog"; import { t } from "../../../services/i18n"; import Api from "./api"; @@ -27,3 +29,44 @@ export function openColumnContextMenu(api: Api, event: ContextMenuEvent, column: selectMenuItemHandler() {} }); } + +export function openNoteContextMenu(api: Api, event: ContextMenuEvent, noteId: string, branchId: string, column: string) { + event.preventDefault(); + event.stopPropagation(); + + contextMenu.show({ + x: event.pageX, + y: event.pageY, + items: [ + ...link_context_menu.getItems(), + { title: "----" }, + { + title: t("board_view.move-to"), + uiIcon: "bx bx-transfer", + items: api.columns.map(columnToMoveTo => ({ + title: columnToMoveTo, + enabled: columnToMoveTo !== column, + handler: () => api.changeColumn(noteId, columnToMoveTo) + })) + }, + { title: "----" }, + { + title: t("board_view.insert-above"), + uiIcon: "bx bx-list-plus", + // handler: () => boardView.insertItemAtPosition(column, branchId, "before") + }, + { + title: t("board_view.insert-below"), + uiIcon: "bx bx-empty", + // handler: () => boardView.insertItemAtPosition(column, branchId, "after") + }, + { title: "----" }, + { + title: t("board_view.delete-note"), + uiIcon: "bx bx-trash", + handler: () => branches.deleteNotes([ branchId ], false, false) + } + ], + selectMenuItemHandler: ({ command }) => link_context_menu.handleLinkContextMenuItem(command, noteId), + }); +} diff --git a/apps/client/src/widgets/collections/board/index.tsx b/apps/client/src/widgets/collections/board/index.tsx index 209f2b106..a7ba46fbc 100644 --- a/apps/client/src/widgets/collections/board/index.tsx +++ b/apps/client/src/widgets/collections/board/index.tsx @@ -10,7 +10,7 @@ import { t } from "../../../services/i18n"; import Api from "./api"; import FormTextBox from "../../react/FormTextBox"; import branchService from "../../../services/branches"; -import { openColumnContextMenu } from "./context_menu"; +import { openColumnContextMenu, openNoteContextMenu } from "./context_menu"; import { ContextMenuEvent } from "../../../menus/context_menu"; export interface BoardViewData { @@ -31,8 +31,8 @@ export default function BoardView({ note: parentNote, noteIds, viewConfig, saveC const [ draggedColumn, setDraggedColumn ] = useState<{ column: string, index: number } | null>(null); const [ columnDropPosition, setColumnDropPosition ] = useState(null); const api = useMemo(() => { - return new Api(byColumn, parentNote, statusAttribute, viewConfig ?? {}, saveConfig); - }, [ parentNote, statusAttribute ]); + return new Api(byColumn, columns ?? [], parentNote, statusAttribute, viewConfig ?? {}, saveConfig); + }, [ byColumn, columns, parentNote, statusAttribute, viewConfig, saveConfig ]); function refresh() { getBoardData(parentNote, statusAttribute, viewConfig ?? {}).then(({ byColumn, newPersistedData }) => { @@ -319,6 +319,7 @@ function Column({
)} { + openNoteContextMenu(api, e, note.noteId, branch.branchId, column); + }, [ api, note, branch, column ]); + return (
{note.title} 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 deleted file mode 100644 index 378c508a2..000000000 --- a/apps/client/src/widgets/view_widgets/board_view/context_menu.ts +++ /dev/null @@ -1,68 +0,0 @@ -import contextMenu, { ContextMenuEvent } from "../../../menus/context_menu.js"; -import link_context_menu from "../../../menus/link_context_menu.js"; -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, boardView }: ShowNoteContextMenuArgs) { - $container.on("contextmenu", ".board-note", showNoteContextMenu); - $container.on("contextmenu", ".board-column h3", showColumnContextMenu); - - - } - - function showNoteContextMenu(event: ContextMenuEvent) { - event.preventDefault(); - event.stopPropagation(); - - const $el = $(event.currentTarget); - const noteId = $el.data("note-id"); - const branchId = $el.data("branch-id"); - const column = $el.closest(".board-column").data("column"); - if (!noteId) return; - - contextMenu.show({ - x: event.pageX, - y: event.pageY, - items: [ - ...link_context_menu.getItems(), - { title: "----" }, - { - title: t("board_view.move-to"), - uiIcon: "bx bx-transfer", - items: api.columns.map(columnToMoveTo => ({ - title: columnToMoveTo, - enabled: columnToMoveTo !== column, - handler: () => api.changeColumn(noteId, columnToMoveTo) - })) - }, - { title: "----" }, - { - title: t("board_view.insert-above"), - uiIcon: "bx bx-list-plus", - handler: () => boardView.insertItemAtPosition(column, branchId, "before") - }, - { - title: t("board_view.insert-below"), - uiIcon: "bx bx-empty", - handler: () => boardView.insertItemAtPosition(column, branchId, "after") - }, - { title: "----" }, - { - title: t("board_view.delete-note"), - uiIcon: "bx bx-trash", - handler: () => branches.deleteNotes([ branchId ], false, false) - } - ], - selectMenuItemHandler: ({ command }) => link_context_menu.handleLinkContextMenuItem(command, noteId), - }); - } -}