Files
nocodb/packages/nc-gui/components/smartsheet/FormulaWrapperCell.vue
Anbarasu b9a15f2c51 feat: formula formatting support (#9048)
* feat: numeric formula formatting support

* feat: support url, email and phone feat: add datetime supports feat: add checkbox support

* fix: clean up

* fix: handle invalid source, fix: handle plain cell chore: translations

* fix: update the datatype when formula changes

* fix: formula fixes

* fix: tab ui

* fix: pr review changes
2024-07-24 21:26:06 +05:30

83 lines
2.1 KiB
Vue

<script setup lang="ts">
interface Props {
modelValue: any
column?: any
}
const props = defineProps<Props>()
const column = toRef(props, 'column')
const isGrid = inject(IsGridInj, ref(false))
const isExpandedFormOpen = inject(IsExpandedFormOpenInj, ref(false))
const isNumericField = computed(() => {
return isNumericFieldType(column.value, null)
})
provide(ReadonlyInj, ref(true))
provide(EditModeInj, ref(false))
provide(ColumnInj, column)
</script>
<template>
<div
class="nc-cell w-full h-full relative"
:class="{
'nc-grid-numeric-cell-right': isGrid && isNumericField && !isExpandedFormOpen && !isRating(column),
}"
>
<LazyCellCheckbox v-if="isBoolean(column)" :model-value="modelValue" />
<LazyCellCurrency v-else-if="isCurrency(column)" :model-value="modelValue" />
<LazyCellDecimal v-else-if="isDecimal(column)" :model-value="modelValue" />
<LazyCellPercent v-else-if="isPercent(column)" :model-value="modelValue" />
<LazyCellRating v-else-if="isRating(column)" :model-value="modelValue" />
<LazyCellDatePicker v-else-if="isDate(column, '')" :model-value="modelValue" />
<LazyCellDateTimePicker v-else-if="isDateTime(column, '')" :model-value="modelValue" />
<LazyCellTimePicker v-else-if="isTime(column, '')" :model-value="modelValue" />
<LazyCellEmail v-else-if="isEmail(column)" :model-value="modelValue" />
<LazyCellUrl v-else-if="isURL(column)" :model-value="modelValue" />
<LazyCellPhoneNumber v-else-if="isPhoneNumber(column)" :model-value="modelValue" />
<LazyCellText v-else :model-value="modelValue" />
</div>
</template>
<style scoped lang="scss">
.nc-grid-numeric-cell-left {
text-align: left;
:deep(input) {
text-align: left;
}
}
.nc-grid-numeric-cell-right {
text-align: right;
:deep(input) {
text-align: right;
}
}
.nc-cell {
@apply text-sm text-gray-600;
font-weight: 500;
:deep(.nc-cell-field) {
@apply !text-sm;
font-weight: 500;
}
&.nc-display-value-cell {
@apply !text-brand-500 !font-semibold;
:deep(.nc-cell-field) {
@apply !font-semibold;
}
}
:deep(.nc-cell-field) {
@apply px-0;
}
}
</style>