diff --git a/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte b/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte index ab77f79d88..82a722253c 100644 --- a/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte +++ b/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte @@ -9,7 +9,7 @@ $: datasource = { type: "viewV2", id, - tableId: $viewsV2.selected?.tableId + tableId: $viewsV2.selected?.tableId, } const handleGridViewUpdate = async e => { diff --git a/packages/server/src/api/controllers/table/index.ts b/packages/server/src/api/controllers/table/index.ts index e44ac94881..62aa4c33e9 100644 --- a/packages/server/src/api/controllers/table/index.ts +++ b/packages/server/src/api/controllers/table/index.ts @@ -1,23 +1,12 @@ import * as internal from "./internal" import * as external from "./external" -import { - validate as validateSchema, - isSchema, - isRows, -} from "../../../utilities/schema" -import { isExternalTable, isSQL } from "../../../integrations/utils" -import { events } from "@budibase/backend-core" -import { - FetchTablesResponse, - SaveTableResponse, - SaveTableRequest, - Table, - TableResponse, - UserCtx, -} from "@budibase/types" +import {isRows, isSchema, validate as validateSchema,} from "../../../utilities/schema" +import {isExternalTable, isSQL} from "../../../integrations/utils" +import {events} from "@budibase/backend-core" +import {FetchTablesResponse, SaveTableRequest, SaveTableResponse, Table, TableResponse, UserCtx,} from "@budibase/types" import sdk from "../../../sdk" -import { jsonFromCsvString } from "../../../utilities/csv" -import { builderSocket } from "../../../websockets" +import {jsonFromCsvString} from "../../../utilities/csv" +import {builderSocket} from "../../../websockets" function pickApi({ tableId, table }: { tableId?: string; table?: Table }) { if (table && !tableId) { @@ -51,8 +40,7 @@ export async function fetch(ctx: UserCtx) { } }) - const response = [...internal, ...external].map(sdk.tables.enrichViewSchemas) - ctx.body = response + ctx.body = [...internal, ...external].map(sdk.tables.enrichViewSchemas) } export async function find(ctx: UserCtx) { diff --git a/packages/server/src/api/controllers/view/viewsV2.ts b/packages/server/src/api/controllers/view/viewsV2.ts index ee41217aaf..404f018886 100644 --- a/packages/server/src/api/controllers/view/viewsV2.ts +++ b/packages/server/src/api/controllers/view/viewsV2.ts @@ -45,7 +45,7 @@ async function parseSchemaUI(ctx: Ctx, view: CreateViewRequest) { } } - return view.schema && + const finalViewSchema = view.schema && Object.entries(view.schema).reduce((p, [fieldName, schemaValue]) => { const fieldSchema: RequiredKeys = { order: schemaValue.order, @@ -61,6 +61,12 @@ async function parseSchemaUI(ctx: Ctx, view: CreateViewRequest) { p[fieldName] = fieldSchema return p }, {} as Record>) + for (let [key, column] of Object.entries(finalViewSchema)) { + if (!column.visible) { + delete finalViewSchema[key] + } + } + return finalViewSchema } export async function create(ctx: Ctx) { diff --git a/packages/server/src/api/routes/tests/viewV2.spec.ts b/packages/server/src/api/routes/tests/viewV2.spec.ts index e30bc2c0b1..6c6d10211a 100644 --- a/packages/server/src/api/routes/tests/viewV2.spec.ts +++ b/packages/server/src/api/routes/tests/viewV2.spec.ts @@ -119,10 +119,6 @@ describe("/v2/views", () => { order: 1, width: 100, }, - Category: { - visible: false, - icon: "ic", - }, }, id: createdView.id, version: 2, @@ -373,10 +369,6 @@ describe("/v2/views", () => { order: 1, width: 100, }, - Category: { - visible: false, - icon: "ic", - }, }, id: view.id, version: 2, diff --git a/packages/server/src/sdk/app/tables/index.ts b/packages/server/src/sdk/app/tables/index.ts index 3313e8dfc6..30fc3aba42 100644 --- a/packages/server/src/sdk/app/tables/index.ts +++ b/packages/server/src/sdk/app/tables/index.ts @@ -1,18 +1,9 @@ -import { context } from "@budibase/backend-core" -import { BudibaseInternalDB, getTableParams } from "../../../db/utils" -import { - breakExternalTableId, - isExternalTable, - isSQL, -} from "../../../integrations/utils" -import { - Table, - Database, - TableResponse, - TableViewsResponse, -} from "@budibase/types" +import {context} from "@budibase/backend-core" +import {BudibaseInternalDB, getTableParams} from "../../../db/utils" +import {breakExternalTableId, isExternalTable, isSQL,} from "../../../integrations/utils" +import {Database, Table, TableResponse, TableViewsResponse,} from "@budibase/types" import datasources from "../datasources" -import { populateExternalTableSchemas, isEditableColumn } from "./validation" +import {isEditableColumn, populateExternalTableSchemas} from "./validation" import sdk from "../../../sdk" async function getAllInternalTables(db?: Database): Promise { @@ -62,7 +53,7 @@ async function getTable(tableId: any): Promise { } function enrichViewSchemas(table: Table): TableResponse { - const result: TableResponse = { + return { ...table, views: Object.values(table.views ?? []) .map(v => sdk.views.enrichSchema(v, table.schema)) @@ -71,8 +62,6 @@ function enrichViewSchemas(table: Table): TableResponse { return p }, {} as TableViewsResponse), } - - return result } export default { diff --git a/packages/server/src/sdk/app/views/index.ts b/packages/server/src/sdk/app/views/index.ts index 4ef37f7fa5..5acf5f0a5a 100644 --- a/packages/server/src/sdk/app/views/index.ts +++ b/packages/server/src/sdk/app/views/index.ts @@ -79,20 +79,19 @@ export function enrichSchema(view: View | ViewV2, tableSchema: TableSchema) { } let schema = { ...tableSchema } - if (view.schemaUI) { - const viewOverridesEntries = Object.entries(view.schemaUI) - const viewSetsOrder = viewOverridesEntries.some(([_, v]) => v.order != null) - for (const [fieldName, schemaUI] of viewOverridesEntries) { - schema[fieldName] = { - ...schema[fieldName], - ...schemaUI, - order: viewSetsOrder - ? schemaUI.order ?? undefined - : schema[fieldName].order, - } + const anyViewOrder = Object.values(view.schemaUI || {}).some(ui => ui.order != null) + for (const key of Object.keys(schema)) { + // if nothing specified in view, then it is not visible + const ui = view.schemaUI?.[key] || { visible: false } + schema[key] = { + ...schema[key], + ...ui, + order: anyViewOrder + ? ui?.order ?? undefined + : schema[key].order, } - delete view.schemaUI } + delete view.schemaUI if (view?.columns?.length) { const pickedSchema: Record = {}