mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
3.8 KiB
189 lines
3.8 KiB
<script setup lang="ts"> |
|
import type { ColumnType } from 'nocodb-sdk' |
|
import useColumn from '~/composables/useColumn' |
|
|
|
const { column, value } = defineProps<{ column: ColumnType; value: any }>() |
|
provide('column', column) |
|
provide('value', value) |
|
|
|
const { |
|
isSet, |
|
isEnum, |
|
isURL, |
|
isEmail, |
|
isJSON, |
|
isDate, |
|
isDateTime, |
|
isTime, |
|
isBoolean, |
|
isDuration, |
|
isRating, |
|
isCurrency, |
|
isAttachment, |
|
isTextArea, |
|
} = useColumn(column) |
|
</script> |
|
|
|
<template> |
|
<div |
|
class="nc-cell" |
|
@keydown.stop.left |
|
@keydown.stop.right |
|
@keydown.stop.up |
|
@keydown.stop.down |
|
> |
|
<EditableAttachmentCell |
|
v-if="isAttachment" |
|
v-model="localState" |
|
:active="active" |
|
:db-alias="dbAlias" |
|
:meta="meta" |
|
:is-form="isForm" |
|
:column="column" |
|
:is-public-grid="isPublic && !isForm" |
|
:is-public-form="isPublic && isForm" |
|
:view-id="viewId" |
|
:is-locked="isLocked" |
|
v-on="$listeners" |
|
/> |
|
|
|
<RatingCell |
|
v-else-if="isRating" |
|
v-model="localState" |
|
:active="active" |
|
:is-form="isForm" |
|
:column="column" |
|
:is-public-grid="isPublic && !isForm" |
|
:is-public-form="isPublic && isForm" |
|
:is-locked="isLocked" |
|
v-on="$listeners" |
|
/> |
|
|
|
<DurationCell |
|
v-else-if="isDuration" |
|
v-model="localState" |
|
:active="active" |
|
:is-form="isForm" |
|
:column="column" |
|
:is-locked="isLocked" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<BooleanCell |
|
v-else-if="isBoolean" |
|
v-model="localState" |
|
:column="column" |
|
:is-form="isForm" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<IntegerCell |
|
v-else-if="isInt" |
|
v-model="localState" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<FloatCell |
|
v-else-if="isFloat" |
|
v-model="localState" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<DatePickerCell |
|
v-else-if="isDate" |
|
v-model="localState" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<TimePickerCell |
|
v-else-if="isTime" |
|
v-model="localState" |
|
v-on="parentListeners" |
|
@save="$emit('save')" |
|
/> |
|
|
|
<DateTimePickerCell |
|
v-else-if="isDateTime" |
|
v-model="localState" |
|
ignore-focus |
|
v-on="parentListeners" |
|
/> |
|
|
|
<EnumCell |
|
v-else-if="isEnum && ((!isForm && !active) || isLocked || (isPublic && !isForm))" |
|
v-model="localState" |
|
:column="column" |
|
v-on="parentListeners" |
|
/> |
|
<EnumListCell |
|
v-else-if="isEnum" |
|
v-model="localState" |
|
:is-form="isForm" |
|
:column="column" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<JsonEditableCell |
|
v-else-if="isJSON" |
|
v-model="localState" |
|
:is-form="isForm" |
|
v-on="parentListeners" |
|
@input="$emit('save')" |
|
/> |
|
|
|
<SetListEditableCell |
|
v-else-if="isSet && (active || isForm) && !isLocked && !(isPublic && !isForm)" |
|
v-model="localState" |
|
:column="column" |
|
v-on="parentListeners" |
|
/> |
|
<SetListCell |
|
v-else-if="isSet" |
|
v-model="localState" |
|
:column="column" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<EditableUrlCell v-else-if="isURL" v-model="localState" v-on="parentListeners" /> |
|
|
|
<TextCell v-else-if="isString" v-model="localState" v-on="parentListeners" /> |
|
|
|
<TextAreaCell |
|
v-else-if="isTextArea" |
|
v-model="localState" |
|
:is-form="isForm" |
|
v-on="parentListeners" |
|
/> |
|
|
|
<TextCell v-else v-model="localState" v-on="$listeners" /> |
|
<span v-if="hint" class="nc-hint">{{ hint }}</span> |
|
|
|
<div v-if="(isLocked || (isPublic && !isForm)) && !isAttachment" class="nc-locked-overlay" /> |
|
</div> |
|
</template> |
|
|
|
<style scoped> |
|
div { |
|
width: 100%; |
|
height: 100%; |
|
color: var(--v-textColor-base); |
|
} |
|
|
|
.nc-hint { |
|
font-size: .61rem; |
|
color: grey; |
|
} |
|
|
|
.nc-cell { |
|
position: relative; |
|
} |
|
|
|
.nc-locked-overlay { |
|
position: absolute; |
|
z-index: 2; |
|
height: 100%; |
|
width: 100%; |
|
top: 0; |
|
left: 0; |
|
} |
|
</style>
|
|
|