import type { ColumnType } from 'nocodb-sdk' import { SqlUiFactory, UITypes, isVirtualCol } from 'nocodb-sdk' import type { Ref } from 'vue' import { useProject } from '#imports' export function useColumn(column: Ref) { const { project } = useProject() const uiDatatype: UITypes = column?.value?.uidt as UITypes const abstractType = isVirtualCol(column?.value) ? null : SqlUiFactory.create(project.value?.bases?.[0]?.config || { client: 'mysql2' }).getAbstractType(column?.value) const dataTypeLow = column?.value?.dt?.toLowerCase() const isBoolean = abstractType === 'boolean' const isString = abstractType === 'string' const isTextArea = uiDatatype === UITypes.LongText const isInt = abstractType === 'integer' const isFloat = abstractType === 'float' const isDate = abstractType === 'date' || uiDatatype === 'Date' const isYear = abstractType === 'year' || uiDatatype === 'Year' const isTime = abstractType === 'time' || uiDatatype === 'Time' const isDateTime = abstractType === 'datetime' || uiDatatype === 'DateTime' const isJSON = uiDatatype === 'JSON' const isEnum = uiDatatype === 'SingleSelect' const isSingleSelect = uiDatatype === 'SingleSelect' const isSet = uiDatatype === 'MultiSelect' const isMultiSelect = uiDatatype === 'MultiSelect' const isURL = uiDatatype === 'URL' const isEmail = uiDatatype === UITypes.Email const isAttachment = uiDatatype === 'Attachment' const isRating = uiDatatype === UITypes.Rating const isCurrency = uiDatatype === 'Currency' const isPhoneNumber = uiDatatype === UITypes.PhoneNumber const isDecimal = uiDatatype === UITypes.Decimal const isDuration = uiDatatype === UITypes.Duration const isPercent = uiDatatype === UITypes.Percent const isAutoSaved = [ UITypes.SingleLineText, UITypes.LongText, UITypes.PhoneNumber, UITypes.Email, UITypes.URL, UITypes.Number, UITypes.Decimal, UITypes.Percent, UITypes.Count, UITypes.AutoNumber, UITypes.SpecificDBType, UITypes.Geometry, ].includes(uiDatatype) const isManualSaved = [UITypes.Currency, UITypes.Year, UITypes.Time, UITypes.Duration].includes(uiDatatype) return { abstractType, dataTypeLow, isBoolean, isString, isTextArea, isInt, isFloat, isDate, isYear, isTime, isDateTime, isJSON, isEnum, isSet, isURL, isEmail, isAttachment, isRating, isCurrency, isDecimal, isDuration, isAutoSaved, isManualSaved, isSingleSelect, isMultiSelect, isPercent, isPhoneNumber, } }