From 4bfa0d8cb0e84ee77c4e5e30e91ff65ee1ca52fc Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 14 Aug 2023 16:17:30 +0100 Subject: [PATCH] Don't throw an error when atempting to update a view that includes non UI metadata overrides --- .../src/components/grid/stores/viewV2.js | 14 ++----- .../src/api/controllers/view/viewsV2.ts | 37 ++----------------- 2 files changed, 6 insertions(+), 45 deletions(-) diff --git a/packages/frontend-core/src/components/grid/stores/viewV2.js b/packages/frontend-core/src/components/grid/stores/viewV2.js index 493dbb0ad3..f9efc6ffb0 100644 --- a/packages/frontend-core/src/components/grid/stores/viewV2.js +++ b/packages/frontend-core/src/components/grid/stores/viewV2.js @@ -22,7 +22,7 @@ export const createActions = context => { await API.viewV2.update(newDefinition) } - const addRow = async row => { + const saveRow = async row => { const $datasource = get(datasource) row.tableId = $datasource?.tableId row._viewId = $datasource?.id @@ -32,14 +32,6 @@ export const createActions = context => { } } - const updateRow = async row => { - const $datasource = get(datasource) - return { - ...(await API.patchRow(row, SuppressErrors)), - _viewId: $datasource.id, - } - } - const deleteRows = async rows => { await API.viewV2.deleteRows({ viewId: get(datasource).id, @@ -73,8 +65,8 @@ export const createActions = context => { actions: { refreshDefinition, saveDefinition, - addRow, - updateRow, + addRow: saveRow, + updateRow: saveRow, deleteRows, getRow, isDatasourceValid, diff --git a/packages/server/src/api/controllers/view/viewsV2.ts b/packages/server/src/api/controllers/view/viewsV2.ts index 20301d32e4..fa19abe927 100644 --- a/packages/server/src/api/controllers/view/viewsV2.ts +++ b/packages/server/src/api/controllers/view/viewsV2.ts @@ -10,41 +10,10 @@ import { } from "@budibase/types" import { builderSocket } from "../../../websockets" -async function parseSchema(ctx: Ctx, view: CreateViewRequest) { +async function parseSchema(view: CreateViewRequest) { if (!view.schema) { return } - - function hasOverrides( - newObj: Record, - existingObj: Record - ) { - return Object.entries(newObj || {}).some(([key, value]) => { - const isObject = typeof value === "object" - const existing = existingObj[key] - if (isObject && hasOverrides(value, existing || {})) { - return true - } - if (!isObject && value !== existing) { - return true - } - }) - } - - const table = await sdk.tables.getTable(view.tableId) - for (const [ - fieldName, - { order, width, visible, icon, ...schemaNonUI }, - ] of Object.entries(view.schema)) { - const overrides = hasOverrides(schemaNonUI, table.schema[fieldName]) - if (overrides) { - ctx.throw( - 400, - "This endpoint does not support overriding non UI fields in the schema" - ) - } - } - const finalViewSchema = view.schema && Object.entries(view.schema).reduce((p, [fieldName, schemaValue]) => { @@ -74,7 +43,7 @@ export async function create(ctx: Ctx) { const view = ctx.request.body const { tableId } = view - const schema = await parseSchema(ctx, view) + const schema = await parseSchema(view) const parsedView: Omit, "id" | "version"> = { name: view.name, @@ -107,7 +76,7 @@ export async function update(ctx: Ctx) { const { tableId } = view - const schema = await parseSchema(ctx, view) + const schema = await parseSchema(view) const parsedView: RequiredKeys = { id: view.id, name: view.name,