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 df1592820..713c85d0a 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 @@ -92,5 +92,20 @@ describe("restoreExistingData", () => { ]; const restored = restoreExistingData(newDefs, oldDefs); expect(restored.length).toBe(3); - }) + }); + + it("doesn't alter the existing order", () => { + const newDefs: ColumnDefinition[] = [ + { title: "#", headerSort: false, hozAlign: "center", resizable: false, frozen: true, rowHandle: false }, + { field: "noteId", title: "Note ID", visible: false }, + { field: "title", title: "Title", editor: "input", width: 400 } + ] + const oldDefs: ColumnDefinition[] = [ + { title: "#", headerSort: false, hozAlign: "center", resizable: false, rowHandle: false }, + { field: "noteId", title: "Note ID", visible: false }, + { field: "title", title: "Title", editor: "input", width: 400 } + ]; + const restored = restoreExistingData(newDefs, oldDefs); + expect(restored).toStrictEqual(newDefs); + }); }); 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 67653cef9..356f32f29 100644 --- a/apps/client/src/widgets/view_widgets/table_view/columns.ts +++ b/apps/client/src/widgets/view_widgets/table_view/columns.ts @@ -99,13 +99,16 @@ 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!), - width: item.width, - visible: item.visible, - }; + .filter(item => (item.field && newItemsByField.has(item.field!)) || item.title === "#") + .map(oldItem => { + const data = newItemsByField.get(oldItem.field!)!; + if (oldItem.width) { + data.width = oldItem.width; + } + if (oldItem.visible) { + data.visible = oldItem.visible; + } + return data; }) as ColumnDefinition[]; // 2. Determine new columns.