add reason

This commit is contained in:
Pete Matsyburka
2024-08-06 00:19:33 +03:00
parent 91d44a3e31
commit 94d5ab4ace
15 changed files with 241 additions and 8 deletions
@@ -194,6 +194,48 @@
type="text"
@input="updateWrittenSignature"
>
<select
v-if="requireSigningReason && !isOtherReason"
class="select base-input !text-2xl w-full mt-6 text-center"
required
:name="`values[${field.preferences.reason_field_uuid}]`"
@change="$event.target.value === 'other' ? [reason = '', isOtherReason = true] : $emit('update:reason', $event.target.value)"
>
<option
value=""
disabled
:selected="!reason"
>
{{ t('select_a_reason') }}
</option>
<option
v-for="(label, option) in defaultReasons"
:key="option"
:value="option"
:selected="reason === option"
>
{{ label }}
</option>
<option value="other">
{{ t('other') }}
</option>
</select>
<input
v-if="requireSigningReason && isOtherReason"
class="base-input !text-2xl w-full mt-6"
required
:name="`values[${field.preferences.reason_field_uuid}]`"
:placeholder="t('type_here_')"
:value="reason"
type="text"
@input="$emit('update:reason', $event.target.value)"
>
<input
v-if="requireSigningReason"
hidden
name="with_reason"
:value="field.preferences.reason_field_uuid"
>
<div
v-if="isShowQr"
dir="auto"
@@ -231,6 +273,7 @@ import { cropCanvasAndExportToPNG } from './crop_canvas'
import SignaturePad from 'signature_pad'
import AppearsOn from './appears_on'
import MarkdownContent from './markdown_content'
import { v4 } from 'uuid'
let isFontLoaded = false
@@ -255,6 +298,11 @@ export default {
type: Object,
required: true
},
requireSigningReason: {
type: Boolean,
required: false,
default: false
},
submitter: {
type: Object,
required: true
@@ -304,17 +352,23 @@ export default {
required: false,
default: ''
},
reason: {
type: String,
required: false,
default: ''
},
modelValue: {
type: String,
required: false,
default: ''
}
},
emits: ['attached', 'update:model-value', 'start', 'minimize'],
emits: ['attached', 'update:model-value', 'start', 'minimize', 'update:reason'],
data () {
return {
isSignatureStarted: !!this.previousValue,
isShowQr: false,
isOtherReason: false,
isUsePreviousValue: true,
isTextSignature: this.field.preferences?.format === 'typed',
uploadImageInputKey: Math.random().toString()
@@ -324,6 +378,13 @@ export default {
submitterSlug () {
return this.submitter.slug
},
defaultReasons () {
return {
[this.t('approved_by')]: this.t('approved'),
[this.t('reviewed_by')]: this.t('reviewed'),
[this.t('authored_by')]: this.t('authored_by_me')
}
},
computedPreviousValue () {
if (this.isUsePreviousValue) {
return this.previousValue
@@ -332,6 +393,13 @@ export default {
}
}
},
created () {
if (this.requireSigningReason) {
this.field.preferences ||= {}
this.field.preferences.reason_field_uuid ||= v4()
this.isOtherReason = this.reason && !this.defaultReasons[this.reason]
}
},
async mounted () {
this.$nextTick(() => {
if (this.$refs.canvas) {