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.
239 lines
6.5 KiB
239 lines
6.5 KiB
<script setup lang="ts"> |
|
import type { ColumnType } from 'nocodb-sdk' |
|
import { provide } from 'vue' |
|
import { computed } from '#imports' |
|
import { ColumnInj } from '~/components' |
|
import useColumn from '~/composables/useColumn' |
|
|
|
interface Props { |
|
column: ColumnType |
|
modelValue: any |
|
editEnabled: boolean |
|
} |
|
|
|
const { column, modelValue: value, editEnabled } = defineProps<Props>() |
|
|
|
const emit = defineEmits(['update:modelValue']) |
|
|
|
provide(ColumnInj, column) |
|
|
|
provide( |
|
'editEnabled', |
|
computed(() => editEnabled), |
|
) |
|
|
|
const localState = computed({ |
|
get: () => value, |
|
set: (val) => emit('update:modelValue', val), |
|
}) |
|
|
|
const { |
|
isURL, |
|
isEmail, |
|
isJSON, |
|
isDate, |
|
isDateTime, |
|
isTime, |
|
isBoolean, |
|
isDuration, |
|
isRating, |
|
isCurrency, |
|
isAttachment, |
|
isTextArea, |
|
isString, |
|
isSingleSelect, |
|
isMultiSelect, |
|
} = useColumn(column) |
|
</script> |
|
|
|
<template> |
|
<div class="nc-cell" @keydown.stop.left @keydown.stop.right @keydown.stop.up @keydown.stop.down> |
|
<!-- |
|
todo : |
|
JSONCell |
|
DurationCell |
|
Currency |
|
Url |
|
Email |
|
--> |
|
|
|
<!-- <RatingCell --> |
|
<!-- v-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" --> |
|
<!-- />–> --> |
|
|
|
<!-- <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" --> |
|
<!-- />–> --> |
|
|
|
<!-- <UrlCell v-else-if="isURL" --> |
|
<!-- /> --> |
|
<!-- <!– v-model="localState" v-on="parentListeners" –> --> |
|
<!-- <!– />–> --> |
|
|
|
<CellText v-if="isString" v-model="localState" /> |
|
<!-- v-on="parentListeners" |
|
/> |
|
--> |
|
|
|
<CellTextArea v-else-if="isTextArea" v-model="localState" /> |
|
<!-- v-model="localState" |
|
:is-form="isForm" |
|
v-on="parentListeners" |
|
/> --> |
|
|
|
<CellCheckbox v-else-if="isBoolean" v-model="localState" /> |
|
<!-- <!– v-model="localState" --> |
|
<!-- :column="column" --> |
|
<!-- :is-form="isForm" --> |
|
<!-- v-on="parentListeners" --> |
|
<!-- />–> --> |
|
|
|
<CellAttachment v-else-if="isAttachment" v-model="localState" /> |
|
<CellSingleSelect v-else-if="isSingleSelect" v-model="localState" /> |
|
<CellMultiSelect v-else-if="isMultiSelect" v-model="localState" /> |
|
<CellDatePicker v-else-if="isDate" v-model="localState" /> |
|
<CellDateTimePicker v-else-if="isDateTime" v-model="localState" /> |
|
<CellDateTimePicker v-else-if="isTime" v-model="localState" /> |
|
<CellRating v-else-if="isRating" v-model="localState" /> |
|
<!-- 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" |
|
/> --> |
|
|
|
<CellText 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> |
|
textarea { |
|
outline: none; |
|
} |
|
|
|
div { |
|
width: 100%; |
|
height: 100%; |
|
color: var(--v-textColor-base); |
|
} |
|
|
|
.nc-hint { |
|
font-size: 0.61rem; |
|
color: grey; |
|
} |
|
|
|
.nc-cell { |
|
position: relative; |
|
} |
|
|
|
.nc-locked-overlay { |
|
position: absolute; |
|
z-index: 2; |
|
height: 100%; |
|
width: 100%; |
|
top: 0; |
|
left: 0; |
|
} |
|
</style>
|
|
|