Merge pull request #14072 from Budibase/handle-view-visibility-schema

Handle view visibility schema
This commit is contained in:
Adria Navarro 2024-07-02 16:22:16 +02:00 committed by GitHub
commit c9b2f90af8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 29 additions and 39 deletions

View File

@ -25,7 +25,9 @@ export async function searchView(
ctx.throw(400, `This method only supports viewsV2`) ctx.throw(400, `This method only supports viewsV2`)
} }
const viewFields = Object.keys(view.schema || {}) const viewFields = Object.entries(view.schema || {})
.filter(([_, value]) => value.visible)
.map(([key]) => key)
const { body } = ctx.request const { body } = ctx.request
// Enrich saved query with ephemeral query params. // Enrich saved query with ephemeral query params.

View File

@ -33,11 +33,6 @@ async function parseSchema(view: CreateViewRequest) {
p[fieldName] = fieldSchema p[fieldName] = fieldSchema
return p return p
}, {} as Record<string, RequiredKeys<ViewUIFieldMetadata>>) }, {} as Record<string, RequiredKeys<ViewUIFieldMetadata>>)
for (let [key, column] of Object.entries(finalViewSchema)) {
if (!column.visible && !column.readonly) {
delete finalViewSchema[key]
}
}
return finalViewSchema return finalViewSchema
} }

View File

@ -218,6 +218,10 @@ describe.each([
order: 1, order: 1,
width: 100, width: 100,
}, },
Category: {
visible: false,
icon: "ic",
},
}, },
id: createdView.id, id: createdView.id,
version: 2, version: 2,
@ -269,9 +273,8 @@ describe.each([
...newView, ...newView,
schema: { schema: {
id: { visible: true }, id: { visible: true },
Price: { Price: { visible: true },
visible: true, Category: { visible: false },
},
}, },
id: expect.any(String), id: expect.any(String),
version: 2, version: 2,
@ -759,6 +762,7 @@ describe.each([
order: 1, order: 1,
width: 100, width: 100,
}, },
Category: { visible: false, icon: "ic" },
}, },
id: view.id, id: view.id,
version: 2, version: 2,
@ -873,7 +877,8 @@ describe.each([
await db.getDB(config.appId!).put(tableToUpdate) await db.getDB(config.appId!).put(tableToUpdate)
view = await config.api.viewV2.get(view.id) view = await config.api.viewV2.get(view.id)
await config.api.viewV2.update({ await config.api.viewV2.update(
{
...view, ...view,
schema: { schema: {
...view.schema, ...view.schema,
@ -881,22 +886,14 @@ describe.each([
visible: false, visible: false,
}, },
}, },
})
expect(await config.api.viewV2.get(view.id)).toEqual(
expect.objectContaining({
schema: {
id: expect.objectContaining({
visible: false,
}),
Price: expect.objectContaining({
visible: false,
}),
Category: expect.objectContaining({
visible: true,
}),
}, },
}) {
status: 400,
body: {
message: 'You can\'t hide "id" because it is a required field.',
status: 400,
},
}
) )
}) })
}) })
@ -938,7 +935,6 @@ describe.each([
Category: { visible: true }, Category: { visible: true },
}, },
}) })
expect(res.schema?.Price).toBeUndefined()
const view = await config.api.viewV2.get(res.id) const view = await config.api.viewV2.get(res.id)
const updatedTable = await config.api.table.get(table._id!) const updatedTable = await config.api.table.get(table._id!)
@ -1205,6 +1201,7 @@ describe.each([
], ],
schema: { schema: {
id: { visible: true }, id: { visible: true },
one: { visible: false },
two: { visible: true }, two: { visible: true },
}, },
}) })

View File

@ -160,16 +160,12 @@ export function enrichSchema(
for (const key of Object.keys(schema)) { for (const key of Object.keys(schema)) {
// if nothing specified in view, then it is not visible // if nothing specified in view, then it is not visible
const ui = view.schema?.[key] || { visible: false } const ui = view.schema?.[key] || { visible: false }
if (ui.visible === false) {
schema[key].visible = false
} else {
schema[key] = { schema[key] = {
...schema[key], ...schema[key],
...ui, ...ui,
order: anyViewOrder ? ui?.order ?? undefined : schema[key].order, order: anyViewOrder ? ui?.order ?? undefined : schema[key].order,
} }
} }
}
return { return {
...view, ...view,