1
0
Fork 0
mirror of synced 2024-08-03 12:21:39 +12:00

Merge pull request #13391 from Budibase/BUDI-8122/use-types

Type frontend field types
This commit is contained in:
Adria Navarro 2024-04-03 14:03:23 +02:00 committed by GitHub
commit 5c4e5bf19e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 108 additions and 121 deletions

View file

@ -1,3 +1,4 @@
import { FieldType } from "@budibase/types"
import { FIELDS } from "constants/backend" import { FIELDS } from "constants/backend"
import { tables } from "stores/builder" import { tables } from "stores/builder"
import { get as svelteGet } from "svelte/store" import { get as svelteGet } from "svelte/store"
@ -5,14 +6,12 @@ import { get as svelteGet } from "svelte/store"
// currently supported level of relationship depth (server side) // currently supported level of relationship depth (server side)
const MAX_DEPTH = 1 const MAX_DEPTH = 1
//https://github.com/Budibase/budibase/issues/3030
const internalType = "internal"
const TYPES_TO_SKIP = [ const TYPES_TO_SKIP = [
FIELDS.FORMULA.type, FieldType.FORMULA,
FIELDS.LONGFORM.type, FieldType.LONGFORM,
FIELDS.ATTACHMENT.type, FieldType.ATTACHMENT,
internalType, //https://github.com/Budibase/budibase/issues/3030
FieldType.INTERNAL,
] ]
export function getBindings({ export function getBindings({
@ -26,7 +25,7 @@ export function getBindings({
return bindings return bindings
} }
for (let [column, schema] of Object.entries(table.schema)) { for (let [column, schema] of Object.entries(table.schema)) {
const isRelationship = schema.type === FIELDS.LINK.type const isRelationship = schema.type === FieldType.LINK
// skip relationships after a certain depth and types which // skip relationships after a certain depth and types which
// can't bind to // can't bind to
if ( if (

View file

@ -1,4 +1,4 @@
import { RelationshipType } from "constants/backend" import { RelationshipType } from "@budibase/types"
const typeMismatch = "Column type of the foreign key must match the primary key" const typeMismatch = "Column type of the foreign key must match the primary key"
const columnBeingUsed = "Column name cannot be an existing column" const columnBeingUsed = "Column name cannot be an existing column"

View file

@ -12,7 +12,7 @@ const getDefaultSchema = rows => {
newSchema[column] = { newSchema[column] = {
name: column, name: column,
type: "string", type: "string",
constraints: FIELDS["STRING"].constraints, constraints: FIELDS.STRING.constraints,
} }
}) })
}) })

View file

@ -1,3 +1,5 @@
import { FieldType } from "@budibase/types"
export const convertOldFieldFormat = fields => { export const convertOldFieldFormat = fields => {
if (!fields) { if (!fields) {
return [] return []
@ -31,17 +33,17 @@ export const getComponentForField = (field, schema) => {
} }
export const FieldTypeToComponentMap = { export const FieldTypeToComponentMap = {
string: "stringfield", [FieldType.STRING]: "stringfield",
number: "numberfield", [FieldType.NUMBER]: "numberfield",
bigint: "bigintfield", [FieldType.BIGINT]: "bigintfield",
options: "optionsfield", [FieldType.OPTIONS]: "optionsfield",
array: "multifieldselect", [FieldType.ARRAY]: "multifieldselect",
boolean: "booleanfield", [FieldType.BOOLEAN]: "booleanfield",
longform: "longformfield", [FieldType.LONGFORM]: "longformfield",
datetime: "datetimefield", [FieldType.DATETIME]: "datetimefield",
attachment: "attachmentfield", [FieldType.ATTACHMENT]: "attachmentfield",
link: "relationshipfield", [FieldType.LINK]: "relationshipfield",
json: "jsonfield", [FieldType.JSON]: "jsonfield",
barcodeqr: "codescanner", [FieldType.BARCODEQR]: "codescanner",
bb_reference: "bbreferencefield", [FieldType.BB_REFERENCE]: "bbreferencefield",
} }

View file

@ -1,12 +1,14 @@
import { FieldType, FieldSubtype } from "@budibase/types" import {
FieldType,
FieldSubtype,
INTERNAL_TABLE_SOURCE_ID,
AutoFieldSubType,
Hosting,
} from "@budibase/types"
export const AUTO_COLUMN_SUB_TYPES = { export { RelationshipType } from "@budibase/types"
AUTO_ID: "autoID",
CREATED_BY: "createdBy", export const AUTO_COLUMN_SUB_TYPES = AutoFieldSubType
CREATED_AT: "createdAt",
UPDATED_BY: "updatedBy",
UPDATED_AT: "updatedAt",
}
export const AUTO_COLUMN_DISPLAY_NAMES = { export const AUTO_COLUMN_DISPLAY_NAMES = {
AUTO_ID: "Auto ID", AUTO_ID: "Auto ID",
@ -167,10 +169,7 @@ export const FILE_TYPES = {
DOCUMENT: ["odf", "docx", "doc", "pdf", "csv"], DOCUMENT: ["odf", "docx", "doc", "pdf", "csv"],
} }
export const HostingTypes = { export const HostingTypes = Hosting
CLOUD: "cloud",
SELF: "self",
}
export const Roles = { export const Roles = {
ADMIN: "ADMIN", ADMIN: "ADMIN",
@ -187,12 +186,6 @@ export function isAutoColumnUserRelationship(subtype) {
) )
} }
export const RelationshipType = {
MANY_TO_MANY: "many-to-many",
ONE_TO_MANY: "one-to-many",
MANY_TO_ONE: "many-to-one",
}
export const PrettyRelationshipDefinitions = { export const PrettyRelationshipDefinitions = {
MANY: "Many rows", MANY: "Many rows",
ONE: "One row", ONE: "One row",
@ -218,7 +211,7 @@ export const SWITCHABLE_TYPES = [
...ALLOWABLE_NUMBER_TYPES, ...ALLOWABLE_NUMBER_TYPES,
] ]
export const BUDIBASE_INTERNAL_DB_ID = "bb_internal" export const BUDIBASE_INTERNAL_DB_ID = INTERNAL_TABLE_SOURCE_ID
export const DEFAULT_BB_DATASOURCE_ID = "datasource_internal_bb_default" export const DEFAULT_BB_DATASOURCE_ID = "datasource_internal_bb_default"
export const BUDIBASE_DATASOURCE_TYPE = "budibase" export const BUDIBASE_DATASOURCE_TYPE = "budibase"
export const DB_TYPE_INTERNAL = "internal" export const DB_TYPE_INTERNAL = "internal"
@ -265,10 +258,10 @@ export const IntegrationNames = {
} }
export const SchemaTypeOptions = [ export const SchemaTypeOptions = [
{ label: "Text", value: "string" }, { label: "Text", value: FieldType.STRING },
{ label: "Number", value: "number" }, { label: "Number", value: FieldType.NUMBER },
{ label: "Boolean", value: "boolean" }, { label: "Boolean", value: FieldType.BOOLEAN },
{ label: "Datetime", value: "datetime" }, { label: "Datetime", value: FieldType.DATETIME },
] ]
export const SchemaTypeOptionsExpanded = SchemaTypeOptions.map(el => ({ export const SchemaTypeOptionsExpanded = SchemaTypeOptions.map(el => ({
@ -305,10 +298,10 @@ export const PaginationLocations = [
] ]
export const BannedSearchTypes = [ export const BannedSearchTypes = [
"link", FieldType.LINK,
"attachment", FieldType.ATTACHMENT,
"formula", FieldType.FORMULA,
"json", FieldType.JSON,
"jsonarray", "jsonarray",
"queryarray", "queryarray",
] ]

View file

@ -1,17 +1,17 @@
import { FIELDS } from "constants/backend" import { FieldType } from "@budibase/types"
function baseConversion(type) { function baseConversion(type) {
if (type === "string") { if (type === "string") {
return { return {
type: FIELDS.STRING.type, type: FieldType.STRING,
} }
} else if (type === "boolean") { } else if (type === "boolean") {
return { return {
type: FIELDS.BOOLEAN.type, type: FieldType.BOOLEAN,
} }
} else if (type === "number") { } else if (type === "number") {
return { return {
type: FIELDS.NUMBER.type, type: FieldType.NUMBER,
} }
} }
} }
@ -31,7 +31,7 @@ function recurse(schemaLevel = {}, objectLevel) {
const schema = recurse(schemaLevel[key], value[0]) const schema = recurse(schemaLevel[key], value[0])
if (schema) { if (schema) {
schemaLevel[key] = { schemaLevel[key] = {
type: FIELDS.ARRAY.type, type: FieldType.ARRAY,
schema, schema,
} }
} }
@ -45,7 +45,7 @@ function recurse(schemaLevel = {}, objectLevel) {
} }
} }
if (!schemaLevel.type) { if (!schemaLevel.type) {
return { type: FIELDS.JSON.type, schema: schemaLevel } return { type: FieldType.JSON, schema: schemaLevel }
} else { } else {
return schemaLevel return schemaLevel
} }

View file

@ -1,3 +1,4 @@
import { FieldType } from "@budibase/types"
import { ActionStepID } from "constants/backend/automations" import { ActionStepID } from "constants/backend/automations"
import { TableNames } from "constants" import { TableNames } from "constants"
import { import {
@ -20,20 +21,20 @@ export function buildAutoColumn(tableName, name, subtype) {
switch (subtype) { switch (subtype) {
case AUTO_COLUMN_SUB_TYPES.UPDATED_BY: case AUTO_COLUMN_SUB_TYPES.UPDATED_BY:
case AUTO_COLUMN_SUB_TYPES.CREATED_BY: case AUTO_COLUMN_SUB_TYPES.CREATED_BY:
type = FIELDS.LINK.type type = FieldType.LINK
constraints = FIELDS.LINK.constraints constraints = FIELDS.LINK.constraints
break break
case AUTO_COLUMN_SUB_TYPES.AUTO_ID: case AUTO_COLUMN_SUB_TYPES.AUTO_ID:
type = FIELDS.NUMBER.type type = FieldType.NUMBER
constraints = FIELDS.NUMBER.constraints constraints = FIELDS.NUMBER.constraints
break break
case AUTO_COLUMN_SUB_TYPES.UPDATED_AT: case AUTO_COLUMN_SUB_TYPES.UPDATED_AT:
case AUTO_COLUMN_SUB_TYPES.CREATED_AT: case AUTO_COLUMN_SUB_TYPES.CREATED_AT:
type = FIELDS.DATETIME.type type = FieldType.DATETIME
constraints = FIELDS.DATETIME.constraints constraints = FIELDS.DATETIME.constraints
break break
default: default:
type = FIELDS.STRING.type type = FieldType.STRING
constraints = FIELDS.STRING.constraints constraints = FIELDS.STRING.constraints
break break
} }

View file

@ -1,7 +1,8 @@
import { FieldType } from "@budibase/types"
import { get, writable, derived } from "svelte/store" import { get, writable, derived } from "svelte/store"
import { cloneDeep } from "lodash/fp" import { cloneDeep } from "lodash/fp"
import { API } from "api" import { API } from "api"
import { SWITCHABLE_TYPES, FIELDS } from "constants/backend" import { SWITCHABLE_TYPES } from "constants/backend"
export function createTablesStore() { export function createTablesStore() {
const store = writable({ const store = writable({
@ -83,14 +84,14 @@ export function createTablesStore() {
// make sure tables up to date (related) // make sure tables up to date (related)
let newTableIds = [] let newTableIds = []
for (let column of Object.values(updatedTable?.schema || {})) { for (let column of Object.values(updatedTable?.schema || {})) {
if (column.type === FIELDS.LINK.type) { if (column.type === FieldType.LINK) {
newTableIds.push(column.tableId) newTableIds.push(column.tableId)
} }
} }
let oldTableIds = [] let oldTableIds = []
for (let column of Object.values(oldTable?.schema || {})) { for (let column of Object.values(oldTable?.schema || {})) {
if (column.type === FIELDS.LINK.type) { if (column.type === FieldType.LINK) {
oldTableIds.push(column.tableId) oldTableIds.push(column.tableId)
} }
} }

View file

@ -1,21 +1,7 @@
import { FieldTypeToComponentMap } from "components/design/settings/controls/FieldConfiguration/utils"
import { Component } from "./Component" import { Component } from "./Component"
import { getSchemaForDatasource } from "dataBinding" import { getSchemaForDatasource } from "dataBinding"
const fieldTypeToComponentMap = {
string: "stringfield",
number: "numberfield",
bigint: "bigintfield",
options: "optionsfield",
array: "multifieldselect",
boolean: "booleanfield",
longform: "longformfield",
datetime: "datetimefield",
attachment: "attachmentfield",
link: "relationshipfield",
json: "jsonfield",
barcodeqr: "codescanner",
}
export function makeDatasourceFormComponents(datasource) { export function makeDatasourceFormComponents(datasource) {
const { schema } = getSchemaForDatasource(null, datasource, { const { schema } = getSchemaForDatasource(null, datasource, {
formSchema: true, formSchema: true,
@ -30,7 +16,7 @@ export function makeDatasourceFormComponents(datasource) {
} }
const fieldType = const fieldType =
typeof fieldSchema === "object" ? fieldSchema.type : fieldSchema typeof fieldSchema === "object" ? fieldSchema.type : fieldSchema
const componentType = fieldTypeToComponentMap[fieldType] const componentType = FieldTypeToComponentMap[fieldType]
const fullComponentType = `@budibase/standard-components/${componentType}` const fullComponentType = `@budibase/standard-components/${componentType}`
if (componentType) { if (componentType) {
const component = new Component(fullComponentType) const component = new Component(fullComponentType)

View file

@ -7,19 +7,19 @@
export let order export let order
const FieldTypeToComponentMap = { const FieldTypeToComponentMap = {
string: "stringfield", [FieldType.STRING]: "stringfield",
number: "numberfield", [FieldType.NUMBER]: "numberfield",
bigint: "bigintfield", [FieldType.BIGINT]: "bigintfield",
options: "optionsfield", [FieldType.OPTIONS]: "optionsfield",
array: "multifieldselect", [FieldType.ARRAY]: "multifieldselect",
boolean: "booleanfield", [FieldType.BOOLEAN]: "booleanfield",
longform: "longformfield", [FieldType.LONGFORM]: "longformfield",
datetime: "datetimefield", [FieldType.DATETIME]: "datetimefield",
attachment: "attachmentfield", [FieldType.ATTACHMENT]: "attachmentfield",
link: "relationshipfield", [FieldType.LINK]: "relationshipfield",
json: "jsonfield", [FieldType.JSON]: "jsonfield",
barcodeqr: "codescanner", [FieldType.BARCODEQR]: "codescanner",
bb_reference: "bbreferencefield", [FieldType.BB_REFERENCE]: "bbreferencefield",
} }
const getFieldSchema = field => { const getFieldSchema = field => {

View file

@ -8,6 +8,7 @@
"dependencies": { "dependencies": {
"@budibase/bbui": "0.0.0", "@budibase/bbui": "0.0.0",
"@budibase/shared-core": "0.0.0", "@budibase/shared-core": "0.0.0",
"@budibase/types": "0.0.0",
"dayjs": "^1.10.8", "dayjs": "^1.10.8",
"lodash": "4.17.21", "lodash": "4.17.21",
"socket.io-client": "^4.6.1" "socket.io-client": "^4.6.1"

View file

@ -1,3 +1,5 @@
import { FieldType } from "@budibase/types"
import OptionsCell from "../cells/OptionsCell.svelte" import OptionsCell from "../cells/OptionsCell.svelte"
import DateCell from "../cells/DateCell.svelte" import DateCell from "../cells/DateCell.svelte"
import MultiSelectCell from "../cells/MultiSelectCell.svelte" import MultiSelectCell from "../cells/MultiSelectCell.svelte"
@ -12,19 +14,19 @@ import AttachmentCell from "../cells/AttachmentCell.svelte"
import BBReferenceCell from "../cells/BBReferenceCell.svelte" import BBReferenceCell from "../cells/BBReferenceCell.svelte"
const TypeComponentMap = { const TypeComponentMap = {
text: TextCell, [FieldType.STRING]: TextCell,
options: OptionsCell, [FieldType.OPTIONS]: OptionsCell,
datetime: DateCell, [FieldType.DATETIME]: DateCell,
barcodeqr: TextCell, [FieldType.BARCODEQR]: TextCell,
longform: LongFormCell, [FieldType.LONGFORM]: LongFormCell,
array: MultiSelectCell, [FieldType.ARRAY]: MultiSelectCell,
number: NumberCell, [FieldType.NUMBER]: NumberCell,
boolean: BooleanCell, [FieldType.BOOLEAN]: BooleanCell,
attachment: AttachmentCell, [FieldType.ATTACHMENT]: AttachmentCell,
link: RelationshipCell, [FieldType.LINK]: RelationshipCell,
formula: FormulaCell, [FieldType.FORMULA]: FormulaCell,
json: JSONCell, [FieldType.JSON]: JSONCell,
bb_reference: BBReferenceCell, [FieldType.BB_REFERENCE]: BBReferenceCell,
} }
export const getCellRenderer = column => { export const getCellRenderer = column => {
return TypeComponentMap[column?.schema?.type] || TextCell return TypeComponentMap[column?.schema?.type] || TextCell

View file

@ -1,3 +1,5 @@
import { FieldType, FieldTypeSubtypes } from "@budibase/types"
export const getColor = (idx, opacity = 0.3) => { export const getColor = (idx, opacity = 0.3) => {
if (idx == null || idx === -1) { if (idx == null || idx === -1) {
idx = 0 idx = 0
@ -6,22 +8,22 @@ export const getColor = (idx, opacity = 0.3) => {
} }
const TypeIconMap = { const TypeIconMap = {
text: "Text", [FieldType.STRING]: "Text",
options: "Dropdown", [FieldType.OPTIONS]: "Dropdown",
datetime: "Date", [FieldType.DATETIME]: "Date",
barcodeqr: "Camera", [FieldType.BARCODEQR]: "Camera",
longform: "TextAlignLeft", [FieldType.LONGFORM]: "TextAlignLeft",
array: "Dropdown", [FieldType.ARRAY]: "Dropdown",
number: "123", [FieldType.NUMBER]: "123",
boolean: "Boolean", [FieldType.BOOLEAN]: "Boolean",
attachment: "AppleFiles", [FieldType.ATTACHMENT]: "AppleFiles",
link: "DataCorrelated", [FieldType.LINK]: "DataCorrelated",
formula: "Calculator", [FieldType.FORMULA]: "Calculator",
json: "Brackets", [FieldType.JSON]: "Brackets",
bigint: "TagBold", [FieldType.BIGINT]: "TagBold",
bb_reference: { [FieldType.BB_REFERENCE]: {
user: "User", [FieldTypeSubtypes.BB_REFERENCE.USER]: "User",
users: "UserGroup", [FieldTypeSubtypes.BB_REFERENCE.USERS]: "UserGroup",
}, },
} }