From c747881d738037bc68699b6a4302e1399cee4492 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 20 Jul 2023 09:54:22 +0200 Subject: [PATCH] Allow selecting certain columns --- .../server/src/api/routes/tests/viewV2.spec.ts | 18 +++++++++++++++--- packages/server/src/sdk/app/views/index.ts | 8 +++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/server/src/api/routes/tests/viewV2.spec.ts b/packages/server/src/api/routes/tests/viewV2.spec.ts index 35a36c38f7..e7ad2a0170 100644 --- a/packages/server/src/api/routes/tests/viewV2.spec.ts +++ b/packages/server/src/api/routes/tests/viewV2.spec.ts @@ -108,14 +108,12 @@ describe("/v2/views", () => { }) describe("getSchema", () => { - let view: ViewV2 - beforeAll(async () => { await config.createTable(priceTable()) - view = await config.api.viewV2.create() }) it("returns table schema if no columns are defined", async () => { + const view = await config.api.viewV2.create() const result = await config.api.viewV2.getSchema(view.id) expect(result).toEqual({ schema: { @@ -128,5 +126,19 @@ describe("/v2/views", () => { }, }) }) + + it("respects view column definition if exists", async () => { + const view = await config.api.viewV2.create({ columns: ["Category"] }) + const result = await config.api.viewV2.getSchema(view.id) + expect(result).toEqual({ + schema: { + Category: { + type: "string", + name: "Category", + constraints: { type: "string" }, + }, + }, + }) + }) }) }) diff --git a/packages/server/src/sdk/app/views/index.ts b/packages/server/src/sdk/app/views/index.ts index 5b11389e9a..5decb6c201 100644 --- a/packages/server/src/sdk/app/views/index.ts +++ b/packages/server/src/sdk/app/views/index.ts @@ -3,6 +3,7 @@ import { TableSchema, View, ViewV2 } from "@budibase/types" import sdk from "../../../sdk" import * as utils from "../../../db/utils" +import _ from "lodash" export async function get(viewId: string): Promise { const { tableId } = utils.extractViewInfoFromID(viewId) @@ -53,5 +54,10 @@ export async function getSchema(viewId: string): Promise { const view = await get(viewId) const table = await sdk.tables.getTable(view?.tableId) - return table.schema + if (!view?.columns?.length) { + return table.schema + } + + const schema = _.pick(table.schema, ...view.columns) + return schema }