diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index 1460f92da5..e651259615 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -284,7 +284,7 @@ // Ensure the field is not required if we have a default value if (saveColumn.default) { - saveColumn.constraints.presence = false + saveColumn.constraints.presence = { allowEmpty: true } } // Delete default value for options fields if the option is no longer available @@ -298,7 +298,7 @@ // Ensure primary display columns are always required and don't have default values if (primaryDisplay) { - saveColumn.constraints.presence = true + saveColumn.constraints.presence = { allowEmpty: false } delete saveColumn.default } diff --git a/packages/frontend-core/src/components/grid/stores/datasource.js b/packages/frontend-core/src/components/grid/stores/datasource.js index 68053f38ae..cf09823721 100644 --- a/packages/frontend-core/src/components/grid/stores/datasource.js +++ b/packages/frontend-core/src/components/grid/stores/datasource.js @@ -1,6 +1,7 @@ import { derived, get } from "svelte/store" import { getDatasourceDefinition, getDatasourceSchema } from "../../../fetch" import { memo } from "../../../utils" +import { cloneDeep } from "lodash" export const createStores = () => { const definition = memo(null) @@ -161,10 +162,18 @@ export const createActions = context => { // Updates the datasources primary display column const changePrimaryDisplay = async column => { - return await saveDefinition({ - ...get(definition), - primaryDisplay: column, - }) + let newDefinition = cloneDeep(get(definition)) + + // Update primary display + newDefinition.primaryDisplay = column + + // Sanitise schema to ensure field is required and has no default value + if (!newDefinition.schema[column].constraints) { + newDefinition.schema[column].constraints = {} + } + newDefinition.schema[column].constraints.presence = { allowEmpty: false } + delete newDefinition.schema[column].default + return await saveDefinition(newDefinition) } // Adds a schema mutation for a single field