diff --git a/packages/backend-core/tests/core/utilities/mocks/licenses.ts b/packages/backend-core/tests/core/utilities/mocks/licenses.ts
index 2d8e81d125..bc9a3b635c 100644
--- a/packages/backend-core/tests/core/utilities/mocks/licenses.ts
+++ b/packages/backend-core/tests/core/utilities/mocks/licenses.ts
@@ -102,10 +102,6 @@ export const useAppBuilders = () => {
return useFeature(Feature.APP_BUILDERS)
}
-export const useViewReadonlyColumns = () => {
- return useFeature(Feature.VIEW_READONLY_COLUMNS)
-}
-
// QUOTAS
export const setAutomationLogsQuota = (value: number) => {
diff --git a/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte b/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte
index b56c5f6568..90e5e216f3 100644
--- a/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte
+++ b/packages/builder/src/components/backend/DataTable/ViewV2DataTable.svelte
@@ -1,6 +1,6 @@
@@ -41,9 +35,5 @@
-
+
diff --git a/packages/frontend-core/src/components/grid/layout/Grid.svelte b/packages/frontend-core/src/components/grid/layout/Grid.svelte
index f24ff0ae10..f2aeffb9f4 100644
--- a/packages/frontend-core/src/components/grid/layout/Grid.svelte
+++ b/packages/frontend-core/src/components/grid/layout/Grid.svelte
@@ -58,7 +58,6 @@
export let buttons = null
export let darkMode
export let isCloud = null
- export let allowViewReadonlyColumns = false
export let rowConditions = null
// Unique identifier for DOM nodes inside this instance
@@ -115,7 +114,6 @@
buttons,
darkMode,
isCloud,
- allowViewReadonlyColumns,
rowConditions,
})
@@ -157,7 +155,7 @@
-
+
diff --git a/packages/server/src/api/routes/tests/viewV2.spec.ts b/packages/server/src/api/routes/tests/viewV2.spec.ts
index f86291e9cd..c4a39ae8a9 100644
--- a/packages/server/src/api/routes/tests/viewV2.spec.ts
+++ b/packages/server/src/api/routes/tests/viewV2.spec.ts
@@ -309,10 +309,6 @@ describe.each([
})
describe("readonly fields", () => {
- beforeEach(() => {
- mocks.licenses.useViewReadonlyColumns()
- })
-
it("readonly fields are persisted", async () => {
const table = await config.api.table.save(
saveTableRequest({
@@ -436,7 +432,7 @@ describe.each([
})
})
- it("readonly fields cannot be used on free license", async () => {
+ it("readonly fields can be used on free license", async () => {
mocks.licenses.useCloudFree()
const table = await config.api.table.save(
saveTableRequest({
@@ -466,11 +462,7 @@ describe.each([
}
await config.api.viewV2.create(newView, {
- status: 400,
- body: {
- message: "Readonly fields are not enabled",
- status: 400,
- },
+ status: 201,
})
})
})
@@ -513,7 +505,6 @@ describe.each([
})
it("display fields can be readonly", async () => {
- mocks.licenses.useViewReadonlyColumns()
const table = await config.api.table.save(
saveTableRequest({
schema: {
@@ -588,7 +579,6 @@ describe.each([
})
it("can update all fields", async () => {
- mocks.licenses.useViewReadonlyColumns()
const tableId = table._id!
const updatedData: Required = {
@@ -802,71 +792,6 @@ describe.each([
)
})
- it("cannot update views with readonly on on free license", async () => {
- mocks.licenses.useViewReadonlyColumns()
-
- view = await config.api.viewV2.update({
- ...view,
- schema: {
- id: { visible: true },
- Price: {
- visible: true,
- readonly: true,
- },
- },
- })
-
- mocks.licenses.useCloudFree()
- await config.api.viewV2.update(view, {
- status: 400,
- body: {
- message: "Readonly fields are not enabled",
- },
- })
- })
-
- it("can remove readonly config after license downgrade", async () => {
- mocks.licenses.useViewReadonlyColumns()
-
- view = await config.api.viewV2.update({
- ...view,
- schema: {
- id: { visible: true },
- Price: {
- visible: true,
- readonly: true,
- },
- Category: {
- visible: true,
- readonly: true,
- },
- },
- })
- mocks.licenses.useCloudFree()
- const res = await config.api.viewV2.update({
- ...view,
- schema: {
- id: { visible: true },
- Price: {
- visible: true,
- readonly: false,
- },
- },
- })
- expect(res).toEqual(
- expect.objectContaining({
- ...view,
- schema: {
- id: { visible: true },
- Price: {
- visible: true,
- readonly: false,
- },
- },
- })
- )
- })
-
isInternal &&
it("updating schema will only validate modified field", async () => {
let view = await config.api.viewV2.create({
@@ -1046,7 +971,6 @@ describe.each([
})
it("should be able to fetch readonly config after downgrades", async () => {
- mocks.licenses.useViewReadonlyColumns()
const res = await config.api.viewV2.create({
name: generator.name(),
tableId: table._id!,
@@ -1112,8 +1036,6 @@ describe.each([
})
it("rejects if field is readonly in any view", async () => {
- mocks.licenses.useViewReadonlyColumns()
-
await config.api.viewV2.create({
name: "view a",
tableId: table._id!,
@@ -1538,7 +1460,6 @@ describe.each([
})
it("can't persist readonly columns", async () => {
- mocks.licenses.useViewReadonlyColumns()
const view = await config.api.viewV2.create({
tableId: table._id!,
name: generator.guid(),
@@ -1607,7 +1528,6 @@ describe.each([
})
it("can't update readonly columns", async () => {
- mocks.licenses.useViewReadonlyColumns()
const view = await config.api.viewV2.create({
tableId: table._id!,
name: generator.guid(),
diff --git a/packages/server/src/sdk/app/views/index.ts b/packages/server/src/sdk/app/views/index.ts
index d7e05abf2f..269158e61e 100644
--- a/packages/server/src/sdk/app/views/index.ts
+++ b/packages/server/src/sdk/app/views/index.ts
@@ -5,13 +5,11 @@ import {
Table,
TableSchema,
View,
- ViewFieldMetadata,
ViewV2,
ViewV2ColumnEnriched,
ViewV2Enriched,
} from "@budibase/types"
import { HTTPError } from "@budibase/backend-core"
-import { features } from "@budibase/pro"
import {
helpers,
PROTECTED_EXTERNAL_COLUMNS,
@@ -59,13 +57,6 @@ async function guardViewSchema(
}
if (viewSchema[field].readonly) {
- if (
- !(await features.isViewReadonlyColumnsEnabled()) &&
- !(tableSchemaField as ViewFieldMetadata).readonly
- ) {
- throw new HTTPError(`Readonly fields are not enabled`, 400)
- }
-
if (!viewSchema[field].visible) {
throw new HTTPError(
`Field "${field}" must be visible if you want to make it readonly`,