apply previous signature and initials on the next field

pull/133/head
DocuSeal 2 years ago
parent 041f362cc4
commit 86c7b92675

@ -221,6 +221,7 @@
:key="currentField.uuid" :key="currentField.uuid"
v-model="values[currentField.uuid]" v-model="values[currentField.uuid]"
:field="currentField" :field="currentField"
:previous-value="previousSignatureValue"
:is-direct-upload="isDirectUpload" :is-direct-upload="isDirectUpload"
:attachments-index="attachmentsIndex" :attachments-index="attachmentsIndex"
:submitter-slug="submitterSlug" :submitter-slug="submitterSlug"
@ -234,6 +235,7 @@
:key="currentField.uuid" :key="currentField.uuid"
v-model="values[currentField.uuid]" v-model="values[currentField.uuid]"
:field="currentField" :field="currentField"
:previous-value="previousInitialsValue"
:is-direct-upload="isDirectUpload" :is-direct-upload="isDirectUpload"
:attachments-index="attachmentsIndex" :attachments-index="attachmentsIndex"
:submitter-slug="submitterSlug" :submitter-slug="submitterSlug"
@ -458,6 +460,16 @@ export default {
submitterSlug () { submitterSlug () {
return this.submitter.slug return this.submitter.slug
}, },
previousSignatureValue () {
const signatureField = [...this.fields].reverse().find((field) => field.type === 'signature' && !!this.values[field.uuid])
return this.values[signatureField?.uuid]
},
previousInitialsValue () {
const initialsField = [...this.fields].reverse().find((field) => field.type === 'initials' && !!this.values[field.uuid])
return this.values[initialsField?.uuid]
},
isAnonymousChecboxes () { isAnonymousChecboxes () {
return this.currentField.type === 'checkbox' && this.currentStepFields.every((e) => !e.name) && this.currentStepFields.length > 4 return this.currentField.type === 'checkbox' && this.currentStepFields.every((e) => !e.name) && this.currentStepFields.length > 4
}, },

@ -20,7 +20,7 @@
</a> </a>
</span> </span>
<a <a
v-if="modelValue" v-if="modelValue || computedPreviousValue"
href="#" href="#"
class="btn btn-outline btn-sm" class="btn btn-outline btn-sm"
@click.prevent="remove" @click.prevent="remove"
@ -51,26 +51,26 @@
</div> </div>
</div> </div>
<input <input
:value="modelValue" :value="modelValue || computedPreviousValue"
type="hidden" type="hidden"
:name="`values[${field.uuid}]`" :name="`values[${field.uuid}]`"
> >
<img <img
v-if="modelValue" v-if="modelValue || computedPreviousValue"
:src="attachmentsIndex[modelValue].url" :src="attachmentsIndex[modelValue || computedPreviousValue].url"
class="mx-auto bg-white border border-base-300 rounded max-h-72" class="mx-auto bg-white border border-base-300 rounded max-h-72"
> >
<canvas <canvas
v-show="!modelValue" v-show="!modelValue && !computedPreviousValue"
ref="canvas" ref="canvas"
class="bg-white border border-base-300 rounded" class="bg-white border border-base-300 rounded"
/> />
<input <input
v-if="!isDrawInitials" v-if="!isDrawInitials && !modelValue && !computedPreviousValue"
id="initials_text_input" id="initials_text_input"
ref="textInput" ref="textInput"
class="base-input !text-2xl w-full mt-6 text-center" class="base-input !text-2xl w-full mt-6 text-center"
:required="field.required && !isInitialsStarted && !modelValue" :required="field.required && !isInitialsStarted"
:placeholder="`${t('type_initial_here')}...`" :placeholder="`${t('type_initial_here')}...`"
type="text" type="text"
@focus="$emit('focus')" @focus="$emit('focus')"
@ -111,6 +111,11 @@ export default {
required: false, required: false,
default: () => ({}) default: () => ({})
}, },
previousValue: {
type: String,
required: false,
default: ''
},
modelValue: { modelValue: {
type: String, type: String,
required: false, required: false,
@ -120,10 +125,20 @@ export default {
emits: ['attached', 'update:model-value', 'start', 'minimize', 'focus'], emits: ['attached', 'update:model-value', 'start', 'minimize', 'focus'],
data () { data () {
return { return {
isInitialsStarted: false, isInitialsStarted: !!this.previousValue,
isUsePreviousValue: true,
isDrawInitials: false isDrawInitials: false
} }
}, },
computed: {
computedPreviousValue () {
if (this.isUsePreviousValue) {
return this.previousValue
} else {
return null
}
}
},
async mounted () { async mounted () {
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.canvas) { if (this.$refs.canvas) {
@ -151,6 +166,9 @@ export default {
methods: { methods: {
remove () { remove () {
this.$emit('update:model-value', '') this.$emit('update:model-value', '')
this.isUsePreviousValue = false
this.isInitialsStarted = false
}, },
clear () { clear () {
this.pad.clear() this.pad.clear()
@ -192,7 +210,11 @@ export default {
} }
}, },
async submit () { async submit () {
if (this.modelValue) { if (this.modelValue || this.computedPreviousValue) {
if (this.computedPreviousValue) {
this.$emit('update:model-value', this.computedPreviousValue)
}
return Promise.resolve({}) return Promise.resolve({})
} }

@ -9,14 +9,15 @@
class="tooltip" class="tooltip"
data-tip="Type text" data-tip="Type text"
> >
<button <a
id="type_text_button" id="type_text_button"
href="#"
class="btn btn-sm btn-circle" class="btn btn-sm btn-circle"
:class="{ 'btn-neutral': isTextSignature, 'btn-outline': !isTextSignature }" :class="{ 'btn-neutral': isTextSignature, 'btn-outline': !isTextSignature }"
@click.prevent="toggleTextInput" @click.prevent="toggleTextInput"
> >
<IconTextSize :width="16" /> <IconTextSize :width="16" />
</button> </a>
</span> </span>
<span <span
class="tooltip" class="tooltip"
@ -34,23 +35,26 @@
> >
</label> </label>
</span> </span>
<button <a
v-if="modelValue" v-if="modelValue || computedPreviousValue"
href="#"
class="btn btn-outline btn-sm" class="btn btn-outline btn-sm"
@click.prevent="remove" @click.prevent="remove"
> >
<IconReload :width="16" /> <IconReload :width="16" />
{{ t('redraw') }} {{ t('redraw') }}
</button> </a>
<button <a
v-else v-else
href="#"
class="btn btn-outline btn-sm" class="btn btn-outline btn-sm"
@click.prevent="clear" @click.prevent="clear"
> >
<IconReload :width="16" /> <IconReload :width="16" />
{{ t('clear') }} {{ t('clear') }}
</button> </a>
<button <a
href="#"
title="Minimize" title="Minimize"
class="py-1.5 inline md:hidden" class="py-1.5 inline md:hidden"
@click.prevent="$emit('minimize')" @click.prevent="$emit('minimize')"
@ -59,21 +63,21 @@
:width="20" :width="20"
:height="20" :height="20"
/> />
</button> </a>
</div> </div>
</div> </div>
<input <input
:value="modelValue" :value="modelValue || computedPreviousValue"
type="hidden" type="hidden"
:name="`values[${field.uuid}]`" :name="`values[${field.uuid}]`"
> >
<img <img
v-if="modelValue" v-if="modelValue || computedPreviousValue"
:src="attachmentsIndex[modelValue].url" :src="attachmentsIndex[modelValue || computedPreviousValue].url"
class="mx-auto bg-white border border-base-300 rounded max-h-72" class="mx-auto bg-white border border-base-300 rounded max-h-72"
> >
<canvas <canvas
v-show="!modelValue" v-show="!modelValue && !computedPreviousValue"
ref="canvas" ref="canvas"
class="bg-white border border-base-300 rounded" class="bg-white border border-base-300 rounded"
/> />
@ -123,6 +127,11 @@ export default {
required: false, required: false,
default: () => ({}) default: () => ({})
}, },
previousValue: {
type: String,
required: false,
default: ''
},
modelValue: { modelValue: {
type: String, type: String,
required: false, required: false,
@ -132,10 +141,20 @@ export default {
emits: ['attached', 'update:model-value', 'start', 'minimize'], emits: ['attached', 'update:model-value', 'start', 'minimize'],
data () { data () {
return { return {
isSignatureStarted: false, isSignatureStarted: !!this.previousValue,
isUsePreviousValue: true,
isTextSignature: false isTextSignature: false
} }
}, },
computed: {
computedPreviousValue () {
if (this.isUsePreviousValue) {
return this.previousValue
} else {
return null
}
}
},
async mounted () { async mounted () {
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.canvas) { if (this.$refs.canvas) {
@ -161,6 +180,9 @@ export default {
methods: { methods: {
remove () { remove () {
this.$emit('update:model-value', '') this.$emit('update:model-value', '')
this.isUsePreviousValue = false
this.isSignatureStarted = false
}, },
clear () { clear () {
this.pad.clear() this.pad.clear()
@ -249,7 +271,11 @@ export default {
} }
}, },
async submit () { async submit () {
if (this.modelValue) { if (this.modelValue || this.computedPreviousValue) {
if (this.computedPreviousValue) {
this.$emit('update:model-value', this.computedPreviousValue)
}
return Promise.resolve({}) return Promise.resolve({})
} }

Loading…
Cancel
Save