Update validation.

This commit is contained in:
Bryan Mauger 2023-05-17 14:40:06 -04:00
parent df97db7100
commit 59f4c0d7cc
3 changed files with 29 additions and 25 deletions

View file

@ -1,11 +1,18 @@
<template> <template>
<div class="phonenumber-question d-flex flex-column"> <div class="phonenumber-question d-flex flex-column"
:class="[
(errors && errors.length) || hasError ? 'has-error' : '',
hideInput ? 'hide-input' : '',
]">
<label for="phone-number" class="mb-1 fw-bold" v-html="phoneNumberQuestionWidget"></label> <label for="phone-number" class="mb-1 fw-bold" v-html="phoneNumberQuestionWidget"></label>
<input <input
class="form-control" class="form-control"
id="phone-number" id="phone-number"
name="phone-number"
v-model="phoneNumber" v-model="phoneNumber"
@input="formatPhoneNumber" @input="formatPhoneNumber"
@change="handleChange"
@blur="handleChange"
:maxlength="phoneNumberMaxLength" :maxlength="phoneNumberMaxLength"
pattern="[0-9\-]+" pattern="[0-9\-]+"
:aria-required="isRequired" :aria-required="isRequired"
@ -109,6 +116,14 @@ export default {
}); });
}); });
}, },
watch: {
async value(newValue) {
const result = await validate(newValue, this.validationRules); // do a test validation check, without triggering full validation
if (result.valid) {
this.handleChange(newValue); // trigger full validation on this field only
}
},
},
}; };
</script> </script>

View file

@ -20,15 +20,15 @@
<textboxQuestion <textboxQuestion
class="mb-4" class="mb-4"
cmsWidgetName="emailQuestionWidget" cmsWidgetName="emailQuestionWidget"
v-model="email" v-model="customerModel.emailAddress"
inputId="email" inputId="email"
validationRules="email-address-required|email-address-format" /> validationRules="email-address-required|email-address-format" />
<phoneNumberQuestion <phoneNumberQuestion
cmsWidgetName="phoneNumberQuestionWidget" cmsWidgetName="phoneNumberQuestionWidget"
class="mb-4" class="mb-4"
v-model="phoneNumber" v-model="customerModel.phoneNumber"
isRequired isRequired
validationRules="phone-number-required" /> validationRules="phone-number-required|phone-number-format" />
<textareaQuestion <textareaQuestion
class="mb-4" class="mb-4"
v-model="techNotes" v-model="techNotes"
@ -69,6 +69,13 @@ import { useField, validate } from "vee-validate";
defineRule("first-name-required", required(errorMessages.FIRST_NAME_REQUIRED)); defineRule("first-name-required", required(errorMessages.FIRST_NAME_REQUIRED));
defineRule("last-name-required", required(errorMessages.LAST_NAME_REQUIRED)); defineRule("last-name-required", required(errorMessages.LAST_NAME_REQUIRED));
defineRule("phone-number-required", required(errorMessages.PHONE_REQUIRED)); defineRule("phone-number-required", required(errorMessages.PHONE_REQUIRED));
defineRule(
"phone-number-format",
regex(
/^(?=(?:.*\d){10})(?=(?:.*-){2})[\d-]{12}$/,
errorMessages.PHONE_FORMAT
)
);
defineRule("email-address-required", required(errorMessages.EMAIL_ADDRESS_REQUIRED)); defineRule("email-address-required", required(errorMessages.EMAIL_ADDRESS_REQUIRED));
defineRule( defineRule(
"email-address-format", "email-address-format",
@ -99,20 +106,6 @@ export default {
vm.setCmsContent(resultMap.cmsContent); vm.setCmsContent(resultMap.cmsContent);
}); });
}, },
setup(props) {
const { errorMessage, handleBlur, handleChange, meta, validate, errors } = useField(
props.validationRules,
);
return {
errorMessage,
handleBlur,
handleChange,
validate,
meta,
errors,
};
},
data() { data() {
return { return {
techNotes: "", techNotes: "",
@ -124,15 +117,10 @@ export default {
type: Object, type: Object,
default: () => ({ default: () => ({
customerQuestions: { customerQuestions: {
addressQuestions: {
streetAddress: "",
city: "",
state: "",
zipCode: "",
},
firstName: "", firstName: "",
lastName: "", lastName: "",
emailAddress: "", emailAddress: "",
phoneNumber: "",
}, },
}), }),
}, },

View file

@ -102,7 +102,8 @@ html {
} }
} }
&.textbox-question, &.textbox-question,
&.dropdown-question { &.dropdown-question,
&.phonenumber-question {
p { p {
color: $red; color: $red;
} }