Merge branch 'release/2025.04.24' into feature/CASH-188
This commit is contained in:
commit
0b4bd2ca69
17 changed files with 53 additions and 380 deletions
|
|
@ -5,6 +5,7 @@
|
||||||
:class="[
|
:class="[
|
||||||
this.buttonLabelSubCopy ? 'has-subheader' : '',
|
this.buttonLabelSubCopy ? 'has-subheader' : '',
|
||||||
this.additionalButtonData.isInsuranceSelected ? 'is-insurance' : '',
|
this.additionalButtonData.isInsuranceSelected ? 'is-insurance' : '',
|
||||||
|
this.hasPackageDiscount() ? 'has-package-discount' : '',
|
||||||
]"
|
]"
|
||||||
for="testradio">
|
for="testradio">
|
||||||
<div class="package-specs">
|
<div class="package-specs">
|
||||||
|
|
@ -54,12 +55,7 @@
|
||||||
v-html="this.buttonFooterCopy"></div>
|
v-html="this.buttonFooterCopy"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div v-if="hasPackageDiscount()" class="special-save-box">
|
||||||
v-if="
|
|
||||||
this.additionalButtonData.servicePackageDiscount &&
|
|
||||||
this.additionalButtonData.Text
|
|
||||||
"
|
|
||||||
class="special-save-box">
|
|
||||||
<span v-html="this.additionalButtonData.Text"></span>
|
<span v-html="this.additionalButtonData.Text"></span>
|
||||||
</div>
|
</div>
|
||||||
<span class="pricing-info">
|
<span class="pricing-info">
|
||||||
|
|
@ -78,7 +74,7 @@
|
||||||
<span>in 4 interest-free payments</span>
|
<span>in 4 interest-free payments</span>
|
||||||
<div>
|
<div>
|
||||||
or
|
or
|
||||||
<span v-html="this.buttonAuxillaryCopy"></span>
|
<span v-html="truncatedSinglePayment()"></span>
|
||||||
<span
|
<span
|
||||||
class="strikethrough-price"
|
class="strikethrough-price"
|
||||||
v-if="shouldDisplayStrikeThroughPrice"
|
v-if="shouldDisplayStrikeThroughPrice"
|
||||||
|
|
@ -141,6 +137,14 @@ export default {
|
||||||
const decimalPrice = parseFloat(this.buttonAuxillaryCopy.replace("$", ""));
|
const decimalPrice = parseFloat(this.buttonAuxillaryCopy.replace("$", ""));
|
||||||
return "$" + (decimalPrice / 4).toFixed(2);
|
return "$" + (decimalPrice / 4).toFixed(2);
|
||||||
},
|
},
|
||||||
|
truncatedSinglePayment() {
|
||||||
|
return "$" + Math.trunc(this.buttonAuxillaryCopy.replace("$", ""));
|
||||||
|
},
|
||||||
|
hasPackageDiscount() {
|
||||||
|
return (
|
||||||
|
this.additionalButtonData.servicePackageDiscount && this.additionalButtonData.Text
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -209,12 +213,6 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.has-subheader {
|
&.has-subheader {
|
||||||
min-height: 150px;
|
|
||||||
|
|
||||||
&.is-insurance {
|
|
||||||
min-height: 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
& > .package-specs {
|
& > .package-specs {
|
||||||
& > div:first-of-type {
|
& > div:first-of-type {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -222,6 +220,10 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.has-package-discount {
|
||||||
|
min-height: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "";
|
content: "";
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-inner-wrapper">
|
<div class="footer-inner-wrapper">
|
||||||
|
<p class="mx-3 my-0 pb-1">© 2025 Safelite Group</p>
|
||||||
<textLink
|
<textLink
|
||||||
linkType="newWindowLink"
|
linkType="newWindowLink"
|
||||||
text="Terms of service"
|
text="Terms of service"
|
||||||
|
|
@ -32,11 +33,6 @@
|
||||||
linkType="navigation"
|
linkType="navigation"
|
||||||
text="Cookie preferences"
|
text="Cookie preferences"
|
||||||
href="javascript:OneTrust.ToggleInfoDisplay();" />
|
href="javascript:OneTrust.ToggleInfoDisplay();" />
|
||||||
<textLink
|
|
||||||
linkType="newWindowLink"
|
|
||||||
text="Warranty"
|
|
||||||
href="//www.safelite.com/national-lifetime-warranty"
|
|
||||||
target="_blank" />
|
|
||||||
<textLink
|
<textLink
|
||||||
linkType="newWindowLink"
|
linkType="newWindowLink"
|
||||||
text="Notice at collection"
|
text="Notice at collection"
|
||||||
|
|
@ -83,6 +79,14 @@ export default {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
color: $black;
|
||||||
|
@include media-breakpoint-up(md) {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
:deep(a) {
|
:deep(a) {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
&.new-window-link {
|
&.new-window-link {
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ export class Logger {
|
||||||
applicationConfig.CONSUMER_CF_DISTRO + applicationConfig.FRONTEND_LOGGER_PATH;
|
applicationConfig.CONSUMER_CF_DISTRO + applicationConfig.FRONTEND_LOGGER_PATH;
|
||||||
const headers = {
|
const headers = {
|
||||||
[headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings),
|
[headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings),
|
||||||
|
[headerKeys.APPLICATION_NAME]: applicationConfig.APPLICATION_NAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
axios({
|
axios({
|
||||||
|
|
|
||||||
|
|
@ -182,39 +182,6 @@ describe("address-lookup.vue", () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.findComponent({ ref: "alertVinNotFound" }).isVisible()).toBe(true);
|
expect(wrapper.findComponent({ ref: "alertVinNotFound" }).isVisible()).toBe(true);
|
||||||
});
|
});
|
||||||
test("should show the AlertNoService when displayNoServiceAlert is true", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: true,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set displayNoServiceAlert to true
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: true });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(true);
|
|
||||||
});
|
|
||||||
test("should hide the AlertNoService when displayNoServiceAlert is false", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: false,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
// Ensure displayNoServiceAlert is false
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: false });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is not rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("navigation", () => {
|
describe("navigation", () => {
|
||||||
|
|
@ -774,18 +741,6 @@ function setupMocks({
|
||||||
wrapper.vm.setCmsContent = jest.fn();
|
wrapper.vm.setCmsContent = jest.fn();
|
||||||
wrapper.vm.$refs.navbar.updateButtonText = jest.fn();
|
wrapper.vm.$refs.navbar.updateButtonText = jest.fn();
|
||||||
wrapper.vm.$refs.navbar.removeLoader = jest.fn();
|
wrapper.vm.$refs.navbar.removeLoader = jest.fn();
|
||||||
const closestShops = {
|
|
||||||
data: {
|
|
||||||
providers: [
|
|
||||||
{ id: 1, name: "Shop 1" },
|
|
||||||
{ id: 2, name: "Shop 2" },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => {
|
|
||||||
return new Promise((resolve) => resolve(closestShops));
|
|
||||||
});
|
|
||||||
|
|
||||||
return { wrapper };
|
return { wrapper };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,20 +81,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
<alert
|
|
||||||
ref="AlertNoService"
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
class="my-4"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
v-bind:isDismissible="false" />
|
|
||||||
<navbar
|
<navbar
|
||||||
cmsWidgetName="FunnelFooterWidget"
|
cmsWidgetName="FunnelFooterWidget"
|
||||||
ref="navbar"
|
ref="navbar"
|
||||||
:isDisabled="!meta.valid"
|
:isDisabled="!meta.valid"
|
||||||
@ForwardClicked="forwardButtonAction"
|
@ForwardClicked="forwardButtonAction"
|
||||||
@back-clicked="backButtonAction"
|
@back-clicked="backButtonAction"
|
||||||
:isForwardActionDisabled="!meta.valid || displayNoServiceAlert" />
|
:isForwardActionDisabled="!meta.valid" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -171,8 +164,6 @@ export default {
|
||||||
emailOrSms: this.getEmailOrSmsFromStore(),
|
emailOrSms: this.getEmailOrSmsFromStore(),
|
||||||
},
|
},
|
||||||
serviceZipCode: this.getServiceZipFromStore(),
|
serviceZipCode: this.getServiceZipFromStore(),
|
||||||
carId: this.getCarIdfromStore(),
|
|
||||||
isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(),
|
|
||||||
displayNonServiceableZipAlert: false,
|
displayNonServiceableZipAlert: false,
|
||||||
displayVinNotFoundAlert: false,
|
displayVinNotFoundAlert: false,
|
||||||
displayMatchedDifferentVehicleAlert: false,
|
displayMatchedDifferentVehicleAlert: false,
|
||||||
|
|
@ -184,7 +175,6 @@ export default {
|
||||||
displayInvalidZipAlert: false,
|
displayInvalidZipAlert: false,
|
||||||
showServiceZipField: this.getServiceZipFromStore(),
|
showServiceZipField: this.getServiceZipFromStore(),
|
||||||
isZipServiceable: false,
|
isZipServiceable: false,
|
||||||
displayNoServiceAlert: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -229,19 +219,6 @@ export default {
|
||||||
getServiceZipFromStore() {
|
getServiceZipFromStore() {
|
||||||
return this.$store.getters.order.serviceLocation.zipCode;
|
return this.$store.getters.order.serviceLocation.zipCode;
|
||||||
},
|
},
|
||||||
getCarIdfromStore() {
|
|
||||||
return store.getters.vehicle.carId;
|
|
||||||
},
|
|
||||||
getIsVehicleHeavyTruckFromStore() {
|
|
||||||
return store.getters.isHeavyTruckVehicle;
|
|
||||||
},
|
|
||||||
async findClosestApplicableShops() {
|
|
||||||
return await this.dispatchStoreActionWithLogging(
|
|
||||||
storeActions.GET_CLOSEST_APPLICABLE_SHOPS,
|
|
||||||
{ zip: this.serviceZipCode, carId: this.carId },
|
|
||||||
"address-lookup"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
async forwardButtonAction() {
|
async forwardButtonAction() {
|
||||||
this.resetWarningsAndErrors();
|
this.resetWarningsAndErrors();
|
||||||
|
|
||||||
|
|
@ -301,17 +278,6 @@ export default {
|
||||||
return this.$refs.navbar.removeLoader();
|
return this.$refs.navbar.removeLoader();
|
||||||
}
|
}
|
||||||
this.displayInvalidZipAlert = false;
|
this.displayInvalidZipAlert = false;
|
||||||
if (this.serviceZipCode != null && this.isHeavyTruck) {
|
|
||||||
const closestShops = await this.findClosestApplicableShops(
|
|
||||||
this.serviceZipCode,
|
|
||||||
this.carId
|
|
||||||
);
|
|
||||||
this.displayNoServiceAlert = !closestShops?.data?.providers?.length;
|
|
||||||
if (this.displayNoServiceAlert) {
|
|
||||||
return this.$refs.navbar.removeLoader();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const carsFound = resultMap.vinLookupResponse.vinVehicles;
|
const carsFound = resultMap.vinLookupResponse.vinVehicles;
|
||||||
|
|
||||||
// Handle cases for different amounts of VINS found for the address.
|
// Handle cases for different amounts of VINS found for the address.
|
||||||
|
|
@ -463,7 +429,6 @@ export default {
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
this.displayMatchedDifferentVehicleAlert = false;
|
this.displayMatchedDifferentVehicleAlert = false;
|
||||||
this.displayVinLookupByHomeAddressNotAllowedAlert = false;
|
this.displayVinLookupByHomeAddressNotAllowedAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -515,7 +480,6 @@ export default {
|
||||||
handler(newValue) {
|
handler(newValue) {
|
||||||
// If they modify the service zip code, then hide the error message.
|
// If they modify the service zip code, then hide the error message.
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
showServiceZipField: {
|
showServiceZipField: {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,10 @@
|
||||||
@back-clicked="backButtonAction"
|
@back-clicked="backButtonAction"
|
||||||
@ForwardClicked="forwardButtonAction" />
|
@ForwardClicked="forwardButtonAction" />
|
||||||
|
|
||||||
<textBlock cmsWidgetName="DisclaimerCopyWidget" typeStyle="caption" />
|
<textBlock
|
||||||
|
class="mb-5"
|
||||||
|
cmsWidgetName="DisclaimerCopyWidget"
|
||||||
|
typeStyle="caption" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -203,3 +203,9 @@ export default {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.ui-autocomplete {
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -611,42 +611,6 @@ describe("license-plate-lookup.vue", () => {
|
||||||
expect(arePagePrerequisitesValid).toBe(false);
|
expect(arePagePrerequisitesValid).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("alerts", () => {
|
|
||||||
test("should show the AlertNoService when displayNoServiceAlert is true", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: true,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set displayNoServiceAlert to true
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: true });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(true);
|
|
||||||
});
|
|
||||||
test("should hide the AlertNoService when displayNoServiceAlert is false", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: false,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
// Ensure displayNoServiceAlert is false
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: false });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is not rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function setupMocks({
|
function setupMocks({
|
||||||
|
|
@ -752,18 +716,5 @@ function setupMocks({
|
||||||
wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => "");
|
wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => "");
|
||||||
wrapper.vm.$refs.navbar.updateButtonText = jest.fn();
|
wrapper.vm.$refs.navbar.updateButtonText = jest.fn();
|
||||||
wrapper.vm.$refs.navbar.removeLoader = jest.fn();
|
wrapper.vm.$refs.navbar.removeLoader = jest.fn();
|
||||||
const closestShops = {
|
|
||||||
data: {
|
|
||||||
providers: [
|
|
||||||
{ id: 1, name: "Shop 1" },
|
|
||||||
{ id: 2, name: "Shop 2" },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => {
|
|
||||||
return new Promise((resolve) => resolve(closestShops));
|
|
||||||
});
|
|
||||||
|
|
||||||
return { wrapper, apiPromise };
|
return { wrapper, apiPromise };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,14 +77,6 @@
|
||||||
alertClass="alert-warning"
|
alertClass="alert-warning"
|
||||||
v-bind:isDismissible="false" />
|
v-bind:isDismissible="false" />
|
||||||
|
|
||||||
<alert
|
|
||||||
ref="AlertNoService"
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
class="my-4"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
v-bind:isDismissible="false" />
|
|
||||||
|
|
||||||
<navbar
|
<navbar
|
||||||
ref="navbar"
|
ref="navbar"
|
||||||
cmsWidgetName="FunnelFooterWidget"
|
cmsWidgetName="FunnelFooterWidget"
|
||||||
|
|
@ -166,8 +158,6 @@ export default {
|
||||||
registrationZipCode: this.getRegistrationZipFromStore() ?? this.$route.query.zipcode,
|
registrationZipCode: this.getRegistrationZipFromStore() ?? this.$route.query.zipcode,
|
||||||
emailOrSms: this.getEmailOrSmsFromStore(),
|
emailOrSms: this.getEmailOrSmsFromStore(),
|
||||||
serviceZipCode: this.getServiceZipFromStore(),
|
serviceZipCode: this.getServiceZipFromStore(),
|
||||||
carId: this.getCarIdfromStore(),
|
|
||||||
isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(),
|
|
||||||
displayNonServiceableZipAlert: false,
|
displayNonServiceableZipAlert: false,
|
||||||
displayVinNotFoundAlert: false,
|
displayVinNotFoundAlert: false,
|
||||||
displayMatchedDifferentVehicleAlert: false,
|
displayMatchedDifferentVehicleAlert: false,
|
||||||
|
|
@ -178,7 +168,6 @@ export default {
|
||||||
displayInvalidZipAlert: false,
|
displayInvalidZipAlert: false,
|
||||||
showServiceZipField: this.getServiceZipFromStore(),
|
showServiceZipField: this.getServiceZipFromStore(),
|
||||||
isZipServiceable: false,
|
isZipServiceable: false,
|
||||||
displayNoServiceAlert: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -211,19 +200,6 @@ export default {
|
||||||
getServiceZipFromStore() {
|
getServiceZipFromStore() {
|
||||||
return this.$store.getters.order.serviceLocation.zipCode;
|
return this.$store.getters.order.serviceLocation.zipCode;
|
||||||
},
|
},
|
||||||
getCarIdfromStore() {
|
|
||||||
return store.getters.vehicle.carId;
|
|
||||||
},
|
|
||||||
getIsVehicleHeavyTruckFromStore() {
|
|
||||||
return store.getters.isHeavyTruckVehicle;
|
|
||||||
},
|
|
||||||
async findClosestApplicableShops() {
|
|
||||||
return await this.dispatchStoreActionWithLogging(
|
|
||||||
storeActions.GET_CLOSEST_APPLICABLE_SHOPS,
|
|
||||||
{ zip: this.serviceZipCode, carId: this.carId },
|
|
||||||
"license-plate-lookup"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
async forwardButtonAction() {
|
async forwardButtonAction() {
|
||||||
this.resetWarningsAndErrors();
|
this.resetWarningsAndErrors();
|
||||||
|
|
||||||
|
|
@ -281,17 +257,6 @@ export default {
|
||||||
this.displayInvalidZipAlert = true;
|
this.displayInvalidZipAlert = true;
|
||||||
return this.$refs.navbar.removeLoader();
|
return this.$refs.navbar.removeLoader();
|
||||||
}
|
}
|
||||||
if (this.isHeavyTruck) {
|
|
||||||
const closestShops = await this.findClosestApplicableShops(
|
|
||||||
this.serviceZipCode,
|
|
||||||
this.carId
|
|
||||||
);
|
|
||||||
this.displayNoServiceAlert = !closestShops?.data?.providers?.length;
|
|
||||||
if (this.displayNoServiceAlert) {
|
|
||||||
return this.$refs.navbar.removeLoader();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the CarId has changed.
|
// Check if the CarId has changed.
|
||||||
this.isCarIdDifferent =
|
this.isCarIdDifferent =
|
||||||
vinLookup.data.vehicle.carId !== this.$store.getters.vehicle.carId;
|
vinLookup.data.vehicle.carId !== this.$store.getters.vehicle.carId;
|
||||||
|
|
@ -406,7 +371,6 @@ export default {
|
||||||
this.displayMatchedDifferentVehicleAlert = false;
|
this.displayMatchedDifferentVehicleAlert = false;
|
||||||
this.displayVinLookupByHomeAddressNotAllowedAlert = false;
|
this.displayVinLookupByHomeAddressNotAllowedAlert = false;
|
||||||
this.displayInvalidZipAlert = false;
|
this.displayInvalidZipAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -451,7 +415,6 @@ export default {
|
||||||
serviceZipCode() {
|
serviceZipCode() {
|
||||||
// If they modify the service zip code, then hide the error message.
|
// If they modify the service zip code, then hide the error message.
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
this.$refs.navbar.updateButtonText(
|
this.$refs.navbar.updateButtonText(
|
||||||
this.getCmsContent("FunnelFooterWidget", "ForwardButtonText")
|
this.getCmsContent("FunnelFooterWidget", "ForwardButtonText")
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -275,8 +275,8 @@ export default {
|
||||||
const emailFromStore = store.getters.order.customer.emailAddress;
|
const emailFromStore = store.getters.order.customer.emailAddress;
|
||||||
const isEmailInStoreOnPageLoad = emailFromStore?.length > 0;
|
const isEmailInStoreOnPageLoad = emailFromStore?.length > 0;
|
||||||
const isPopupSkipped =
|
const isPopupSkipped =
|
||||||
store.getters.pageData(fmgPageValues.QUOTE).saveProgressPopupSkipped === true;
|
store.getters.pageData(fmgPageValues.QUOTE)?.saveProgressPopupSkipped === true;
|
||||||
const showSaveProgressPopup = isEmailInStoreOnPageLoad || isPopupSkipped ? false : true;
|
const showSaveProgressPopup = !(isEmailInStoreOnPageLoad || isPopupSkipped);
|
||||||
const showSaveProgressModal = isEmailInStoreOnPageLoad ? false : true;
|
const showSaveProgressModal = isEmailInStoreOnPageLoad ? false : true;
|
||||||
const shouldSkipToInsurance =
|
const shouldSkipToInsurance =
|
||||||
getBoolFromString(
|
getBoolFromString(
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ describe("appointment-type-question.vue", () => {
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Should display only the In-Shop answer when only in-shop service is available", async () => {
|
it("Should display only the In-Shop and Drop-Off answers when only in-shop service is available", async () => {
|
||||||
// Arrange/Act
|
// Arrange/Act
|
||||||
const { wrapper } = setupMocks({
|
const { wrapper } = setupMocks({
|
||||||
mixins: [mockMixin],
|
mixins: [mockMixin],
|
||||||
|
|
@ -108,7 +108,6 @@ describe("appointment-type-question.vue", () => {
|
||||||
cmsWidgetName: cmsWidgetName,
|
cmsWidgetName: cmsWidgetName,
|
||||||
isServiceableInshop: true,
|
isServiceableInshop: true,
|
||||||
isServiceableMobile: false,
|
isServiceableMobile: false,
|
||||||
isServiceableDropoff: false,
|
|
||||||
},
|
},
|
||||||
mountOptions: {
|
mountOptions: {
|
||||||
attachTo: document.body,
|
attachTo: document.body,
|
||||||
|
|
@ -124,6 +123,13 @@ describe("appointment-type-question.vue", () => {
|
||||||
SubWidgetName: "",
|
SubWidgetName: "",
|
||||||
Text: "In-shop",
|
Text: "In-shop",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
AnswerImageUrl: "",
|
||||||
|
Name: "Dropoff",
|
||||||
|
SubText: "",
|
||||||
|
SubWidgetName: "",
|
||||||
|
Text: "Drop-off",
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ export default {
|
||||||
cmsWidgetName: String,
|
cmsWidgetName: String,
|
||||||
isServiceableMobile: Boolean,
|
isServiceableMobile: Boolean,
|
||||||
isServiceableInshop: Boolean,
|
isServiceableInshop: Boolean,
|
||||||
isServiceableDropoff: Boolean,
|
|
||||||
mobileFeeApplies: Boolean,
|
mobileFeeApplies: Boolean,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -46,7 +45,7 @@ export default {
|
||||||
const shouldShowMobile = this.isServiceableMobile;
|
const shouldShowMobile = this.isServiceableMobile;
|
||||||
const shouldShowInshop = this.isServiceableInshop;
|
const shouldShowInshop = this.isServiceableInshop;
|
||||||
const shouldShowDropoff =
|
const shouldShowDropoff =
|
||||||
this.isServiceableDropoff && !this.$store.getters.damage.isRepair;
|
this.isServiceableInshop && !this.$store.getters.damage.isRepair;
|
||||||
|
|
||||||
var answers = this.answersFromCms
|
var answers = this.answersFromCms
|
||||||
? this.answersFromCms.filter((answer) => {
|
? this.answersFromCms.filter((answer) => {
|
||||||
|
|
@ -78,11 +77,6 @@ export default {
|
||||||
isMobileOnly() {
|
isMobileOnly() {
|
||||||
return this.isServiceableMobile && !this.isServiceableInshop;
|
return this.isServiceableMobile && !this.isServiceableInshop;
|
||||||
},
|
},
|
||||||
isInshopOnly() {
|
|
||||||
return (
|
|
||||||
this.isServiceableInshop && !this.isServiceableMobile && !this.isServiceableDropoff
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
answersToDisplay: {
|
answersToDisplay: {
|
||||||
|
|
@ -92,7 +86,7 @@ export default {
|
||||||
newValue.length == 1 &&
|
newValue.length == 1 &&
|
||||||
newValue.findIndex((answer) => answer.Name == "Mobile") != -1
|
newValue.findIndex((answer) => answer.Name == "Mobile") != -1
|
||||||
) {
|
) {
|
||||||
this.selectedValue = "Mobile";
|
this.selectedValues = "Mobile";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
|
@ -100,14 +94,7 @@ export default {
|
||||||
isMobileOnly: {
|
isMobileOnly: {
|
||||||
handler(newValue) {
|
handler(newValue) {
|
||||||
if (newValue) {
|
if (newValue) {
|
||||||
this.selectedValue = "Mobile";
|
this.selectedValues = "Mobile";
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
isInshopOnly: {
|
|
||||||
handler(newValue) {
|
|
||||||
if (newValue) {
|
|
||||||
this.selectedValue = "Inshop";
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,6 @@
|
||||||
v-show="isAppointmentTypeDisplayed"
|
v-show="isAppointmentTypeDisplayed"
|
||||||
:isServiceableMobile="isServiceableMobile"
|
:isServiceableMobile="isServiceableMobile"
|
||||||
:isServiceableInshop="isServiceableInshop"
|
:isServiceableInshop="isServiceableInshop"
|
||||||
:isServiceableDropoff="isServiceableDropoff"
|
|
||||||
:isDisplayed="isAppointmentTypeDisplayed"
|
:isDisplayed="isAppointmentTypeDisplayed"
|
||||||
:mobileFeeApplies="mobileFeeApplies"
|
:mobileFeeApplies="mobileFeeApplies"
|
||||||
ref="appointmentTypeQuestion"
|
ref="appointmentTypeQuestion"
|
||||||
|
|
@ -197,8 +196,6 @@ export default {
|
||||||
isVehicleProtected: this.getIsVehicleProtectedFromStore(),
|
isVehicleProtected: this.getIsVehicleProtectedFromStore(),
|
||||||
isGlassServiceableInshop: null,
|
isGlassServiceableInshop: null,
|
||||||
isRecalibrationServiceableInshop: null,
|
isRecalibrationServiceableInshop: null,
|
||||||
isGlassServiceableDropoff: null,
|
|
||||||
isRecalibrationServiceableDropoff: null,
|
|
||||||
isGlassServiceableMobile: null,
|
isGlassServiceableMobile: null,
|
||||||
isRecalibrationServiceableMobile: null,
|
isRecalibrationServiceableMobile: null,
|
||||||
selectedAppointmentType: this.getSelectedAppointmentType(),
|
selectedAppointmentType: this.getSelectedAppointmentType(),
|
||||||
|
|
@ -357,13 +354,6 @@ export default {
|
||||||
return this.isGlassServiceableInshop;
|
return this.isGlassServiceableInshop;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isServiceableDropoff() {
|
|
||||||
if (this.isRecalibrationServiceableDropoff !== null) {
|
|
||||||
return this.isGlassServiceableDropoff && this.isRecalibrationServiceableDropoff;
|
|
||||||
} else {
|
|
||||||
return this.isGlassServiceableDropoff;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
isShopQuestionDisplayed() {
|
isShopQuestionDisplayed() {
|
||||||
return (
|
return (
|
||||||
this.selectedAppointmentType === "Inshop" ||
|
this.selectedAppointmentType === "Inshop" ||
|
||||||
|
|
@ -569,9 +559,6 @@ export default {
|
||||||
this.isGlassServiceableInshop = serviceabilityDetails.isGlassServiceableInshop;
|
this.isGlassServiceableInshop = serviceabilityDetails.isGlassServiceableInshop;
|
||||||
this.isRecalibrationServiceableInshop =
|
this.isRecalibrationServiceableInshop =
|
||||||
serviceabilityDetails.isRecalibrationServiceableInshop;
|
serviceabilityDetails.isRecalibrationServiceableInshop;
|
||||||
this.isGlassServiceableDropoff = serviceabilityDetails.isGlassServiceableDropoff;
|
|
||||||
this.isRecalibrationServiceableDropoff =
|
|
||||||
serviceabilityDetails.isRecalibrationServiceableDropoff;
|
|
||||||
this.isGlassServiceableMobile = serviceabilityDetails.isGlassServiceableMobile;
|
this.isGlassServiceableMobile = serviceabilityDetails.isGlassServiceableMobile;
|
||||||
this.isRecalibrationServiceableMobile =
|
this.isRecalibrationServiceableMobile =
|
||||||
serviceabilityDetails.isRecalibrationServiceableMobile;
|
serviceabilityDetails.isRecalibrationServiceableMobile;
|
||||||
|
|
|
||||||
|
|
@ -415,33 +415,6 @@ describe("service-zip.vue", () => {
|
||||||
expect(wrapper.vm.displayInvalidZipAlert).toBe(false);
|
expect(wrapper.vm.displayInvalidZipAlert).toBe(false);
|
||||||
expect(wrapper.vm.displayNonServiceableZipAlert).toBe(false);
|
expect(wrapper.vm.displayNonServiceableZipAlert).toBe(false);
|
||||||
});
|
});
|
||||||
test("should show the AlertNoService when displayNoServiceAlert is true", async () => {
|
|
||||||
// Arrange
|
|
||||||
// no changes to store
|
|
||||||
applyMockStoreDataToGetters();
|
|
||||||
|
|
||||||
const wrapper = setupMocks({});
|
|
||||||
wrapper.vm.serviceZipCode = "12345";
|
|
||||||
|
|
||||||
// Act
|
|
||||||
wrapper.vm.displayNoServiceAlert = true;
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is rendered
|
|
||||||
expect(wrapper.vm.displayNoServiceAlert).toBe(true);
|
|
||||||
});
|
|
||||||
test("should hide the AlertNoService when displayNoServiceAlert is false", async () => {
|
|
||||||
// Arrange
|
|
||||||
// no changes to store
|
|
||||||
applyMockStoreDataToGetters();
|
|
||||||
|
|
||||||
const wrapper = setupMocks({});
|
|
||||||
wrapper.vm.serviceZipCode = "12345";
|
|
||||||
//ACT
|
|
||||||
wrapper.vm.displayNoServiceAlert = false;
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is rendered
|
|
||||||
expect(wrapper.vm.displayNoServiceAlert).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -538,16 +511,5 @@ function setupMocks({ customMountOptions, customZipQuery, customZipDataResponse
|
||||||
];
|
];
|
||||||
|
|
||||||
const wrapper = shallowMount(serviceZip, mountOptions);
|
const wrapper = shallowMount(serviceZip, mountOptions);
|
||||||
wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => {
|
|
||||||
return Promise.resolve({
|
|
||||||
data: {
|
|
||||||
providers: [
|
|
||||||
{ id: 1, name: "Shop 1" },
|
|
||||||
{ id: 2, name: "Shop 2" },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,18 +47,10 @@
|
||||||
v-if="displayNonServiceableZipAlert"
|
v-if="displayNonServiceableZipAlert"
|
||||||
alertClass="alert-danger" />
|
alertClass="alert-danger" />
|
||||||
|
|
||||||
<alert
|
|
||||||
ref="AlertNoService"
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
class="my-4"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
v-bind:isDismissible="false" />
|
|
||||||
|
|
||||||
<navbar
|
<navbar
|
||||||
cmsWidgetName="FunnelFooterWidget"
|
cmsWidgetName="FunnelFooterWidget"
|
||||||
ref="navbar"
|
ref="navbar"
|
||||||
:isForwardActionDisabled="!meta.valid || displayNoServiceAlert"
|
:isForwardActionDisabled="!meta.valid"
|
||||||
@back-clicked="backButtonAction"
|
@back-clicked="backButtonAction"
|
||||||
@ForwardClicked="forwardButtonAction" />
|
@ForwardClicked="forwardButtonAction" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -118,11 +110,8 @@ export default {
|
||||||
return {
|
return {
|
||||||
serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode,
|
serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode,
|
||||||
emailOrSms: this.getEmailOrSmsFromStore(),
|
emailOrSms: this.getEmailOrSmsFromStore(),
|
||||||
carId: this.getCarIdfromStore(),
|
|
||||||
isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(),
|
|
||||||
displayInvalidZipAlert: false,
|
displayInvalidZipAlert: false,
|
||||||
displayNonServiceableZipAlert: false,
|
displayNonServiceableZipAlert: false,
|
||||||
displayNoServiceAlert: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -195,19 +184,6 @@ export default {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
return store.getters.damage.isRepair || store.getters.damage.glassToReplace?.length > 0;
|
return store.getters.damage.isRepair || store.getters.damage.glassToReplace?.length > 0;
|
||||||
},
|
},
|
||||||
getCarIdfromStore() {
|
|
||||||
return store.getters.vehicle.carId;
|
|
||||||
},
|
|
||||||
getIsVehicleHeavyTruckFromStore() {
|
|
||||||
return store.getters.isHeavyTruckVehicle;
|
|
||||||
},
|
|
||||||
async findClosestApplicableShops() {
|
|
||||||
return await this.dispatchStoreActionWithLogging(
|
|
||||||
storeActions.GET_CLOSEST_APPLICABLE_SHOPS,
|
|
||||||
{ zip: this.serviceZipCode, carId: this.carId },
|
|
||||||
"service-zip"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
async backButtonAction() {
|
async backButtonAction() {
|
||||||
const skipVin = await skipVinLookup();
|
const skipVin = await skipVinLookup();
|
||||||
// route to move backwards
|
// route to move backwards
|
||||||
|
|
@ -276,16 +252,6 @@ export default {
|
||||||
return this.$refs.navbar.removeLoader();
|
return this.$refs.navbar.removeLoader();
|
||||||
}
|
}
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
if (this.isHeavyTruck) {
|
|
||||||
const closestShops = await this.findClosestApplicableShops(
|
|
||||||
this.serviceZipCode,
|
|
||||||
this.carId
|
|
||||||
);
|
|
||||||
this.displayNoServiceAlert = !closestShops?.data?.providers?.length;
|
|
||||||
if (this.displayNoServiceAlert) {
|
|
||||||
return this.$refs.navbar.removeLoader();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const payment = this.$store.getters.payment;
|
const payment = this.$store.getters.payment;
|
||||||
const policy = this.$store.getters.policy;
|
const policy = this.$store.getters.policy;
|
||||||
|
|
@ -343,7 +309,6 @@ export default {
|
||||||
watch: {
|
watch: {
|
||||||
serviceZipCode() {
|
serviceZipCode() {
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
|
|
||||||
|
|
@ -258,39 +258,6 @@ describe("vin-lookup.vue", () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.findAllComponents({ name: "alert" }).length).toBe(1);
|
expect(wrapper.findAllComponents({ name: "alert" }).length).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("should show the AlertNoService when displayNoServiceAlert is true", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: true,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
// Set displayNoServiceAlert to true
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: true });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(true);
|
|
||||||
});
|
|
||||||
test("should hide the AlertNoService when displayNoServiceAlert is false", async () => {
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
isZipServiceable: true,
|
|
||||||
displayNoServiceAlert: false,
|
|
||||||
lookupVinbyAddressResponse: {
|
|
||||||
isStatePermissible: true,
|
|
||||||
vinVehicles: [], // Return no vehicles
|
|
||||||
},
|
|
||||||
});
|
|
||||||
// Ensure displayNoServiceAlert is false
|
|
||||||
await wrapper.setData({ displayNoServiceAlert: false });
|
|
||||||
|
|
||||||
// Check if the AlertNoService component is not rendered
|
|
||||||
const alertNoService = wrapper.findComponent({ ref: "AlertNoService" });
|
|
||||||
expect(alertNoService.exists()).toBe(false);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("getVinFromImage", () => {
|
describe("getVinFromImage", () => {
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,7 @@
|
||||||
vinPopulatedOnPageLoad &&
|
vinPopulatedOnPageLoad &&
|
||||||
isInsuranceVerified &&
|
isInsuranceVerified &&
|
||||||
!displayInvalidZipAlert &&
|
!displayInvalidZipAlert &&
|
||||||
!displayNonServiceableZipAlert &&
|
!displayNonServiceableZipAlert
|
||||||
!displayNoServiceAlert
|
|
||||||
"
|
"
|
||||||
alertClass="alert-success" />
|
alertClass="alert-success" />
|
||||||
|
|
||||||
|
|
@ -108,23 +107,14 @@
|
||||||
vinPopulatedOnPageLoad &&
|
vinPopulatedOnPageLoad &&
|
||||||
!isInsuranceVerified &&
|
!isInsuranceVerified &&
|
||||||
!displayInvalidZipAlert &&
|
!displayInvalidZipAlert &&
|
||||||
!displayNonServiceableZipAlert &&
|
!displayNonServiceableZipAlert
|
||||||
!displayNoServiceAlert
|
|
||||||
"
|
"
|
||||||
alertClass="alert-success" />
|
alertClass="alert-success" />
|
||||||
|
|
||||||
<alert
|
|
||||||
ref="AlertNoService"
|
|
||||||
v-if="displayNoServiceAlert"
|
|
||||||
class="my-4"
|
|
||||||
cmsWidgetName="AlertNoServiceWidget"
|
|
||||||
alertClass="alert-danger"
|
|
||||||
v-bind:isDismissible="false" />
|
|
||||||
|
|
||||||
<navbar
|
<navbar
|
||||||
cmsWidgetName="FunnelFooterWidget"
|
cmsWidgetName="FunnelFooterWidget"
|
||||||
ref="navbar"
|
ref="navbar"
|
||||||
:isForwardActionDisabled="!meta.valid || displayNoServiceAlert"
|
:isForwardActionDisabled="!meta.valid"
|
||||||
@back-clicked="backButtonAction"
|
@back-clicked="backButtonAction"
|
||||||
@ForwardClicked="forwardButtonAction" />
|
@ForwardClicked="forwardButtonAction" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -207,8 +197,6 @@ export default {
|
||||||
vin: this.getVinFromStore(),
|
vin: this.getVinFromStore(),
|
||||||
serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode,
|
serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode,
|
||||||
emailOrSms: this.getEmailOrSmsFromStore(),
|
emailOrSms: this.getEmailOrSmsFromStore(),
|
||||||
carId: this.getCarIdfromStore(),
|
|
||||||
isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(),
|
|
||||||
isCarIdDifferent: false,
|
isCarIdDifferent: false,
|
||||||
customAlertData: {},
|
customAlertData: {},
|
||||||
previouslyEnteredCarId: "",
|
previouslyEnteredCarId: "",
|
||||||
|
|
@ -219,7 +207,6 @@ export default {
|
||||||
displayVinNotFoundAlert: false,
|
displayVinNotFoundAlert: false,
|
||||||
displayMatchedDifferentVehicleAlert: false,
|
displayMatchedDifferentVehicleAlert: false,
|
||||||
displayVinScanFailedAlert: false,
|
displayVinScanFailedAlert: false,
|
||||||
displayNoServiceAlert: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -235,12 +222,6 @@ export default {
|
||||||
getZipFromStore() {
|
getZipFromStore() {
|
||||||
return this.$store.getters.order.serviceLocation.zipCode;
|
return this.$store.getters.order.serviceLocation.zipCode;
|
||||||
},
|
},
|
||||||
getCarIdfromStore() {
|
|
||||||
return store.getters.vehicle.carId;
|
|
||||||
},
|
|
||||||
getIsVehicleHeavyTruckFromStore() {
|
|
||||||
return store.getters.isHeavyTruckVehicle;
|
|
||||||
},
|
|
||||||
attachCustomEvents() {
|
attachCustomEvents() {
|
||||||
this.prependActionToMethod(this, this.forwardButtonAction, () => {
|
this.prependActionToMethod(this, this.forwardButtonAction, () => {
|
||||||
this.pushEventToGA(
|
this.pushEventToGA(
|
||||||
|
|
@ -264,13 +245,6 @@ export default {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async findClosestApplicableShops() {
|
|
||||||
return await this.dispatchStoreActionWithLogging(
|
|
||||||
storeActions.GET_CLOSEST_APPLICABLE_SHOPS,
|
|
||||||
{ zip: this.serviceZipCode, carId: this.carId },
|
|
||||||
"vin-lookup"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
async forwardButtonAction() {
|
async forwardButtonAction() {
|
||||||
this.resetAlerts();
|
this.resetAlerts();
|
||||||
|
|
||||||
|
|
@ -303,18 +277,6 @@ export default {
|
||||||
return this.$refs.navbar.removeLoader();
|
return this.$refs.navbar.removeLoader();
|
||||||
}
|
}
|
||||||
this.displayInvalidZipAlert = false;
|
this.displayInvalidZipAlert = false;
|
||||||
if (this.isHeavyTruck) {
|
|
||||||
// If a VIN has already been found. Validate the Service Zip (in case of changes)
|
|
||||||
var closestShops = await this.findClosestApplicableShops(
|
|
||||||
this.serviceZipCode,
|
|
||||||
this.carId
|
|
||||||
);
|
|
||||||
this.displayNoServiceAlert = !closestShops?.data?.providers?.length;
|
|
||||||
if (this.displayNoServiceAlert) {
|
|
||||||
return this.$refs.navbar.removeLoader();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If either lookup fails, remove the loader and stop processing the page.
|
// If either lookup fails, remove the loader and stop processing the page.
|
||||||
if (!resultMap.vehicleLookupResponse || !resultMap.zipCodeData.isServiceable) {
|
if (!resultMap.vehicleLookupResponse || !resultMap.zipCodeData.isServiceable) {
|
||||||
// If the vehicle result is undefined, the vin entered was invalid.
|
// If the vehicle result is undefined, the vin entered was invalid.
|
||||||
|
|
@ -431,16 +393,6 @@ export default {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
closestShops = await this.findClosestApplicableShops(
|
|
||||||
this.serviceZipCode,
|
|
||||||
this.carId
|
|
||||||
);
|
|
||||||
this.displayNoServiceAlert = !closestShops?.data?.providers?.length;
|
|
||||||
if (this.displayNoServiceAlert) {
|
|
||||||
return this.$refs.navbar.removeLoader();
|
|
||||||
}
|
|
||||||
|
|
||||||
// if no value due to field being optional, blank both phone and email address
|
|
||||||
if (!this.emailOrSms) {
|
if (!this.emailOrSms) {
|
||||||
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
|
||||||
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
|
||||||
|
|
@ -522,7 +474,6 @@ export default {
|
||||||
this.displayInvalidZipAlert = false;
|
this.displayInvalidZipAlert = false;
|
||||||
this.displayVinNotFoundAlert = false;
|
this.displayVinNotFoundAlert = false;
|
||||||
this.displayVinScanFailedAlert = false;
|
this.displayVinScanFailedAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -599,7 +550,6 @@ export default {
|
||||||
},
|
},
|
||||||
serviceZipCode() {
|
serviceZipCode() {
|
||||||
this.displayNonServiceableZipAlert = false;
|
this.displayNonServiceableZipAlert = false;
|
||||||
this.displayNoServiceAlert = false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue