diff --git a/package-lock.json b/package-lock.json
index 4547f28b..0ab28ced 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
"axios-retry": "^3.5.0",
"bootstrap": "^5.3",
"iframe-resizer": "^4.3.9",
- "maska": "^1.5.0",
+ "maska": "^2.1.1",
"pinia": "^2.1.4",
"pinia-plugin-persistedstate": "^2.2.0",
"uuid": "^9.0.1",
@@ -13947,9 +13947,9 @@
}
},
"node_modules/maska": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/maska/-/maska-1.5.0.tgz",
- "integrity": "sha512-BwZXzs5gHeu6wtn3iWFqrKRtcsM3sTpkHvfAngVNVNlN7tl9ZyQUeHTz11s9Sy7Bq1MoQ+xyR/+IzghY8nR84Q=="
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/maska/-/maska-2.1.11.tgz",
+ "integrity": "sha512-IGqWjBnKxMYcVa06pb4mPfag9sJjnR2T15CdGfQ2llR3gajiSd4AxXCvNqHMEq9W3UBhjjTazgWumsP3sWrUSg=="
},
"node_modules/mdn-data": {
"version": "2.0.14",
diff --git a/package.json b/package.json
index 39dd64ab..82ca9450 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"axios-retry": "^3.5.0",
"bootstrap": "^5.3",
"iframe-resizer": "^4.3.9",
- "maska": "^1.5.0",
+ "maska": "^2.1.1",
"pinia": "^2.1.4",
"pinia-plugin-persistedstate": "^2.2.0",
"uuid": "^9.0.1",
@@ -61,4 +61,4 @@
"vitest": "^0.33.0",
"volar-service-vetur": "latest"
}
-}
+}
\ No newline at end of file
diff --git a/src/constants/maska-masks.js b/src/constants/maska-masks.js
new file mode 100644
index 00000000..b7d321c0
--- /dev/null
+++ b/src/constants/maska-masks.js
@@ -0,0 +1,15 @@
+const MaskaFormattedMasks = {
+ PHONE_NUMBER: {
+ mask: 'x##-###-####',
+ tokens: {
+ token: 'x',
+ pattern: '[2-9]'
+ }
+ },
+ ZIPCODE: {
+ mask: '#####',
+ tokens: null
+ }
+};
+
+export default MaskaFormattedMasks;
diff --git a/src/digital-components/textbox-question/textbox-question.vue b/src/digital-components/textbox-question/textbox-question.vue
index 2ba8d5b9..c97a6b4a 100644
--- a/src/digital-components/textbox-question/textbox-question.vue
+++ b/src/digital-components/textbox-question/textbox-question.vue
@@ -19,7 +19,9 @@
:id="inputId"
:ref="inputId"
v-model.trim="value"
- v-maska="mask"
+ v-maska
+ :data-maska="getMaskFromProp"
+ :data-maska-tokens="getTokensFromProp"
class="form-control"
:type="type"
:name="inputId"
@@ -97,7 +99,7 @@ export default {
iconRight: Boolean, // Place icon on right side of text input, otherwise default is left if hasIcon prop is used
hasError: Boolean,
mask: {
- type: String,
+ type: [String, Object],
default: ''
},
validationRules: String,
@@ -183,6 +185,21 @@ export default {
return questionText;
}
+ },
+ getMaskFromProp() {
+ if (this.mask) {
+ if (this.mask.mask) {
+ return this.mask.mask;
+ }
+ return this.mask;
+ }
+ return null;
+ },
+ getTokensFromProp() {
+ if (this.mask?.tokens) {
+ return `{ '${this.mask.tokens.token}': { 'pattern': '${this.mask.tokens.pattern}' }}`;
+ }
+ return null;
}
},
watch: {
diff --git a/src/layouts/bailout-page/bailout-page.vue b/src/layouts/bailout-page/bailout-page.vue
index 4a60c8e9..131665fe 100644
--- a/src/layouts/bailout-page/bailout-page.vue
+++ b/src/layouts/bailout-page/bailout-page.vue
@@ -39,7 +39,7 @@
inputId="phoneNumberField"
cmsWidgetName="PhoneNumberQuestion"
isRequired
- :mask="mask"
+ :mask="phoneMask"
disableAutoFill
:validationRules="rules.phoneNumber" />
@@ -53,6 +53,7 @@ import textboxQuestion from '@/digital-components/textbox-question/textbox-quest
// Supporting Files
import { useMainStore } from '@/store/index.js';
import globalRules from '@/constants/global-rules.js';
+import MaskaFormattedMasks from '@/constants/maska-masks';
import widgetFields from '@/constants/cms-widget-fields.js';
export default {
@@ -102,15 +103,8 @@ export default {
footerButtonText() {
return this.getCmsContent(this.widget.drawerFooter, widgetFields.FOOTER_WIDGET.FORWARD_BUTTON_TEXT);
},
- mask() {
- return {
- mask: 'x##-###-####',
- tokens: {
- x: {
- pattern: /[2-9]/
- }
- }
- };
+ phoneMask() {
+ return MaskaFormattedMasks.PHONE_NUMBER;
}
},
methods: {
diff --git a/src/layouts/welcome-page/welcome-page.vue b/src/layouts/welcome-page/welcome-page.vue
index df58619e..30b388f9 100644
--- a/src/layouts/welcome-page/welcome-page.vue
+++ b/src/layouts/welcome-page/welcome-page.vue
@@ -86,7 +86,7 @@
cmsWidgetName="PhoneNumberQuestion"
:validationRules="rules.phoneNumber"
isRequired
- :mask="mask"
+ :mask="phoneMask"
disableAutoFill />
@@ -197,6 +197,7 @@ import { useMainStore } from '@/store';
import states from '@/constants/states';
import globalRules from '@/constants/global-rules';
import routerParams from '@/router/router-constants/router-params';
+import MaskaFormattedMasks from '@/constants/maska-masks';
// define validation rules
defineRule('damage-option-required', required(errorMessages.DAMAGE_OPTION_REQUIRED));
@@ -313,15 +314,8 @@ export default {
maxCoverageLookupAttemptsReached() {
return this.mainStore.applicationUser.coverageLookupAttempts >= 11;
},
- mask() {
- return {
- mask: 'x##-###-####',
- tokens: {
- x: {
- pattern: /[2-9]/
- }
- }
- };
+ phoneMask() {
+ return MaskaFormattedMasks.PHONE_NUMBER;
}
},
methods: {
diff --git a/src/main.js b/src/main.js
index 68987d2e..fa8cc769 100644
--- a/src/main.js
+++ b/src/main.js
@@ -4,7 +4,7 @@ import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
import { useMainStore } from '@/store';
import baseMixin from '@/mixins/base-mixin';
import { createPinia } from 'pinia';
-import Maska from 'maska';
+import { vMaska } from 'maska';
import LoadScript from 'vue-plugin-load-script';
import analyticsMixin from '@/mixins/analytics-mixin';
@@ -29,8 +29,8 @@ useMainStore().populateInitialState();
// Additional Vue items to setup
vueApp.use(router);
-vueApp.use(Maska);
vueApp.use(LoadScript);
+vueApp.directive('maska', vMaska);
vueApp.mixin(baseMixin);
vueApp.mixin(analyticsMixin);
vueApp.mixin(experimentMixin);