diff --git a/src/digital-components/textbox-question/textbox-question.vue b/src/digital-components/textbox-question/textbox-question.vue index 4bece84c..03538e54 100644 --- a/src/digital-components/textbox-question/textbox-question.vue +++ b/src/digital-components/textbox-question/textbox-question.vue @@ -1,7 +1,5 @@ @@ -116,12 +107,12 @@ export default { let initialValue; switch (typeof modelValue) { - case 'number': - initialValue = modelValue; - break; - default: - initialValue = modelValue && modelValue.length > 0 ? modelValue : ''; - break; + case 'number': + initialValue = modelValue; + break; + default: + initialValue = modelValue && modelValue.length > 0 ? modelValue : ''; + break; } const fieldOptions = { @@ -131,9 +122,11 @@ export default { }; // eslint-disable-next-line no-shadow - const { errorMessage, handleBlur, handleChange, meta, validate, errors } = useField(props.inputId, + const { errorMessage, handleBlur, handleChange, meta, validate, errors } = useField( + props.inputId, props.validationRules, - fieldOptions); + fieldOptions + ); return { errorMessage, @@ -195,29 +188,40 @@ export default { methods: { trimOnPaste(evt) { evt.stopPropagation(); + evt.preventDefault(); + + const input = document.getElementById(evt.srcElement.id); + const originalValue = input.value; + const startPosition = input.selectionStart; + const endPosition = input.selectionEnd; + const selectionLength = endPosition - startPosition; let data = null; if (evt.type === 'paste') { data = evt.clipboardData || window.clipboardData; } else { - evt.preventDefault(); data = evt.dataTransfer; } - const value = data.getData('Text')?.trim(); + const textValue = data.getData('Text'); - this.$emit('update:modelValue', value); + // Insert the pasted/dropped string at the index position + const arrOriginalString = originalValue.split(''); + arrOriginalString.splice(startPosition, selectionLength, textValue); + const blendedString = arrOriginalString.join(''); + + this.$emit('update:modelValue', blendedString); } } };