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 983b89b1d..7cb8c4f54 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 @@ -10,6 +10,7 @@ export default class TableColumnEditing extends Component { private attributeDetailWidget: AttributeDetailWidget; private newAttributePosition?: number; + private existingAttributeToEdit?: Attribute; private api: Tabulator; private newAttribute?: Attribute; private parentNote: FNote; @@ -30,7 +31,9 @@ export default class TableColumnEditing extends Component { if (columnToEdit) { attr = this.getAttributeFromField(columnToEdit.getField()); - console.log("Built ", attr); + this.existingAttributeToEdit = { ...attr }; + } else { + this.existingAttributeToEdit = undefined; } if (!attr) { @@ -71,6 +74,11 @@ export default class TableColumnEditing extends Component { } const { name, value } = this.newAttribute; + + if (this.existingAttributeToEdit && this.existingAttributeToEdit.name !== name) { + attributes.removeOwnedLabelByName(this.parentNote, this.existingAttributeToEdit.name); + } + attributes.setLabel(this.parentNote.noteId, name, value); } diff --git a/apps/client/src/widgets/view_widgets/table_view/columns.spec.ts b/apps/client/src/widgets/view_widgets/table_view/columns.spec.ts index 083d03820..df1592820 100644 --- a/apps/client/src/widgets/view_widgets/table_view/columns.spec.ts +++ b/apps/client/src/widgets/view_widgets/table_view/columns.spec.ts @@ -78,4 +78,19 @@ describe("restoreExistingData", () => { expect(restored[1].field).toBe("noteId"); expect(restored[2].field).toBe("newColumn"); }); + + it("supports a rename", () => { + const newDefs: ColumnDefinition[] = [ + { field: "title", title: "Title", editor: "input" }, + { field: "noteId", title: "Note ID", visible: false }, + { field: "newColumn", title: "New Column", editor: "input" } + ]; + const oldDefs: ColumnDefinition[] = [ + { field: "title", title: "Title", width: 300, visible: true }, + { field: "noteId", title: "Note ID", width: 200, visible: true }, + { field: "oldColumn", title: "New Column", editor: "input" } + ]; + const restored = restoreExistingData(newDefs, oldDefs); + expect(restored.length).toBe(3); + }) }); diff --git a/apps/client/src/widgets/view_widgets/table_view/columns.ts b/apps/client/src/widgets/view_widgets/table_view/columns.ts index 7a8348e4e..67653cef9 100644 --- a/apps/client/src/widgets/view_widgets/table_view/columns.ts +++ b/apps/client/src/widgets/view_widgets/table_view/columns.ts @@ -99,6 +99,7 @@ export function restoreExistingData(newDefs: ColumnDefinition[], oldDefs: Column newDefs.map(def => [def.field!, def]) ); const existingColumns = oldDefs + .filter(item => item.field && newItemsByField.has(item.field!)) .map(item => { return { ...newItemsByField.get(item.field!),