diff --git a/packages/server/src/middleware/trimViewRowInfo.ts b/packages/server/src/middleware/trimViewRowInfo.ts index 79b30fc324..07e0a344fa 100644 --- a/packages/server/src/middleware/trimViewRowInfo.ts +++ b/packages/server/src/middleware/trimViewRowInfo.ts @@ -23,12 +23,7 @@ export default async (ctx: Ctx, next: Next) => { // don't need to trim delete requests if (ctx?.method?.toLowerCase() !== "delete") { - const { _viewId, ...trimmedView } = await trimViewFields( - viewId, - tableId, - body - ) - ctx.request.body = trimmedView + await trimViewFields(ctx.request.body, viewId, tableId) } ctx.params.sourceId = tableId @@ -36,26 +31,29 @@ export default async (ctx: Ctx, next: Next) => { return next() } +// have to mutate the koa context, can't return export async function trimViewFields( + body: Row, viewId: string, - tableId: string, - data: T -): Promise { + tableId: string +): Promise { const view = await sdk.views.get(viewId) if (!view?.schema || !Object.keys(view.schema).length) { - return data + return } const table = await sdk.tables.getTable(tableId) const { schema } = sdk.views.enrichSchema(view!, table.schema) - const result: Record = {} - for (const key of [ + const allowedKeys = [ ...Object.keys(schema), ...db.CONSTANT_EXTERNAL_ROW_COLS, ...db.CONSTANT_INTERNAL_ROW_COLS, - ]) { - result[key] = data[key] !== null ? data[key] : undefined + ] + // have to mutate the context, can't update reference + const toBeRemoved = Object.keys(body).filter( + key => !allowedKeys.includes(key) + ) + for (let removeKey of toBeRemoved) { + delete body[removeKey] } - - return result as T } diff --git a/packages/server/src/sdk/app/views/index.ts b/packages/server/src/sdk/app/views/index.ts index 766bec7479..5f2a001ddc 100644 --- a/packages/server/src/sdk/app/views/index.ts +++ b/packages/server/src/sdk/app/views/index.ts @@ -1,9 +1,4 @@ -import { - RenameColumn, - TableSchema, - View, - ViewV2, -} from "@budibase/types" +import { RenameColumn, TableSchema, View, ViewV2 } from "@budibase/types" import { context, HTTPError } from "@budibase/backend-core" import { cloneDeep } from "lodash"