50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import { helpers } from "@budibase/shared-core"
|
|
import { TypeIconMap } from "../constants"
|
|
import { convertJSONSchemaToTableSchema } from "./json"
|
|
|
|
export const getColumnIcon = column => {
|
|
// For some reason we have remix icons saved under this property sometimes,
|
|
// so we must ignore those as they are invalid spectrum icons
|
|
if (column.schema.icon && !column.schema.icon.startsWith("ri-")) {
|
|
return column.schema.icon
|
|
}
|
|
if (column.calculationType) {
|
|
return "Calculator"
|
|
}
|
|
if (column.schema.autocolumn) {
|
|
return "MagicWand"
|
|
}
|
|
if (helpers.schema.isDeprecatedSingleUserColumn(column.schema)) {
|
|
return "User"
|
|
}
|
|
const { type, subtype } = column.schema
|
|
const result =
|
|
typeof TypeIconMap[type] === "object" && subtype
|
|
? TypeIconMap[type][subtype]
|
|
: TypeIconMap[type]
|
|
|
|
return result || "Text"
|
|
}
|
|
|
|
export const addNestedJSONSchemaFields = schema => {
|
|
if (!schema) {
|
|
return schema
|
|
}
|
|
let jsonAdditions = {}
|
|
Object.keys(schema).forEach(fieldKey => {
|
|
const fieldSchema = schema[fieldKey]
|
|
if (fieldSchema?.type === "json") {
|
|
const jsonSchema = convertJSONSchemaToTableSchema(fieldSchema, {
|
|
squashObjects: true,
|
|
})
|
|
Object.keys(jsonSchema).forEach(jsonKey => {
|
|
jsonAdditions[`${fieldKey}.${jsonKey}`] = {
|
|
type: jsonSchema[jsonKey].type,
|
|
nestedJSON: true,
|
|
}
|
|
})
|
|
}
|
|
})
|
|
return { ...schema, ...jsonAdditions }
|
|
}
|