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