Don't throw an error when atempting to update a view that includes non UI metadata overrides
This commit is contained in:
parent
6a7e0d2d31
commit
4bfa0d8cb0
|
@ -22,7 +22,7 @@ export const createActions = context => {
|
||||||
await API.viewV2.update(newDefinition)
|
await API.viewV2.update(newDefinition)
|
||||||
}
|
}
|
||||||
|
|
||||||
const addRow = async row => {
|
const saveRow = async row => {
|
||||||
const $datasource = get(datasource)
|
const $datasource = get(datasource)
|
||||||
row.tableId = $datasource?.tableId
|
row.tableId = $datasource?.tableId
|
||||||
row._viewId = $datasource?.id
|
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 => {
|
const deleteRows = async rows => {
|
||||||
await API.viewV2.deleteRows({
|
await API.viewV2.deleteRows({
|
||||||
viewId: get(datasource).id,
|
viewId: get(datasource).id,
|
||||||
|
@ -73,8 +65,8 @@ export const createActions = context => {
|
||||||
actions: {
|
actions: {
|
||||||
refreshDefinition,
|
refreshDefinition,
|
||||||
saveDefinition,
|
saveDefinition,
|
||||||
addRow,
|
addRow: saveRow,
|
||||||
updateRow,
|
updateRow: saveRow,
|
||||||
deleteRows,
|
deleteRows,
|
||||||
getRow,
|
getRow,
|
||||||
isDatasourceValid,
|
isDatasourceValid,
|
||||||
|
|
|
@ -10,41 +10,10 @@ import {
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import { builderSocket } from "../../../websockets"
|
import { builderSocket } from "../../../websockets"
|
||||||
|
|
||||||
async function parseSchema(ctx: Ctx, view: CreateViewRequest) {
|
async function parseSchema(view: CreateViewRequest) {
|
||||||
if (!view.schema) {
|
if (!view.schema) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasOverrides(
|
|
||||||
newObj: Record<string, any>,
|
|
||||||
existingObj: Record<string, any>
|
|
||||||
) {
|
|
||||||
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 =
|
const finalViewSchema =
|
||||||
view.schema &&
|
view.schema &&
|
||||||
Object.entries(view.schema).reduce((p, [fieldName, schemaValue]) => {
|
Object.entries(view.schema).reduce((p, [fieldName, schemaValue]) => {
|
||||||
|
@ -74,7 +43,7 @@ export async function create(ctx: Ctx<CreateViewRequest, ViewResponse>) {
|
||||||
const view = ctx.request.body
|
const view = ctx.request.body
|
||||||
const { tableId } = view
|
const { tableId } = view
|
||||||
|
|
||||||
const schema = await parseSchema(ctx, view)
|
const schema = await parseSchema(view)
|
||||||
|
|
||||||
const parsedView: Omit<RequiredKeys<ViewV2>, "id" | "version"> = {
|
const parsedView: Omit<RequiredKeys<ViewV2>, "id" | "version"> = {
|
||||||
name: view.name,
|
name: view.name,
|
||||||
|
@ -107,7 +76,7 @@ export async function update(ctx: Ctx<UpdateViewRequest, ViewResponse>) {
|
||||||
|
|
||||||
const { tableId } = view
|
const { tableId } = view
|
||||||
|
|
||||||
const schema = await parseSchema(ctx, view)
|
const schema = await parseSchema(view)
|
||||||
const parsedView: RequiredKeys<ViewV2> = {
|
const parsedView: RequiredKeys<ViewV2> = {
|
||||||
id: view.id,
|
id: view.id,
|
||||||
name: view.name,
|
name: view.name,
|
||||||
|
|
Loading…
Reference in New Issue