Move phone-number-format logic to phonenumber-question.

This commit is contained in:
Bryan Mauger 2023-05-25 09:48:25 -04:00
parent 0767a6c87b
commit 86ca39c991
3 changed files with 21 additions and 44 deletions

View file

@ -1,40 +1,14 @@
<template> <template>
<div <div
class="phonenumber-question d-flex flex-column" class="phonenumber-question d-flex flex-column" >
:class="[
(errors && errors.length) || hasError ? 'has-error' : '',
hideInput ? 'hide-input' : '',
]">
<textboxQuestion <textboxQuestion
maxLength="12" type="tel"
:max-length="12"
v-model="selectedValue" v-model="selectedValue"
:isRequired="isRequired" :isRequired="isRequired"
:validationRules="validationRules" :validationRules="validationRuleForTextBoxQuestion"
pattern="[0-9\-]+"
:keyDownHandler="onKeyDown" :keyDownHandler="onKeyDown"
cmsWidgetName="phoneNumberQuestionWidget" cmsWidgetName="phoneNumberQuestionWidget" />
/>
<!-- <label for="phone-number" class="mb-1 fw-bold" v-html="phoneNumberQuestionWidget"></label>
<input
class="form-control"
id="phone-number"
name="phone-number"
v-model="phoneNumber"
@input="formatPhoneNumber"
@change="handleChange"
@blur="handleChange"
:maxlength="phoneNumberMaxLength"
pattern="[0-9\-]+"
:aria-required="isRequired"
:validationRules="validationRules" /> -->
<div v-show="errorMessage" class="row my-1 form-test-error">
<span
class="d-inline-flex small mt-0"
role="alert"
:class="[centerErrorMessage ? 'center-error-message' : '']"
>{{ errorMessage }}</span
>
</div>
</div> </div>
</template> </template>
@ -98,11 +72,6 @@ export default {
errors, errors,
}; };
}, },
data() {
return {
phoneNumberMaxLength: 12,
};
},
computed: { computed: {
phoneNumberQuestionWidget() { phoneNumberQuestionWidget() {
return this.getCmsContent(this.cmsWidgetName, "QuestionText"); return this.getCmsContent(this.cmsWidgetName, "QuestionText");
@ -116,6 +85,13 @@ export default {
this.$emit("update:modelValue", formattedNumber); this.$emit("update:modelValue", formattedNumber);
}, },
}, },
validationRuleForTextBoxQuestion() {
if (!this.validationRules || this.validationRules.length === 0) {
return "phone-number-format";
} else {
return this.validationRules + "|phone-number-format";
}
},
}, },
methods: { methods: {
formatPhoneNumber(value) { formatPhoneNumber(value) {
@ -134,11 +110,14 @@ export default {
return formattedNumber; return formattedNumber;
}, },
onKeyDown(event) { onKeyDown(event) {
if (this.selectedValue.length === 0 && event.key === "1") { if (
(this.selectedValue.length === 0 && event.key === "1") ||
(event.keyCode >= 65 && event.keyCode <= 90)
) {
event.preventDefault(); event.preventDefault();
} }
this.formatPhoneNumber(event.target.value + event.key); this.formatPhoneNumber(event.target.value + event.key);
} },
}, },
watch: { watch: {
async value(newValue) { async value(newValue) {
@ -149,8 +128,8 @@ export default {
}, },
}, },
components: { components: {
textboxQuestion textboxQuestion,
} },
}; };
</script> </script>

View file

@ -45,7 +45,7 @@
@blur="handleChange" @blur="handleChange"
:maxlength="maxLength ? maxLength : '999'" :maxlength="maxLength ? maxLength : '999'"
@focus="$emit('focus', $event.target.value)" @focus="$emit('focus', $event.target.value)"
@keydown="keyDownHandler"/> @keydown="keyDownHandler" />
<button v-if="includeSearchIcon" type="submit" aria-label="Search button" /> <button v-if="includeSearchIcon" type="submit" aria-label="Search button" />
<template v-if="includeImageQuestion"> <template v-if="includeImageQuestion">
<template v-if="!isDisabled"> <template v-if="!isDisabled">

View file

@ -27,10 +27,8 @@
class="mb-4" class="mb-4"
cmsWidgetName="phoneNumberQuestionWidget" cmsWidgetName="phoneNumberQuestionWidget"
v-model="phoneNumber" v-model="phoneNumber"
inputId="phone"
isRequired isRequired
maxLength="12" />
validationRules="phone-number-required|phone-number-format" />
<textareaQuestion <textareaQuestion
class="mb-4" class="mb-4"
v-model="techNotes" v-model="techNotes"