From dceb51a08d5b19e44227d5dda73458504648bf56 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 24 Jul 2023 15:11:23 +0200 Subject: [PATCH] Skip table order if defined on view --- packages/server/src/sdk/app/tables/index.ts | 11 +++- .../src/sdk/app/tables/tests/tables.spec.ts | 51 +++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/packages/server/src/sdk/app/tables/index.ts b/packages/server/src/sdk/app/tables/index.ts index b94ca58538..6ede4c48dc 100644 --- a/packages/server/src/sdk/app/tables/index.ts +++ b/packages/server/src/sdk/app/tables/index.ts @@ -69,7 +69,9 @@ function enrichSchema( viewOverrides: Record ) { const result: TableSchema = {} - for (const [columnName, columnUIMetadata] of Object.entries(viewOverrides)) { + const viewOverridesEntries = Object.entries(viewOverrides) + const viewSetsOrder = viewOverridesEntries.some(([_, v]) => v.order) + for (const [columnName, columnUIMetadata] of viewOverridesEntries) { if (!columnUIMetadata.visible) { continue } @@ -78,7 +80,12 @@ function enrichSchema( continue } - result[columnName] = _.merge(tableSchema[columnName], columnUIMetadata) + const tableFieldSchema = tableSchema[columnName] + if (viewSetsOrder) { + delete tableFieldSchema.order + } + + result[columnName] = _.merge(tableFieldSchema, columnUIMetadata) } return result } diff --git a/packages/server/src/sdk/app/tables/tests/tables.spec.ts b/packages/server/src/sdk/app/tables/tests/tables.spec.ts index a474f2aa43..b1e2ab252f 100644 --- a/packages/server/src/sdk/app/tables/tests/tables.spec.ts +++ b/packages/server/src/sdk/app/tables/tests/tables.spec.ts @@ -252,6 +252,57 @@ describe("table sdk", () => { }) ) }) + + it("if view defines order, the table schema order should be ignored", async () => { + const tableId = basicTable._id! + const view: ViewV2 = { + version: 2, + id: generator.guid(), + name: generator.guid(), + tableId, + columns: { + name: { visible: true, order: 1 }, + id: { visible: true }, + description: { visible: false, order: 2 }, + }, + } + + const res = sdk.tables.enrichViewSchemas({ + ...basicTable, + views: { [view.name]: view }, + }) + + expect(res).toEqual( + expect.objectContaining({ + ...basicTable, + views: { + [view.name]: { + ...view, + schema: { + name: { + type: "string", + name: "name", + order: 1, + visible: true, + width: 80, + constraints: { + type: "string", + }, + }, + id: { + type: "number", + name: "id", + visible: true, + constraints: { + type: "number", + }, + }, + }, + }, + }, + }) + ) + }) }) }) })