diff --git a/src/helpers/vehicle-helper.js b/src/helpers/vehicle-helper.js new file mode 100644 index 00000000..4d0bef51 --- /dev/null +++ b/src/helpers/vehicle-helper.js @@ -0,0 +1,20 @@ +import { useMainStore } from '@/store'; +import { experimentSettings } from '@/constants/experiments'; +import experimentMixin from '@/mixins/experiment-mixin'; + +export function hasYMMExperimentBailoutSettingEnabled() { + return ymmIsVinRequired() && experimentMixin.methods.hasSettingEqualTo(experimentSettings.ISS_YMMS_VIN_REQUIRED_BAILOUT_ENABLED, 'true'); +} + +export function hasYMMExperimentPageSettingEnabled() { + return ymmIsVinRequired() && experimentMixin.methods.hasSettingEqualTo(experimentSettings.ISS_YMMS_VIN_REQUIRED_PAGE_ENABLED, 'true'); +} + +export function hasYMMExperimentSettingEnabled() { + return experimentMixin.methods.hasSettingEqualTo(experimentSettings.ISS_YMMS_VIN_REQUIRED_PAGE_ENABLED, 'true') + || experimentMixin.methods.hasSettingEqualTo(experimentSettings.ISS_YMMS_VIN_REQUIRED_BAILOUT_ENABLED, 'true'); +} + +function ymmIsVinRequired() { + return useMainStore().order?.vehicle?.vinRequired === 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 1cce098a..b8bd1bc3 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -83,6 +83,7 @@ import { Form } from 'vee-validate'; // Supporting files import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import settleAllPromises from '@/helpers/layout-helper'; +import { hasYMMExperimentBailoutSettingEnabled } from '@/helpers/vehicle-helper'; import routerParams from '@/router/router-constants/router-params'; import { getDamageString, @@ -344,6 +345,10 @@ export default { { [routerParams.DISPLAY_VEHICLE_CHANGE_ALERT]: true } ); } else if (matchingCars.length === 1) { + if (hasYMMExperimentBailoutSettingEnabled()) { + this.navigateBailout(bailoutMessage.YMMNotFound()); + return; + } await this.navigateForwardWithSingleCarMatch(); } else { this.$router.navigate( diff --git a/src/layouts/address-vehicles/address-vehicles.vue b/src/layouts/address-vehicles/address-vehicles.vue index d37bb377..a465cb07 100644 --- a/src/layouts/address-vehicles/address-vehicles.vue +++ b/src/layouts/address-vehicles/address-vehicles.vue @@ -73,6 +73,7 @@ import { useMainStore } from '@/store'; import issPageValues from '@/router/router-constants/issPage-values'; import errorMessages from '@/constants/error-messages'; import { required } from '@/helpers/validation-rules'; +import { hasYMMExperimentBailoutSettingEnabled } from '@/helpers/vehicle-helper'; import { Form, defineRule } from 'vee-validate'; import { isGlassAvailableForCarId } from '@/helpers/damage-helper'; import { @@ -257,6 +258,11 @@ export default { false ); + if (hasYMMExperimentBailoutSettingEnabled()) { + this.navigateBailout(bailoutMessage.YMMNotFound()); + return; + } + await this.navigateForward(); }, async navigateForward() { diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index 885fc66d..a428afa4 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -78,7 +78,7 @@ import settleAllPromises from '@/helpers/layout-helper'; import { useMainStore } from '@/store'; import bailoutMessage from '@/constants/bailoutMessage'; import errorMessages from '@/constants/error-messages'; -import { experimentSettings } from '@/constants/experiments'; +import { hasYMMExperimentBailoutSettingEnabled } from '@/helpers/vehicle-helper'; import { required } from '@/helpers/validation-rules'; import { defineRule, Form } from 'vee-validate'; import { @@ -305,6 +305,11 @@ export default { } }); + if (hasYMMExperimentBailoutSettingEnabled()) { + this.navigateBailout(bailoutMessage.YMMNotFound()); + return; + } + return this.navigateForward(); }, async navigateForward() { diff --git a/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue b/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue index 6e97bbf1..244865ba 100644 --- a/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue +++ b/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue @@ -15,8 +15,8 @@ // Import Other Supporting Files import { useMainStore } from '@/store'; -import { experimentSettings } from '@/constants/experiments'; import vinLookupMethodSelections from '@/constants/vin-lookup-methods'; +import { hasYMMExperimentSettingEnabled } from '@/helpers/vehicle-helper'; import settleAllPromises from '@/helpers/layout-helper'; import globalRules from '@/constants/global-rules'; @@ -67,9 +67,9 @@ export default { answers.splice(homeAddressIndex, 1); } - const ymmsPageEnabled = this.getSettingValue(experimentSettings.ISS_YMMS_VIN_REQUIRED_PAGE_ENABLED) === 'true'; + const ymmsExperimentEnabled = hasYMMExperimentSettingEnabled(); const isVinRequired = useMainStore().order.vehicle.vinRequired; - if (isVinRequired && ymmsPageEnabled) { + if (isVinRequired && ymmsExperimentEnabled) { const vinIndex = answers.findIndex(answer => answer.Name === vinLookupMethodSelections.NOVIN); if (vinIndex >= 0) { answers.splice(vinIndex, 1); diff --git a/src/mixins/vin-pages-mixin.js b/src/mixins/vin-pages-mixin.js index 56a423f8..c189471b 100644 --- a/src/mixins/vin-pages-mixin.js +++ b/src/mixins/vin-pages-mixin.js @@ -1,7 +1,7 @@ import { useMainStore } from '@/store'; import vehicleQuestionsMixin from '@/mixins/vehicle-questions-mixin'; -import { experimentSettings } from '@/constants/experiments'; import bailoutMessage from '@/constants/bailoutMessage'; +import { hasYMMExperimentBailoutSettingEnabled, hasYMMExperimentPageSettingEnabled, hasYMMExperimentSettingEnabled } from '@/helpers/vehicle-helper'; export default { methods: { @@ -16,24 +16,27 @@ export default { vehicleQuestionsMixin.methods.navigateForward(partsOrQuestions, this); }, async handleVinRequiredVehicle(vin) { - if (!this.mainStore.order.vehicle.vinRequired) { + if (!this.mainStore.order.vehicle.vinRequired || !hasYMMExperimentSettingEnabled()) { return false; } this.mainStore.order.vehicle.vin = vin; - if (this.hasSettingEqualTo(experimentSettings.ISS_YMMS_VIN_REQUIRED_BAILOUT_ENABLED, 'true')) { + if (hasYMMExperimentBailoutSettingEnabled()) { this.navigateBailout(bailoutMessage.YMMNotFound()); return true; } - const partsOrQuestionsResponse = await this.getPartsOrQuestionsV2(); - if (partsOrQuestionsResponse.data.partsOrQuestions.length === 0) { - this.navigateBailout(bailoutMessage.YMMNotFound('No Parts Returned')); + if (hasYMMExperimentPageSettingEnabled()) { + const partsOrQuestionsResponse = await useMainStore().getPartsOrQuestionsV2(); + if (partsOrQuestionsResponse.data.partsOrQuestions.length === 0) { + this.navigateBailout(bailoutMessage.YMMNotFound('No Parts Returned')); + return true; + } + + await vehicleQuestionsMixin.methods.navigateForward(partsOrQuestionsResponse.data.partsOrQuestions, this); return true; } - - await this.navigateForward(partsOrQuestionsResponse.data.partsOrQuestions, this); - return true; + return false; } } };