diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index 7d77942815..0ade6ea2ab 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -33,7 +33,7 @@ import { getBindings } from "components/backend/DataTable/formula" import JSONSchemaModal from "./JSONSchemaModal.svelte" import { ValidColumnNameRegex } from "@budibase/shared-core" - import { FieldSubtype, FieldType } from "@budibase/types" + import { FieldType } from "@budibase/types" import RelationshipSelector from "components/common/RelationshipSelector.svelte" const AUTO_TYPE = "auto" @@ -43,11 +43,7 @@ const NUMBER_TYPE = FIELDS.NUMBER.type const JSON_TYPE = FIELDS.JSON.type const DATE_TYPE = FIELDS.DATETIME.type - const BB_REFERENCE_TYPE = FieldType.BB_REFERENCE - const BB_USER_REFERENCE_TYPE = composeType( - BB_REFERENCE_TYPE, - FieldSubtype.USER - ) + const USER_REFRENCE_TYPE = FIELDS.BB_REFERENCE_USER.compositeType const dispatch = createEventDispatcher() const PROHIBITED_COLUMN_NAMES = ["type", "_id", "_rev", "tableId"] @@ -80,33 +76,6 @@ fieldName: $tables.selected.name, } - const bbRefTypeMapping = {} - - function composeType(fieldType, subtype) { - return `${fieldType}_${subtype}` - } - - // Handling fields with subtypes - fieldDefinitions = Object.entries(fieldDefinitions).reduce( - (p, [key, field]) => { - if (field.type === BB_REFERENCE_TYPE) { - const composedType = composeType(field.type, field.subtype) - p[key] = { - ...field, - type: composedType, - } - bbRefTypeMapping[composedType] = { - type: field.type, - subtype: field.subtype, - } - } else { - p[key] = field - } - return p - }, - {} - ) - $: if (primaryDisplay) { editableColumn.constraints.presence = { allowEmpty: false } } @@ -149,12 +118,8 @@ $tables.selected.primaryDisplay == null || $tables.selected.primaryDisplay === editableColumn.name - const mapped = Object.entries(bbRefTypeMapping).find( - ([_, v]) => v.type === field.type && v.subtype === field.subtype - ) - if (mapped) { - editableColumn.type = mapped[0] - delete editableColumn.subtype + if (editableColumn.type === FieldType.BB_REFERENCE) { + editableColumn.type = `${editableColumn.type}_${editableColumn.subtype}` } } else if (!savingColumn) { let highestNumber = 0 @@ -188,8 +153,6 @@ $: initialiseField(field, savingColumn) - $: isBBReference = !!bbRefTypeMapping[editableColumn.type] - $: checkConstraints(editableColumn) $: required = !!editableColumn?.constraints?.presence || primaryDisplay $: uneditable = @@ -265,11 +228,12 @@ let saveColumn = cloneDeep(editableColumn) - if (bbRefTypeMapping[saveColumn.type]) { - saveColumn = { - ...saveColumn, - ...bbRefTypeMapping[saveColumn.type], - } + // Handle types on composite types + const definition = fieldDefinitions[saveColumn.type.toUpperCase()] + if (definition && saveColumn.type === definition.compositeType) { + saveColumn.type = definition.type + saveColumn.subtype = definition.subtype + delete saveColumn.compositeType } if (saveColumn.type === AUTO_TYPE) { @@ -352,7 +316,7 @@ editableColumn.relationshipType = RelationshipType.MANY_TO_MANY } else if (editableColumn.type === FORMULA_TYPE) { editableColumn.formulaType = "dynamic" - } else if (editableColumn.type === BB_USER_REFERENCE_TYPE) { + } else if (editableColumn.type === USER_REFRENCE_TYPE) { editableColumn.relationshipType = RelationshipType.ONE_TO_MANY } } @@ -410,14 +374,12 @@ FIELDS.BOOLEAN, FIELDS.FORMULA, FIELDS.BIGINT, + FIELDS.BB_REFERENCE_USER, ] // no-sql or a spreadsheet if (!external || table.sql) { fields = [...fields, FIELDS.LINK, FIELDS.ARRAY] } - if (fieldDefinitions.USER) { - fields.push(fieldDefinitions.USER) - } return fields } } @@ -426,8 +388,9 @@ if (!fieldToCheck) { return } + // most types need this, just make sure its always present - if (fieldToCheck && !fieldToCheck.constraints) { + if (!fieldToCheck.constraints) { fieldToCheck.constraints = {} } // some string types may have been built by server, may not always have constraints @@ -507,7 +470,7 @@ on:change={handleTypeChange} options={allowedTypes} getOptionLabel={field => field.name} - getOptionValue={field => field.type} + getOptionValue={field => field.compositeType || field.type} getOptionIcon={field => field.icon} isOptionEnabled={option => { if (option.type == AUTO_TYPE) { @@ -671,7 +634,7 @@ - {:else if isBBReference} + {:else if editableColumn.type === USER_REFRENCE_TYPE} diff --git a/packages/builder/src/constants/backend/index.js b/packages/builder/src/constants/backend/index.js index 047152eeed..8b76207822 100644 --- a/packages/builder/src/constants/backend/index.js +++ b/packages/builder/src/constants/backend/index.js @@ -120,10 +120,11 @@ export const FIELDS = { presence: false, }, }, - USER: { + BB_REFERENCE_USER: { name: "User", type: "bb_reference", subtype: "user", + compositeType: "bb_reference_user", // Used for working with the subtype on CreateEditColumn as is it was a primary type icon: "User", }, }