diff --git a/apps/client/src/services/note_create.ts b/apps/client/src/services/note_create.ts index 6ce92bc0d..3fb597930 100644 --- a/apps/client/src/services/note_create.ts +++ b/apps/client/src/services/note_create.ts @@ -11,7 +11,7 @@ import type FBranch from "../entities/fbranch.js"; import type { ChooseNoteTypeResponse } from "../widgets/dialogs/note_type_chooser.js"; import type { CKTextEditor } from "@triliumnext/ckeditor5"; -interface CreateNoteOpts { +export interface CreateNoteOpts { isProtected?: boolean; saveSelection?: boolean; title?: string | null; diff --git a/apps/client/src/widgets/view_widgets/table_view/context_menu.ts b/apps/client/src/widgets/view_widgets/table_view/context_menu.ts index 1be96d9b2..a9cf68be1 100644 --- a/apps/client/src/widgets/view_widgets/table_view/context_menu.ts +++ b/apps/client/src/widgets/view_widgets/table_view/context_menu.ts @@ -4,18 +4,45 @@ import { TableData } from "./rows.js"; import branches from "../../../services/branches.js"; import { t } from "../../../services/i18n.js"; import link_context_menu from "../../../menus/link_context_menu.js"; +import type FNote from "../../../entities/fnote.js"; +import appContext from "../../../components/app_context.js"; -export function setupContextMenu(tabulator: Tabulator) { - tabulator.on("rowContext", showRowContextMenu); +export function setupContextMenu(tabulator: Tabulator, parentNote: FNote) { + tabulator.on("rowContext", (e, row) => showRowContextMenu(e, row, parentNote)); } -export function showRowContextMenu(_e: UIEvent, row: RowComponent) { +export function showRowContextMenu(_e: UIEvent, row: RowComponent, parentNote: FNote) { const e = _e as MouseEvent; const rowData = row.getData() as TableData; contextMenu.show({ items: [ ...link_context_menu.getItems(), { title: "----" }, + { + title: "Insert row above", + uiIcon: "bx bx-list-plus", + handler: () => { + + } + }, + { + title: "Insert row below", + uiIcon: "bx bx-empty", + handler: () => { + const target = e.target; + if (!target) { + return; + } + const component = $(target).closest(".component").prop("component"); + component.triggerCommand("addNewRow", { + customOpts: { + target: "after", + targetBranchId: rowData.branchId, + } + }); + } + }, + { title: "----" }, { title: t("table_context_menu.delete_row"), uiIcon: "bx bx-trash", diff --git a/apps/client/src/widgets/view_widgets/table_view/index.ts b/apps/client/src/widgets/view_widgets/table_view/index.ts index 7e2e8f5cf..0b4e79c89 100644 --- a/apps/client/src/widgets/view_widgets/table_view/index.ts +++ b/apps/client/src/widgets/view_widgets/table_view/index.ts @@ -5,7 +5,7 @@ import server from "../../../services/server.js"; import SpacedUpdate from "../../../services/spaced_update.js"; import type { CommandListenerData, EventData } from "../../../components/app_context.js"; import type { Attribute } from "../../../services/attribute_parser.js"; -import note_create from "../../../services/note_create.js"; +import note_create, { CreateNoteOpts } from "../../../services/note_create.js"; import {Tabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MenuModule, MoveRowsModule, ColumnDefinition} from 'tabulator-tables'; import "tabulator-tables/dist/css/tabulator.css"; import "../../../../src/stylesheets/table.css"; @@ -145,7 +145,7 @@ export default class TableView extends ViewMode { persistenceReaderFunc: (_id, type: string) => this.persistentData?.[type], }); configureReorderingRows(this.api); - setupContextMenu(this.api); + setupContextMenu(this.api, this.parentNote); this.setupEditing(); } @@ -198,12 +198,15 @@ export default class TableView extends ViewMode { console.log("Save attributes", this.newAttribute); } - addNewRowCommand() { + addNewRowCommand({ customOpts }: { customOpts: CreateNoteOpts }) { const parentNotePath = this.args.parentNotePath; if (parentNotePath) { - note_create.createNote(parentNotePath, { - activate: false - }).then(({ note }) => { + const opts: CreateNoteOpts = { + activate: false, + ...customOpts + } + console.log("Create with ", opts); + note_create.createNote(parentNotePath, opts).then(({ note }) => { if (!note) { return; }