diff --git a/app/src/components/v-textarea/v-textarea.vue b/app/src/components/v-textarea/v-textarea.vue index 45fd67836b..19173fbad8 100644 --- a/app/src/components/v-textarea/v-textarea.vue +++ b/app/src/components/v-textarea/v-textarea.vue @@ -42,6 +42,10 @@ export default defineComponent({ type: String, default: null, }, + nullable: { + type: Boolean, + default: true, + }, expandOnFocus: { type: Boolean, default: false, @@ -68,7 +72,12 @@ export default defineComponent({ function emitValue(event: InputEvent) { const value = (event.target as HTMLInputElement).value; - emit('input', value); + + if (props.nullable === true && value === '') { + emit('input', null); + } else { + emit('input', value); + } } function trimIfEnabled() { diff --git a/app/src/interfaces/textarea/index.ts b/app/src/interfaces/textarea/index.ts index 0d4afa7321..4a5a10042c 100644 --- a/app/src/interfaces/textarea/index.ts +++ b/app/src/interfaces/textarea/index.ts @@ -55,5 +55,20 @@ export default defineInterface({ default_value: 'sans-serif', }, }, + { + field: 'clear', + name: '$t:interfaces.text-input.clear', + type: 'boolean', + meta: { + width: 'half', + interface: 'toggle', + options: { + label: '$t:interfaces.text-input.clear_label', + }, + }, + schema: { + default_value: false, + }, + }, ], }); diff --git a/app/src/interfaces/textarea/textarea.vue b/app/src/interfaces/textarea/textarea.vue index 713056ac9c..d9d23f4ee0 100644 --- a/app/src/interfaces/textarea/textarea.vue +++ b/app/src/interfaces/textarea/textarea.vue @@ -2,6 +2,7 @@
{{ $t('embed') }}
- +
diff --git a/app/src/views/private/components/users-invite/users-invite.vue b/app/src/views/private/components/users-invite/users-invite.vue index c5631c69ec..ac80c90afe 100644 --- a/app/src/views/private/components/users-invite/users-invite.vue +++ b/app/src/views/private/components/users-invite/users-invite.vue @@ -7,7 +7,7 @@
{{ $t('emails') }}
- +
{{ $t('role') }}