diff --git a/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js b/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js index 0e86c4143..99b200037 100644 --- a/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js +++ b/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js @@ -6,7 +6,7 @@ export async function getPricedMobileFeePart(serviceZipCode, pageNameToLog) { return null; } - const zipCodeData = await baseMixin.methods.getZipCodeData(serviceZipCode, pageNameToLog); + const zipCodeData = await getZipCodeData(serviceZipCode); // Get the Mobile Fee Part const mobileFeePart = await baseMixin.methods.dispatchStoreActionWithLogging( @@ -103,3 +103,7 @@ export async function getAvailabilityRating( return shopStatus; } + +export async function getZipCodeData(serviceZipCode) { + return await baseMixin.methods.getZipCodeData(serviceZipCode, "service-location"); +} diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index 786946f0d..fb34f3921 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -69,6 +69,15 @@ jest.mock( getShopProviderData: jest.fn((mockServiceZipCode) => { return mockGetShopProviderData(mockServiceZipCode); }), + getZipCodeData: jest.fn().mockImplementation(() => { + return Promise.resolve({ + containsMilitaryBase: false, + isServiceable: true, + isValid: true, + state: "testState", + zipCodeCtu: "testCTU", + }); + }), }) ); @@ -424,6 +433,7 @@ describe("service-location.vue", () => { }, selectedAppointmentType: "Mobile", providerData: { mobileProviderNumber: "01820" }, + isGlassServiceableMobile: true, }); const mobileLocationQuestionsComponent = wrapper.findComponent({ @@ -459,6 +469,7 @@ describe("service-location.vue", () => { isVehicleProtected: true, }; + wrapper.vm.closeModalAction = jest.fn(); // Act // Trigger the event @@ -483,6 +494,7 @@ describe("service-location.vue", () => { }, selectedAppointmentType: "Mobile", providerData: { mobileProviderNumber: "01820" }, + isGlassServiceableMobile: true, }); const mobileLocationQuestionsComponent = wrapper.findComponent({ @@ -532,6 +544,7 @@ describe("service-location.vue", () => { zipCodeCtu: "01526", }; + wrapper.vm.closeModalAction = jest.fn(); // Act // Trigger the event @@ -563,6 +576,7 @@ describe("service-location.vue", () => { }); mobileLocationQuestionsComponent.resetComponent = jest.fn(); wrapper.vm.forwardButtonAction = jest.fn(); + wrapper.vm.isServiceableMobile = true; const serviceZipCodeComponent = wrapper.findComponent({ ref: "serviceZipCodeQuestion", @@ -580,6 +594,7 @@ describe("service-location.vue", () => { isVehicleProtected: "YesAnswer", }; + wrapper.vm.closeModalAction = jest.fn(); // Act mobileLocationQuestionsComponent.vm.$emit( "setMobileLocationAndProceed", diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 698b75a40..7b89b847d 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -149,6 +149,7 @@ import { getPricedMobileFeePart, getServiceabilityDetails, getShopProviderData, + getZipCodeData, } from "@/layouts/service-location/helpers/service-location-helper/service-location-helper"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; import { applicationConfig } from "@/constants/application-config"; @@ -206,10 +207,7 @@ export default { const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); const serviceZipCode = store.getters.order.serviceLocation.zipCode; - const zipCodeDataPromise = baseMixin.methods.getZipCodeData( - serviceZipCode, - "service-location" - ); + const zipCodeDataPromise = getZipCodeData(serviceZipCode); const serviceabilityDetailsPromise = getServiceabilityDetails( serviceZipCode, @@ -475,17 +473,31 @@ export default { }, //creating async function as the computed property can not directly handle asynchronous operations or promises. async setMobileLocationQuestions(newValue) { - if (newValue.addressQuestions.zipCode !== this.zipCode) { - await getShopProviderData(newValue.addressQuestions.zipCode).then((result) => { - this.shopProviderData = result.data; - this.selectedProvider = new Provider( - this.shopProviderData.mobileProviderNumber - ); + var newZipCode = newValue.addressQuestions.zipCode; + if (newZipCode !== this.zipCode) { + await getShopProviderData(newZipCode).then((result) => { + if (this.isServiceableMobile) { + this.shopProviderData = result.data; + this.selectedProvider = new Provider( + this.shopProviderData.mobileProviderNumber + ); + } + }); + } + if (this.isServiceableMobile) { + this.setMobileLocation(newValue); + //proceed to next page + this.forwardButtonAction(); + } else { + this.closeModalAction("mobileLocationQuestions"); + await getZipCodeData(newZipCode).then((zipCodeData) => { + this.serviceZipCodeQuestion = { + state: zipCodeData.state, + zipCode: newZipCode, + zipCodeCtu: zipCodeData.zipCodeCtu, + }; }); } - this.setMobileLocation(newValue); - //proceed to next page - this.forwardButtonAction(); }, getServiceAddressFromStore() { return store.getters.order.serviceLocation.address; @@ -669,6 +681,9 @@ export default { openModalAction(modalName) { this.$refs[modalName].openModal(); }, + closeModalAction(modalName) { + this.$refs[modalName].closeModal(); + }, }, watch: { zipCode: {