diff --git a/src/common-components/dropdown-question/dropdown-question.vue b/src/common-components/dropdown-question/dropdown-question.vue index 38cf15985..f5fdf1983 100644 --- a/src/common-components/dropdown-question/dropdown-question.vue +++ b/src/common-components/dropdown-question/dropdown-question.vue @@ -8,14 +8,16 @@ :aria-disabled="isDisabled" :disabled="isDisabled" :aria-required="isRequired" - :validationRules="validationRules" > + :validationRules="validationRules" + @input="handleChange" + @blur="handleBlur" > -

- There has been an error! -

+
+ {{ errorMessage }} +
@@ -36,10 +38,30 @@ export default { disableAutoFill: Boolean, validationRules: String, }, + setup(props) { + const fieldOptions = { + type: "text", + value: props.modelValue, + }; + + const { + errorMessage, + handleBlur, + handleChange, + meta, + } = useField(props.inputId, props.validationRules, fieldOptions); + + return { + errorMessage, + handleBlur, + handleChange, + meta, + }; + }, data() { return { - labelText: "", - ariaLabelText: "", + labelText: "", + ariaLabelText: "", } }, methods: { @@ -65,6 +87,11 @@ export default { } }, }, + watch: { + selectedOption(newValue) { + this.handleChange(newValue); + } + } }; diff --git a/src/common-components/textbox-question/textbox-question.vue b/src/common-components/textbox-question/textbox-question.vue index 18f2851c5..4a4298f91 100644 --- a/src/common-components/textbox-question/textbox-question.vue +++ b/src/common-components/textbox-question/textbox-question.vue @@ -14,15 +14,19 @@ :aria-required="isRequired" autocomplete="off" :class="[hasIcon ? 'has-icon' : '', iconRight ? 'icon-right' : '']" - :validationRules="validationRules" /> -

- There has been an error! -

+ :validationRules="validationRules" + @input="handleChange" + @blur="handleBlur" /> +
+ {{ errorMessage }} +
diff --git a/src/constants/error-messages.js b/src/constants/error-messages.js index 1fd2a77c2..2b3382dc9 100644 --- a/src/constants/error-messages.js +++ b/src/constants/error-messages.js @@ -14,6 +14,7 @@ const errorMessages = { FIRST_NAME_REQUIRED: "Please enter your first name", LAST_NAME_REQUIRED: "Please enter your last name", EMAIL_ADDRESS_REQUIRED: "Please enter your email address", + EMAIL_ADDRESS_FORMAT: "Please enter a valid email address", }; export { errorMessages }; \ No newline at end of file diff --git a/src/helpers/validation-rules.js b/src/helpers/validation-rules.js index 1ac4ce818..9b2e14d58 100644 --- a/src/helpers/validation-rules.js +++ b/src/helpers/validation-rules.js @@ -5,4 +5,21 @@ export function required(errorMessage) { } return true; }; +} + +export function regex(expression, errorMessage) { + return (value) => { + // Field is empty, should pass + if (!value || !value.length) { + return true; + } + + // Check if email + if (!expression.test(value)) { + return errorMessage; + } + + return true; + } + } \ No newline at end of file diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index 9914c406c..2d3cc481e 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -1,13 +1,21 @@ diff --git a/src/layouts/address-lookup/customer-questions/address-questions/address-questions.vue b/src/layouts/address-lookup/customer-questions/address-questions/address-questions.vue index 20dae6350..b8e20d7e7 100644 --- a/src/layouts/address-lookup/customer-questions/address-questions/address-questions.vue +++ b/src/layouts/address-lookup/customer-questions/address-questions/address-questions.vue @@ -1,22 +1,22 @@