From 0d347f88237b89aec25785e4a4aeff3aff88ffe5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 18 Jul 2025 16:52:13 +0300 Subject: [PATCH] feat(views/table): allow creating relations --- apps/client/src/components/app_context.ts | 1 + .../view_widgets/table_view/col_editing.ts | 4 +-- .../view_widgets/table_view/context_menu.ts | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index 73187131c..f960a76c4 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -287,6 +287,7 @@ export type CommandMappings = { columnToEdit?: ColumnComponent; referenceColumn?: ColumnComponent; direction?: "before" | "after"; + type?: "label" | "relation"; }; deleteTableColumn: CommandData & { columnToDelete?: ColumnComponent; diff --git a/apps/client/src/widgets/view_widgets/table_view/col_editing.ts b/apps/client/src/widgets/view_widgets/table_view/col_editing.ts index b9c95e35c..48a39d031 100644 --- a/apps/client/src/widgets/view_widgets/table_view/col_editing.ts +++ b/apps/client/src/widgets/view_widgets/table_view/col_editing.ts @@ -30,7 +30,7 @@ export default class TableColumnEditing extends Component { this.parentNote = parentNote; } - addNewTableColumnCommand({ referenceColumn, columnToEdit, direction }: EventData<"addNewTableColumn">) { + addNewTableColumnCommand({ referenceColumn, columnToEdit, direction, type }: EventData<"addNewTableColumn">) { let attr: Attribute | undefined; this.existingAttributeToEdit = undefined; @@ -44,7 +44,7 @@ export default class TableColumnEditing extends Component { if (!attr) { attr = { type: "label", - name: "label:myLabel", + name: `${type ?? "label"}:myLabel`, value: "promoted,single,text" }; } 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 50f72092c..57735cc44 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 @@ -86,6 +86,7 @@ function showColumnContextMenu(_e: UIEvent, column: ColumnComponent, parentNote: title: t("table_view.add-column-to-the-left"), uiIcon: "bx bx-horizontal-left", enabled: !column.getDefinition().frozen, + items: buildInsertSubmenu(e, column, "before"), handler: () => getParentComponent(e)?.triggerCommand("addNewTableColumn", { referenceColumn: column }) @@ -93,6 +94,7 @@ function showColumnContextMenu(_e: UIEvent, column: ColumnComponent, parentNote: { title: t("table_view.add-column-to-the-right"), uiIcon: "bx bx-horizontal-right", + items: buildInsertSubmenu(e, column, "after"), handler: () => getParentComponent(e)?.triggerCommand("addNewTableColumn", { referenceColumn: column, direction: "after" @@ -243,3 +245,26 @@ function buildColumnItems(tabulator: Tabulator) { return items; } + +function buildInsertSubmenu(e: MouseEvent, referenceColumn: ColumnComponent, direction: "before" | "after"): MenuItem[] { + return [ + { + title: "Label", + handler: () => { + getParentComponent(e)?.triggerCommand("addNewTableColumn", { + referenceColumn, + type: "label" + }); + } + }, + { + title: "Relation", + handler: () => { + getParentComponent(e)?.triggerCommand("addNewTableColumn", { + referenceColumn, + type: "relation" + }); + } + } + ] +}