feat(views/table): insert row below

This commit is contained in:
Elian Doran 2025-07-13 13:06:53 +03:00
parent 7a48333b4f
commit 5dd5af90c2
No known key found for this signature in database
3 changed files with 40 additions and 10 deletions

View file

@ -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;

View file

@ -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",

View file

@ -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<StateInfo> {
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<StateInfo> {
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;
}