Merge branch 'release/2024.11.21' into Feature/Digital/CSR-2066
This commit is contained in:
commit
d8c5c82876
50 changed files with 409 additions and 479 deletions
|
|
@ -32,7 +32,7 @@ module.exports = {
|
||||||
testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"],
|
testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"],
|
||||||
coverageThreshold: {
|
coverageThreshold: {
|
||||||
global: {
|
global: {
|
||||||
statements: 76,
|
statements: 75,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Uncomment this to avoid the massive amount of warnings we are getting for onSubmit and onInvalidSubmit
|
// Uncomment this to avoid the massive amount of warnings we are getting for onSubmit and onInvalidSubmit
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,6 @@
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet">
|
|
||||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
BIN
src/assets/fonts/averta-bold-webfont.woff
Normal file
BIN
src/assets/fonts/averta-bold-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-bold-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-bold-webfont.woff2
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-bolditalic-webfont.woff
Normal file
BIN
src/assets/fonts/averta-bolditalic-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-bolditalic-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-bolditalic-webfont.woff2
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-extrabold-webfont.woff
Normal file
BIN
src/assets/fonts/averta-extrabold-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-extrabold-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-extrabold-webfont.woff2
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-regular-webfont.woff
Normal file
BIN
src/assets/fonts/averta-regular-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-regular-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-regular-webfont.woff2
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-regularitalic-webfont.woff
Normal file
BIN
src/assets/fonts/averta-regularitalic-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-regularitalic-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-regularitalic-webfont.woff2
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-semibold-webfont.woff
Normal file
BIN
src/assets/fonts/averta-semibold-webfont.woff
Normal file
Binary file not shown.
BIN
src/assets/fonts/averta-semibold-webfont.woff2
Normal file
BIN
src/assets/fonts/averta-semibold-webfont.woff2
Normal file
Binary file not shown.
|
|
@ -57,6 +57,7 @@ const storeActions = {
|
||||||
GET_RECAL_PARTS_AND_SAVE_TO_LINE_ITEMS: "getRecalPartsAndSaveToLineItems",
|
GET_RECAL_PARTS_AND_SAVE_TO_LINE_ITEMS: "getRecalPartsAndSaveToLineItems",
|
||||||
|
|
||||||
// DEPENDENCY MUTATIONS
|
// DEPENDENCY MUTATIONS
|
||||||
|
RESET_VEHICLE_STATE_AND_DEPENDENCIES: "resetVehicleStateAndDependencies",
|
||||||
RESET_DAMAGE_STATE_AND_DEPENDENCIES: "resetDamageAndDependencies",
|
RESET_DAMAGE_STATE_AND_DEPENDENCIES: "resetDamageAndDependencies",
|
||||||
RESET_REGISTRATION_STATE_AND_DEPENDENCIES: "resetRegistrationAndDependencies",
|
RESET_REGISTRATION_STATE_AND_DEPENDENCIES: "resetRegistrationAndDependencies",
|
||||||
RESET_PARTS_STATE_AND_DEPENDENCIES: "resetPartsAndDependencies",
|
RESET_PARTS_STATE_AND_DEPENDENCIES: "resetPartsAndDependencies",
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,11 @@ export default {
|
||||||
resetForm,
|
resetForm,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isEnterClicked: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async validateAndEmit() {
|
async validateAndEmit() {
|
||||||
const validationResult = await this.validate();
|
const validationResult = await this.validate();
|
||||||
|
|
@ -84,9 +89,14 @@ export default {
|
||||||
},
|
},
|
||||||
async onEnter(e) {
|
async onEnter(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
if (this.isEnterClicked) return;
|
||||||
|
this.isEnterClicked = true;
|
||||||
document.getElementById("modalbtn")?.focus();
|
document.getElementById("modalbtn")?.focus();
|
||||||
this.$refs.modalButtonMain.clicked();
|
this.$refs.modalButtonMain.clicked();
|
||||||
document.getElementById(this.modalId)?.focus();
|
document.getElementById(this.modalId)?.focus();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.isEnterClicked = false;
|
||||||
|
}, 2000);
|
||||||
},
|
},
|
||||||
resetButtonStyle() {
|
resetButtonStyle() {
|
||||||
this.$refs.modalButtonMain?.resetButtonStyle();
|
this.$refs.modalButtonMain?.resetButtonStyle();
|
||||||
|
|
@ -156,7 +166,7 @@ export default {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
background-color: $gray-100;
|
background-color: $white;
|
||||||
}
|
}
|
||||||
&.modal-component {
|
&.modal-component {
|
||||||
.modal-dialog {
|
.modal-dialog {
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
v-if="
|
v-if="
|
||||||
!showCoverageAsVerified ||
|
!showCoverageAsVerified || cartItem.name === 'Recycling' ||
|
||||||
(showCoverageAsVerified && !cartItem.isCoveredByInsurance)
|
(showCoverageAsVerified && !cartItem.isCoveredByInsurance)
|
||||||
"
|
"
|
||||||
>{{
|
>{{
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
<span>{{ subtotalText }}</span>
|
<span>{{ subtotalText }}</span>
|
||||||
<span>{{ getLineItemAmount(subTotal, showCoverageAsPending) }}</span>
|
<span>{{ getLineItemAmount(subTotal, showCoverageAsPending) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="sales-tax">
|
<div class="sales-tax" v-show="showSalesTax">
|
||||||
<span>{{ salesTaxText }}</span>
|
<span>{{ salesTaxText }}</span>
|
||||||
<span>{{ getLineItemAmount(salesTax) }}</span>
|
<span>{{ getLineItemAmount(salesTax) }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -134,7 +134,8 @@
|
||||||
v-model="lineItems"
|
v-model="lineItems"
|
||||||
:addableVaps="availableVaps"
|
:addableVaps="availableVaps"
|
||||||
:pageName="pageName"
|
:pageName="pageName"
|
||||||
modalWidgetName="PromoModalWidget" />
|
modalWidgetName="PromoModalWidget"
|
||||||
|
@promoAdded="saveVaps" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -165,6 +166,7 @@ import baseMixin from "@/mixins/base-mixin.js";
|
||||||
import { deepClone } from "@/helpers/object-helper";
|
import { deepClone } from "@/helpers/object-helper";
|
||||||
import { getHighestFullySatisfiedTier, getPackageContents } from "@/helpers/service-package-helper";
|
import { getHighestFullySatisfiedTier, getPackageContents } from "@/helpers/service-package-helper";
|
||||||
import { getPromoCodeWithoutBundleIdentifier } from "@/helpers/promotions-helper";
|
import { getPromoCodeWithoutBundleIdentifier } from "@/helpers/promotions-helper";
|
||||||
|
import { storeActions } from "@/constants/store-actions";
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
import { partTypeStrings } from "@/constants/part-type-strings";
|
import { partTypeStrings } from "@/constants/part-type-strings";
|
||||||
|
|
@ -281,10 +283,25 @@ export default {
|
||||||
: this.currencyFormatter.format(amount);
|
: this.currencyFormatter.format(amount);
|
||||||
},
|
},
|
||||||
|
|
||||||
removeItem(cartItemType, category) {
|
async removeItem(cartItemType, category) {
|
||||||
this.lineItems[category] = this.lineItems[category].filter(
|
this.lineItems[category] = this.lineItems[category].filter(
|
||||||
(lineItemsToKeep) => lineItemsToKeep.cartItemType != cartItemType
|
(lineItemsToKeep) => lineItemsToKeep.cartItemType != cartItemType
|
||||||
);
|
);
|
||||||
|
|
||||||
|
await this.dispatchStoreAction(storeActions.SAVE_VAPS, this.lineItems.vaps, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
async saveVaps(lineItems) {
|
||||||
|
this.lineItems.vaps = [...lineItems.vaps];
|
||||||
|
this.lineItems.promos = [...lineItems.promos];
|
||||||
|
await this.dispatchStoreAction(storeActions.SAVE_VAPS, this.lineItems.vaps, false);
|
||||||
|
await this.dispatchStoreAction(
|
||||||
|
storeActions.SAVE_ACTIVE_AND_OR_INACTIVE_PROMOS,
|
||||||
|
{
|
||||||
|
activePromos: this.lineItems.promos,
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
getPromoCodeList() {
|
getPromoCodeList() {
|
||||||
|
|
@ -318,6 +335,10 @@ export default {
|
||||||
showCoverageAsVerified() {
|
showCoverageAsVerified() {
|
||||||
return this.showInsuranceCoverageAs === coverageStatus.VERIFIED;
|
return this.showInsuranceCoverageAs === coverageStatus.VERIFIED;
|
||||||
},
|
},
|
||||||
|
showSalesTax() {
|
||||||
|
const tax = parseFloat(this.salesTax).toFixed(2);
|
||||||
|
return tax > 0;
|
||||||
|
},
|
||||||
currentDeductible() {
|
currentDeductible() {
|
||||||
const deductible = this.insuranceDeductible;
|
const deductible = this.insuranceDeductible;
|
||||||
if (!(deductible === 0 || deductible > 0)) {
|
if (!(deductible === 0 || deductible > 0)) {
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo-image {
|
.logo-image {
|
||||||
max-width: 114px;
|
width: auto;
|
||||||
height: auto;
|
height: 1.1875rem;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,8 @@
|
||||||
<div class="modal-body d-flex flex-column">
|
<div class="modal-body d-flex flex-column">
|
||||||
<textLink
|
<textLink
|
||||||
linkType="newWindowLink"
|
linkType="newWindowLink"
|
||||||
text="Terms of use"
|
text="Terms of service"
|
||||||
href="//www.safelite.com/terms-of-use"
|
href="//www.safelite.com/terms-of-service"
|
||||||
target="_blank" />
|
target="_blank" />
|
||||||
<textLink
|
<textLink
|
||||||
linkType="newWindowLink"
|
linkType="newWindowLink"
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ export default {
|
||||||
return this.leftAlignHeader ? "justify-content-start" : "justify-content-center";
|
return this.leftAlignHeader ? "justify-content-start" : "justify-content-center";
|
||||||
},
|
},
|
||||||
subText() {
|
subText() {
|
||||||
return this.getCmsContent(this.cmsWidgetName, "SubheaderText");
|
return this.getCmsContent(this.cmsWidgetName, "HeaderSubText");
|
||||||
},
|
},
|
||||||
backButtonAccessibleText() {
|
backButtonAccessibleText() {
|
||||||
return this.getCmsContent(this.cmsWidgetName, "BackButtonAccessibleText");
|
return this.getCmsContent(this.cmsWidgetName, "BackButtonAccessibleText");
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -56,7 +52,6 @@
|
||||||
<script>
|
<script>
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
import questionChain from "@/digital-components/question-chain/question-chain";
|
import questionChain from "@/digital-components/question-chain/question-chain";
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
|
|
@ -99,7 +94,6 @@ export default {
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
vehicleBanner,
|
|
||||||
alert,
|
alert,
|
||||||
questionChain,
|
questionChain,
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
cmsWidgetName="AlertInshopPromoWidget"
|
cmsWidgetName="AlertInshopPromoWidget"
|
||||||
alertClass="alert-danger"
|
alertClass="alert-danger"
|
||||||
v-bind:isDismissible="false" />
|
v-bind:isDismissible="false" />
|
||||||
<div class="mt-4" v-for="(promoCode, i) in this.getPromoCodeList()" :key="i">
|
<div class="mt-4 d-flex align-items-center justify-content-between" v-for="(promoCode, i) in this.getPromoCodeList()" :key="i">
|
||||||
<span class="applied-promo"
|
<span class="applied-promo"
|
||||||
>Promo code <span class="promo-code">{{ promoCode }}</span> applied
|
>Promo code <span class="promo-code">{{ promoCode }}</span> applied
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -220,7 +220,7 @@ export default {
|
||||||
additionalInfo: promoValidationResponse?.additionalInfo,
|
additionalInfo: promoValidationResponse?.additionalInfo,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
removeItem(promo) {
|
async removeItem(promo) {
|
||||||
this.lineItems[cartItemCategories.PROMOS] = this.lineItems[
|
this.lineItems[cartItemCategories.PROMOS] = this.lineItems[
|
||||||
cartItemCategories.PROMOS
|
cartItemCategories.PROMOS
|
||||||
].filter(
|
].filter(
|
||||||
|
|
@ -320,6 +320,9 @@ export default {
|
||||||
this.lineItems.vaps?.push(...getVaps);
|
this.lineItems.vaps?.push(...getVaps);
|
||||||
}
|
}
|
||||||
this.lineItems?.promos.push(...promoCodeData.promoCode);
|
this.lineItems?.promos.push(...promoCodeData.promoCode);
|
||||||
|
|
||||||
|
this.$emit("promoAdded", this.lineItems);
|
||||||
|
|
||||||
this.closeModal();
|
this.closeModal();
|
||||||
} else {
|
} else {
|
||||||
this.getErrorMessage(promoCodeData.errorCode, promoCodeData.additionalInfo);
|
this.getErrorMessage(promoCodeData.errorCode, promoCodeData.additionalInfo);
|
||||||
|
|
@ -354,19 +357,18 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.applied-promo {
|
.applied-promo {
|
||||||
padding-right: 4rem;
|
font-size: .875rem;
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
color: #0c7e47;
|
color: $green;
|
||||||
|
|
||||||
.promo-code {
|
.promo-code {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.alert {
|
.alert {
|
||||||
color: #d4281c;
|
color: $red;
|
||||||
font-size: 14px;
|
font-size: .875rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,134 +0,0 @@
|
||||||
import { shallowMount } from "@vue/test-utils";
|
|
||||||
import vehicleBanner from "./vehicle-banner";
|
|
||||||
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
|
||||||
import store from "@/store";
|
|
||||||
import { vehicleCategories } from "@/constants/vehicle-categories.js";
|
|
||||||
|
|
||||||
jest.mock(
|
|
||||||
"@/store",
|
|
||||||
() => {
|
|
||||||
return {};
|
|
||||||
},
|
|
||||||
{ virtual: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
describe("vehicleBanner", () => {
|
|
||||||
test("renders the blurrycar image", async () => {
|
|
||||||
// Arrange
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
displayGenericVehicleImageProp: true,
|
|
||||||
imageUrlValue: "NULL",
|
|
||||||
displayUnmatchedVehicleIconProp: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.vm.vehicleImageToDisplay).toEqual(wrapper.vm.genericVehicleImage);
|
|
||||||
expect(wrapper.find("img").attributes("class")).toContain("vehicle-image");
|
|
||||||
wrapper.unmount();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("vehicleBanner", () => {
|
|
||||||
test("renders expected vehicle image", async () => {
|
|
||||||
// Arrange
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
displayGenericVehicleImageProp: false,
|
|
||||||
imageUrlValue: "url_to_vehicle_image",
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(wrapper.vm.vehicleImageToDisplay).toEqual("url_to_vehicle_image");
|
|
||||||
expect(wrapper.find("img").attributes("class")).toContain("vehicle-image");
|
|
||||||
wrapper.unmount();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("vehicleBanner", () => {
|
|
||||||
test("should render car icon when imageUrl is null and category is default", async () => {
|
|
||||||
// Arrange
|
|
||||||
const { wrapper } = setupMocks({
|
|
||||||
displayGenericVehicleImageProp: false,
|
|
||||||
imageUrlValue: "NULL",
|
|
||||||
});
|
|
||||||
|
|
||||||
var iconUrl = wrapper.vm.vehicleImageToDisplay;
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
expect(iconUrl).toEqual(undefined);
|
|
||||||
wrapper.unmount();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const params = [
|
|
||||||
["CAR", "car_icon_url"],
|
|
||||||
["TRUCK", "truck_icon_url"],
|
|
||||||
["VAN", "van_icon_url"],
|
|
||||||
["COMMERCIAL VAN", "commercial_van_icon_url"],
|
|
||||||
["SUV", "suv_icon_url"],
|
|
||||||
["OTHER", "car_icon_url"],
|
|
||||||
];
|
|
||||||
|
|
||||||
describe("vehicleBanner", () => {
|
|
||||||
test.each(params)(
|
|
||||||
"renders an icon instead of an image for %s and %s",
|
|
||||||
async (category, expectedIcon) => {
|
|
||||||
// Arrange
|
|
||||||
const { wrapper, cmsContent } = setupMocks({
|
|
||||||
displayGenericVehicleImageProp: false,
|
|
||||||
imageUrlValue: expectedIcon,
|
|
||||||
categoryValue: category,
|
|
||||||
});
|
|
||||||
//Act
|
|
||||||
var vehicleIcon = wrapper.vm.getUnmatchedVehicleIcon();
|
|
||||||
// Assert
|
|
||||||
expect(store.getters.vehicle.category).toEqual(category);
|
|
||||||
expect(wrapper.find("img").attributes("class")).toContain("vehicle-image");
|
|
||||||
wrapper.unmount();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
function setupMocks({
|
|
||||||
displayGenericVehicleImageProp,
|
|
||||||
displayUnmatchedVehicleIconProp,
|
|
||||||
imageUrlValue,
|
|
||||||
categoryValue = "CAR",
|
|
||||||
}) {
|
|
||||||
const mockGetCmsContent = jest.fn();
|
|
||||||
mockGetCmsContent((cmsWidget, field) => {
|
|
||||||
return field;
|
|
||||||
});
|
|
||||||
const mockMixin = {
|
|
||||||
methods: {
|
|
||||||
getCmsContent: mockGetCmsContent,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
//Mock store
|
|
||||||
store.dispatch = jest.fn(() => {});
|
|
||||||
store.getters = { vehicle: { category: categoryValue, imageUrl: imageUrlValue } };
|
|
||||||
const mountOptions = getMountOptions({
|
|
||||||
store: {
|
|
||||||
dispatch: store.dispatch,
|
|
||||||
getters: store.getters,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
//Mock props
|
|
||||||
mountOptions.propsData = {
|
|
||||||
displayGenericVehicleImage: displayGenericVehicleImageProp,
|
|
||||||
displayUnmatchedVehicleIconProp: displayUnmatchedVehicleIconProp,
|
|
||||||
};
|
|
||||||
mountOptions.mixins = [mockMixin];
|
|
||||||
const wrapper = shallowMount(vehicleBanner, mountOptions);
|
|
||||||
|
|
||||||
//Mock CMS content
|
|
||||||
const cmsContent = {
|
|
||||||
GenericVehicleImage: "image_url",
|
|
||||||
CarUnmatchedVehicleIcon: "car_icon_url",
|
|
||||||
TruckUnmatchedVehicleIcon: "truck_icon_url",
|
|
||||||
VanUnmatchedVehicleIcon: "van_icon_url",
|
|
||||||
CommercialVanUnmatchedVehicleIcon: "commercial_van_icon_url",
|
|
||||||
SuvUnmatchedVehicleIcon: "suv_icon_url",
|
|
||||||
};
|
|
||||||
return { wrapper, cmsContent };
|
|
||||||
}
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="vehicle_banner mb-4 text-center">
|
|
||||||
<img class="vehicle-image img-fluid" :src="vehicleImageToDisplay" alt="" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: "vehicle-banner",
|
|
||||||
props: {
|
|
||||||
displayGenericVehicleImage: {
|
|
||||||
type: Boolean,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
cmsWidgetName: String,
|
|
||||||
displayVehicleImage: {
|
|
||||||
type: String,
|
|
||||||
required: false,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
displayUnmatchedVehicleIcon: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
vehicleCategory: {
|
|
||||||
type: String,
|
|
||||||
required: false,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
vehicleImageToDisplay() {
|
|
||||||
if (this.displayVehicleImage !== null) {
|
|
||||||
return this.displayVehicleImage;
|
|
||||||
}
|
|
||||||
if (this.displayGenericVehicleImage) {
|
|
||||||
return this.genericVehicleImage;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
this.$store.getters.vehicle.imageUrl === null ||
|
|
||||||
this.$store.getters.vehicle.imageUrl === "NULL" ||
|
|
||||||
this.displayUnmatchedVehicleIcon
|
|
||||||
) {
|
|
||||||
return this.getUnmatchedVehicleIcon();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.$store.getters.vehicle.imageUrl;
|
|
||||||
},
|
|
||||||
genericVehicleImage() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "GenericVehicleImage");
|
|
||||||
},
|
|
||||||
carUnmatchedVehicleIcon() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "CarUnmatchedVehicleIcon");
|
|
||||||
},
|
|
||||||
truckUnmatchedVehicleIcon() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "TruckUnmatchedVehicleIcon");
|
|
||||||
},
|
|
||||||
vanUnmatchedVehicleIcon() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "VanUnmatchedVehicleIcon");
|
|
||||||
},
|
|
||||||
commercialUnmatchedVehicleIcon() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "CommercialVanUnmatchedVehicleIcon");
|
|
||||||
},
|
|
||||||
suvUnmatchedVehicleIcon() {
|
|
||||||
return this.getCmsContent(this.cmsWidgetName, "SuvUnmatchedVehicleIcon");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getUnmatchedVehicleIcon() {
|
|
||||||
const category = this.vehicleCategory ?? this.$store.getters.vehicle.category;
|
|
||||||
switch (category) {
|
|
||||||
case this.vehicleCategories.CAR:
|
|
||||||
return this.carUnmatchedVehicleIcon;
|
|
||||||
case this.vehicleCategories.SUV:
|
|
||||||
return this.suvUnmatchedVehicleIcon;
|
|
||||||
case this.vehicleCategories.TRUCK:
|
|
||||||
return this.truckUnmatchedVehicleIcon;
|
|
||||||
case this.vehicleCategories.VAN:
|
|
||||||
return this.vanUnmatchedVehicleIcon;
|
|
||||||
case this.vehicleCategories.COMMERCIALVAN:
|
|
||||||
return this.commercialUnmatchedVehicleIcon;
|
|
||||||
default:
|
|
||||||
return this.carUnmatchedVehicleIcon;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.vehicle-image {
|
|
||||||
max-width: 290px;
|
|
||||||
object-fit: cover;
|
|
||||||
width: 100%;
|
|
||||||
height: 132px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -147,7 +147,15 @@ export async function navigateToHeritageFunnel({
|
||||||
) {
|
) {
|
||||||
heritageParms["forceEndToEndInsurance"] = true;
|
heritageParms["forceEndToEndInsurance"] = true;
|
||||||
}
|
}
|
||||||
router.navigateToExternalUrl(applicationConfig.HERITAGE_FUNNEL, heritageParms, callBackMethod);
|
|
||||||
|
// clear the heritage session that may still exist after an order was already submitted
|
||||||
|
if (window.sessionStorage.getItem("createNewSessionForHeritage") !== null) {
|
||||||
|
heritageParms["cns"] = "all";
|
||||||
|
window.sessionStorage.removeItem("createNewSessionForHeritage");
|
||||||
|
}
|
||||||
|
|
||||||
|
router.navigateToExternalUrl(applicationConfig.HERITAGE_FUNNEL, heritageParms, callBackMethod);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function skipVinLookup() {
|
export async function skipVinLookup() {
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
ref="vehicleBanner"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" ref="funnelSubHeader" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" ref="funnelSubHeader" />
|
||||||
|
|
||||||
|
|
@ -103,7 +99,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import customerQuestions from "@/layouts/address-lookup/customer-questions/customer-questions";
|
import customerQuestions from "@/layouts/address-lookup/customer-questions/customer-questions";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
|
|
@ -480,7 +475,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
customerQuestions,
|
customerQuestions,
|
||||||
textboxQuestion,
|
textboxQuestion,
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
|
|
@ -54,7 +51,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
import addressVehiclesQuestion from "@/layouts/address-vehicles/address-vehicles-question/address-vehicles-question";
|
import addressVehiclesQuestion from "@/layouts/address-vehicles/address-vehicles-question/address-vehicles-question";
|
||||||
|
|
@ -243,7 +239,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
Form,
|
Form,
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
alert,
|
alert,
|
||||||
navbar,
|
navbar,
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
|
|
@ -30,7 +27,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
|
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
|
||||||
|
|
||||||
|
|
@ -71,7 +67,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
loadingModal,
|
loadingModal,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,10 @@ import { nextTick } from "vue";
|
||||||
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
|
import experimentMixin from "@/mixins/experiment-mixin.js";
|
||||||
|
import { experimentSettings } from "@/constants/experiments";
|
||||||
|
|
||||||
|
const mockExperimentSettings = experimentSettings;
|
||||||
|
|
||||||
// Mock our module for promises.
|
// Mock our module for promises.
|
||||||
jest.mock("@/helpers/layout-helper.js", () => ({
|
jest.mock("@/helpers/layout-helper.js", () => ({
|
||||||
|
|
@ -66,6 +70,9 @@ beforeEach(() => {
|
||||||
customer: {
|
customer: {
|
||||||
emailAddress: "test@test.com",
|
emailAddress: "test@test.com",
|
||||||
},
|
},
|
||||||
|
policy: {
|
||||||
|
isNoComp: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
damage: {},
|
damage: {},
|
||||||
payment: {
|
payment: {
|
||||||
|
|
@ -237,7 +244,7 @@ describe("computed properties...", () => {
|
||||||
const testValue = wrapper.vm.AppointmentWordingText;
|
const testValue = wrapper.vm.AppointmentWordingText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(testValue).toEqual("wording Text 123, test,<br/> test, AZ 12345");
|
expect(testValue).toEqual("wording Text test, 123,<br/> test, AZ 12345");
|
||||||
});
|
});
|
||||||
test("AppointmentWordingText should return DROP_OFF text in expected format.", () => {
|
test("AppointmentWordingText should return DROP_OFF text in expected format.", () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
|
|
@ -419,7 +426,7 @@ describe("computed properties...", () => {
|
||||||
const testValue = wrapper.vm.ServiceLocationFullAddress;
|
const testValue = wrapper.vm.ServiceLocationFullAddress;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(testValue).toEqual("123, test,<br/> test, AZ 12345");
|
expect(testValue).toEqual("test, 123,<br/> test, AZ 12345");
|
||||||
});
|
});
|
||||||
test("ProviderFullAddress should return text in expected format.", () => {
|
test("ProviderFullAddress should return text in expected format.", () => {
|
||||||
//Arrange
|
//Arrange
|
||||||
|
|
@ -552,6 +559,140 @@ describe("computed properties...", () => {
|
||||||
// Assert
|
// Assert
|
||||||
expect(testValue).toEqual("Duration: Overnight");
|
expect(testValue).toEqual("Duration: Overnight");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("NoComp should return false for shouldHideRecalibration", () => {
|
||||||
|
//Arrange
|
||||||
|
const { wrapper } = setupMocks({});
|
||||||
|
wrapper.vm.submittedOrder = {
|
||||||
|
vehicle: {
|
||||||
|
imageUrl: "",
|
||||||
|
},
|
||||||
|
schedule: {
|
||||||
|
endTime: "10:00",
|
||||||
|
date: "2024-09-28",
|
||||||
|
jobMaxMinutes: 120,
|
||||||
|
jobMinMinutes: 60,
|
||||||
|
routeCode: "",
|
||||||
|
},
|
||||||
|
policy: {
|
||||||
|
isNoComp: true,
|
||||||
|
},
|
||||||
|
serviceLocation: store.getters.order.serviceLocation,
|
||||||
|
};
|
||||||
|
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
|
||||||
|
// Act
|
||||||
|
const testValue = wrapper.vm.shouldHideRecalibration;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(testValue).toEqual(false);
|
||||||
|
});
|
||||||
|
test("Itac should return false for shouldHideRecalibration", () => {
|
||||||
|
//Arrange
|
||||||
|
const { wrapper } = setupMocks({});
|
||||||
|
wrapper.vm.submittedOrder = {
|
||||||
|
vehicle: {
|
||||||
|
imageUrl: "",
|
||||||
|
},
|
||||||
|
schedule: {
|
||||||
|
endTime: "10:00",
|
||||||
|
date: "2024-09-28",
|
||||||
|
jobMaxMinutes: 120,
|
||||||
|
jobMinMinutes: 60,
|
||||||
|
routeCode: "",
|
||||||
|
},
|
||||||
|
policy: {
|
||||||
|
isItac: true,
|
||||||
|
},
|
||||||
|
serviceLocation: store.getters.order.serviceLocation,
|
||||||
|
};
|
||||||
|
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
|
||||||
|
// Act
|
||||||
|
const testValue = wrapper.vm.shouldHideRecalibration;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(testValue).toEqual(false);
|
||||||
|
});
|
||||||
|
test("Not Itac/NoComp with Recal should return true for shouldHideRecalibration", async () => {
|
||||||
|
//Arrange
|
||||||
|
const { wrapper } = setupMocks({});
|
||||||
|
const lineItems = {
|
||||||
|
glassParts: [
|
||||||
|
{
|
||||||
|
partType: "RECALIBRATION",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.vm.submittedOrder = {
|
||||||
|
vehicle: {
|
||||||
|
imageUrl: "",
|
||||||
|
},
|
||||||
|
schedule: {
|
||||||
|
endTime: "10:00",
|
||||||
|
date: "2024-09-28",
|
||||||
|
jobMaxMinutes: 120,
|
||||||
|
jobMinMinutes: 60,
|
||||||
|
routeCode: "",
|
||||||
|
},
|
||||||
|
policy: {
|
||||||
|
isItac: false,
|
||||||
|
isNoComp: false,
|
||||||
|
},
|
||||||
|
lineItems: {
|
||||||
|
glassParts: {
|
||||||
|
partType: "Recalibration",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
serviceLocation: store.getters.order.serviceLocation,
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.setData({ lineItems: lineItems });
|
||||||
|
await wrapper.vm.$nextTick();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const testValue = wrapper.vm.shouldHideRecalibration;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(testValue).toEqual(true);
|
||||||
|
});
|
||||||
|
test("Itac/NoComp with Recal should return false for shouldHideRecalibration", async () => {
|
||||||
|
//Arrange
|
||||||
|
const { wrapper } = setupMocks({});
|
||||||
|
const lineItems = {
|
||||||
|
glassParts: [
|
||||||
|
{
|
||||||
|
partType: "RECALIBRATION",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.vm.submittedOrder = {
|
||||||
|
vehicle: {
|
||||||
|
imageUrl: "",
|
||||||
|
},
|
||||||
|
schedule: {
|
||||||
|
endTime: "10:00",
|
||||||
|
date: "2024-09-28",
|
||||||
|
jobMaxMinutes: 120,
|
||||||
|
jobMinMinutes: 60,
|
||||||
|
routeCode: "",
|
||||||
|
},
|
||||||
|
policy: {
|
||||||
|
isItac: true,
|
||||||
|
isNoComp: false,
|
||||||
|
},
|
||||||
|
serviceLocation: store.getters.order.serviceLocation,
|
||||||
|
};
|
||||||
|
|
||||||
|
wrapper.setData({ lineItems: lineItems });
|
||||||
|
await wrapper.vm.$nextTick();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const testValue = wrapper.vm.shouldHideRecalibration;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(testValue).toEqual(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function setupMocks({ customMountOptions }) {
|
function setupMocks({ customMountOptions }) {
|
||||||
|
|
@ -565,10 +706,17 @@ function setupMocks({ customMountOptions }) {
|
||||||
getCmsContent: jest.fn().mockImplementation(() => {
|
getCmsContent: jest.fn().mockImplementation(() => {
|
||||||
return wordingText;
|
return wordingText;
|
||||||
}),
|
}),
|
||||||
getSettingValue: jest.fn(),
|
getSettingValue: jest.fn((settingName) => {
|
||||||
|
if (settingName === experimentSettings.RECAL_PRICE_REMOVE) {
|
||||||
|
return "true";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "false";
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const wrapper = shallowMount(confirmation, mountOptions);
|
const wrapper = shallowMount(confirmation, mountOptions);
|
||||||
return { wrapper };
|
return { wrapper };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div>
|
<div>
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayVehicleImage="vehicleBannerImageUrl"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="scheduleText">
|
<div class="scheduleText">
|
||||||
|
|
@ -88,7 +85,6 @@
|
||||||
<script>
|
<script>
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import addToCalendar from "@/layouts/confirmation/add-to-calendar/add-to-calendar";
|
import addToCalendar from "@/layouts/confirmation/add-to-calendar/add-to-calendar";
|
||||||
import cart from "@/fmg-components/cart/cart";
|
import cart from "@/fmg-components/cart/cart";
|
||||||
|
|
@ -177,6 +173,10 @@ export default {
|
||||||
return containsRecalParts(this?.lineItems);
|
return containsRecalParts(this?.lineItems);
|
||||||
},
|
},
|
||||||
shouldHideRecalibration() {
|
shouldHideRecalibration() {
|
||||||
|
if (this.isNoComp || this.isItac) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
this.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)?.toLowerCase() ===
|
this.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)?.toLowerCase() ===
|
||||||
"true" && this.isRecalibrationOnOrder
|
"true" && this.isRecalibrationOnOrder
|
||||||
|
|
@ -314,11 +314,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ServiceLocationFullAddress() {
|
ServiceLocationFullAddress() {
|
||||||
return `${this.ServiceLocationAddress2 ? this.ServiceLocationAddress2 + "," : ""} ${
|
return `${this.ServiceLocationAddress}${this.ServiceLocationAddress2 ? ", " + this.ServiceLocationAddress2 : ""},<br/> ${this.ServiceLocationCity}, ${this.ServiceLocationState} ${this.ServiceLocationZipCode}`;
|
||||||
this.ServiceLocationAddress
|
|
||||||
},<br/> ${this.ServiceLocationCity}, ${this.ServiceLocationState} ${
|
|
||||||
this.ServiceLocationZipCode
|
|
||||||
}`;
|
|
||||||
},
|
},
|
||||||
ProviderFullAddress() {
|
ProviderFullAddress() {
|
||||||
return `${this.ProviderAddress},<br/> ${this.ProviderCity}, ${this.ProviderState} ${this.ProviderZipCode}`;
|
return `${this.ProviderAddress},<br/> ${this.ProviderCity}, ${this.ProviderState} ${this.ProviderZipCode}`;
|
||||||
|
|
@ -447,7 +443,6 @@ export default {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
Form,
|
Form,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
addToCalendar,
|
addToCalendar,
|
||||||
cart,
|
cart,
|
||||||
textBlock,
|
textBlock,
|
||||||
|
|
@ -517,7 +512,7 @@ export default {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 1rem 0 1.5rem 0;
|
padding: 1.5rem 0;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner cmsWidgetName="VehicleBannerWidget" />
|
|
||||||
<funnelSubHeader class="pb-4" cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader class="pb-4" cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
<div>
|
<div>
|
||||||
<div class="vinlookupquestion" v-html="this.VinLookupQuestionText"></div>
|
<div class="vinlookupquestion" v-html="this.VinLookupQuestionText"></div>
|
||||||
|
|
@ -40,7 +39,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import buttonQuestion from "@/digital-components/button-question/button-question";
|
import buttonQuestion from "@/digital-components/button-question/button-question";
|
||||||
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
|
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
|
||||||
|
|
@ -218,7 +216,6 @@ export default {
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
navbar,
|
navbar,
|
||||||
buttonQuestion,
|
buttonQuestion,
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
|
|
@ -97,7 +94,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
import textboxQuestion from "@/digital-components/textbox-question/textbox-question";
|
import textboxQuestion from "@/digital-components/textbox-question/textbox-question";
|
||||||
|
|
@ -403,7 +399,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
textboxQuestion,
|
textboxQuestion,
|
||||||
alert,
|
alert,
|
||||||
|
|
|
||||||
|
|
@ -57,12 +57,14 @@ export default {
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
if (store.getters.externalParameterState?.isExternalParameter) {
|
if (store.getters.externalParameterState?.isExternalParameter) {
|
||||||
if (store.getters.externalParameterServiceZip.zipCode) {
|
if (store.getters.externalParameterServiceZip.zipCode) {
|
||||||
|
const serviceState = store.getters.order.serviceLocation.state;
|
||||||
|
const serviceZipCtu = store.getters.order.serviceLocation.zipCodeCtu;
|
||||||
await baseMixin.methods.dispatchStoreAction(
|
await baseMixin.methods.dispatchStoreAction(
|
||||||
storeActions.SAVE_SERVICE_ZIP_CODE_INFO,
|
storeActions.SAVE_SERVICE_ZIP_CODE_INFO,
|
||||||
{
|
{
|
||||||
zipCode: store.getters.externalParameterServiceZip.zipCode,
|
zipCode: store.getters.externalParameterServiceZip.zipCode,
|
||||||
state: null,
|
state: serviceState ?? null,
|
||||||
zipCodeCtu: null,
|
zipCodeCtu: serviceZipCtu ?? null,
|
||||||
},
|
},
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader class="mb-5 mt-4" cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader class="mb-5" cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
<hr class="my-0" />
|
<hr class="my-0" />
|
||||||
|
|
||||||
|
|
@ -423,7 +420,32 @@ export default {
|
||||||
customer.emailAddress
|
customer.emailAddress
|
||||||
);
|
);
|
||||||
|
|
||||||
return serviceLocationReqs && isInsuranceSet && scheduleReqs && customerReqs;
|
const preReqResult = serviceLocationReqs && isInsuranceSet() && scheduleReqs && customerReqs;
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
{
|
||||||
|
const log = getQuerystringParameter(queryStrings.LOG);
|
||||||
|
if (eval(log) || !preReqResult) {
|
||||||
|
console.log("------------- payment-method.vue pagePrereqs start -----------------");
|
||||||
|
console.log(new Date() + " serviceLocationReqs::isMobile: " + isMobile);
|
||||||
|
console.log(new Date() + " serviceLocationReqs::mobileReqs: " + mobileReqs);
|
||||||
|
console.log(new Date() + " serviceLocationReqs::dropOffInshopReqs: " + dropOffInshopReqs);
|
||||||
|
console.log(new Date() + " serviceLocationReqs:: result " + serviceLocationReqs);
|
||||||
|
console.log(new Date() + " isInsuranceSet:: " + isInsuranceSet());
|
||||||
|
console.log(new Date() + " scheduleReqs::schedule.date:" + schedule.date);
|
||||||
|
console.log(new Date() + " scheduleReqs::schedule.startTime:" + schedule.startTime);
|
||||||
|
console.log(new Date() + " scheduleReqs::schedule.endTime:" + schedule.endTime);
|
||||||
|
console.log(new Date() + " scheduleReqs::schedule.jobMaxMinutes:" + schedule.jobMaxMinutes);
|
||||||
|
console.log(new Date() + " scheduleReqs::schedule.jobMinMinutes:" + schedule.jobMinMinutes);
|
||||||
|
console.log(new Date() + " customerReqs::customer.firstName:" + customer.firstName);
|
||||||
|
console.log(new Date() + " customerReqs::customer.lastName:" + customer.lastName);
|
||||||
|
console.log(new Date() + " customerReqs::customer.phoneNumber:" + customer.phoneNumber);
|
||||||
|
console.log(new Date() + " customerReqs::customer.emailAddress:" + customer.emailAddress);
|
||||||
|
console.log("------------- payment-method.vue pagePrereqs end -----------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return preReqResult;
|
||||||
},
|
},
|
||||||
getPaymentMethodFromStore() {
|
getPaymentMethodFromStore() {
|
||||||
const piaType = store.getters.order.payment.piaType;
|
const piaType = store.getters.order.payment.piaType;
|
||||||
|
|
@ -596,10 +618,7 @@ export default {
|
||||||
return containsRecalParts(order.lineItems);
|
return containsRecalParts(order.lineItems);
|
||||||
},
|
},
|
||||||
shouldHideRecalibration() {
|
shouldHideRecalibration() {
|
||||||
return (
|
return this.$store.getters.shouldHideRecalibration;
|
||||||
this.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)?.toLowerCase() ===
|
|
||||||
"true" && this.isRecalibrationOnOrder
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
showApplePay() {
|
showApplePay() {
|
||||||
return baseMixin.methods.showApplePay();
|
return baseMixin.methods.showApplePay();
|
||||||
|
|
|
||||||
|
|
@ -139,8 +139,8 @@
|
||||||
type="hidden"
|
type="hidden"
|
||||||
name="sgtermsofusedisplaytext"
|
name="sgtermsofusedisplaytext"
|
||||||
value="By selecting submit, I agree to Safelite's" />
|
value="By selecting submit, I agree to Safelite's" />
|
||||||
<input type="hidden" name="sgtermsofuseurl" value="http://www.safelite.com/terms-of-use/" />
|
<input type="hidden" name="sgtermsofuseurl" value="http://www.safelite.com/terms-of-service/" />
|
||||||
<input type="hidden" name="sgtermsofuselinkdisplaytext" value="terms of use" />
|
<input type="hidden" name="sgtermsofuselinkdisplaytext" value="Terms of service" />
|
||||||
<input type="hidden" name="sgtermsofcancelrefunddisplaytext" value="and" />
|
<input type="hidden" name="sgtermsofcancelrefunddisplaytext" value="and" />
|
||||||
<input
|
<input
|
||||||
type="hidden"
|
type="hidden"
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader class="mb-5" cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader class="mb-5" cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
<cashOrInsuranceQuestion
|
<cashOrInsuranceQuestion
|
||||||
ref="cashOrInsurance"
|
ref="cashOrInsurance"
|
||||||
cmsWidgetName="CashOrInsuranceQuestionWidget"
|
cmsWidgetName="CashOrInsuranceQuestionWidget"
|
||||||
|
|
@ -59,7 +54,7 @@
|
||||||
alertClass="alert-info" />
|
alertClass="alert-info" />
|
||||||
|
|
||||||
<promoModalQuestion
|
<promoModalQuestion
|
||||||
class="small mt-6 d-md-flex justify-content-md-center"
|
class="small mt-6 d-flex justify-content-center"
|
||||||
v-model="lineItems"
|
v-model="lineItems"
|
||||||
:addableVaps="addableVaps"
|
:addableVaps="addableVaps"
|
||||||
pageName="quote"
|
pageName="quote"
|
||||||
|
|
@ -67,12 +62,6 @@
|
||||||
:useDefaultCashParentAccount="true"
|
:useDefaultCashParentAccount="true"
|
||||||
modalWidgetName="PromoModalWidget" />
|
modalWidgetName="PromoModalWidget" />
|
||||||
|
|
||||||
<textBlock
|
|
||||||
cmsWidgetName="quoteDisclaimer"
|
|
||||||
justifyText="left"
|
|
||||||
typeStyle="caption"
|
|
||||||
class="mt-6 quote-disclaimer" />
|
|
||||||
|
|
||||||
<contentGroupModal ref="RainDefenseModal" cmsWidgetName="RainDefenseModal" />
|
<contentGroupModal ref="RainDefenseModal" cmsWidgetName="RainDefenseModal" />
|
||||||
<contentGroupModal ref="FrontWiperModal" cmsWidgetName="FrontWiperModal" />
|
<contentGroupModal ref="FrontWiperModal" cmsWidgetName="FrontWiperModal" />
|
||||||
<contentGroupModal ref="RearWiperModal" cmsWidgetName="RearWiperModal" />
|
<contentGroupModal ref="RearWiperModal" cmsWidgetName="RearWiperModal" />
|
||||||
|
|
@ -84,6 +73,12 @@
|
||||||
:isBackButtonHidden="shouldHideBackButton"
|
:isBackButtonHidden="shouldHideBackButton"
|
||||||
@back-clicked="backButtonAction"
|
@back-clicked="backButtonAction"
|
||||||
@ForwardClicked="forwardButtonAction" />
|
@ForwardClicked="forwardButtonAction" />
|
||||||
|
|
||||||
|
<textBlock
|
||||||
|
cmsWidgetName="quoteDisclaimer"
|
||||||
|
justifyText="center"
|
||||||
|
typeStyle="caption"
|
||||||
|
class="mb-5 quote-disclaimer" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -94,7 +89,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import cashOrInsuranceQuestion from "./cash-or-insurance-question/cash-or-insurance-question";
|
import cashOrInsuranceQuestion from "./cash-or-insurance-question/cash-or-insurance-question";
|
||||||
import servicePackageQuestion from "./service-package-question/service-package-question";
|
import servicePackageQuestion from "./service-package-question/service-package-question";
|
||||||
|
|
@ -453,10 +447,20 @@ export default {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
const payment = store.getters.order.payment;
|
const payment = store.getters.order.payment;
|
||||||
|
|
||||||
|
const preReqResult = (
|
||||||
|
store.getters.order.serviceLocation.zipCode &&
|
||||||
|
store.getters.order.serviceLocation.zipCodeCtu &&
|
||||||
|
(store.getters.order.damage.isRepair ||
|
||||||
|
(store.getters.order.lineItems?.glassParts != null &&
|
||||||
|
store.getters.order.lineItems.glassParts.length > 0)) &&
|
||||||
|
(payment.insuranceCoverage?.isVerified == null ||
|
||||||
|
payment.insuranceCoverage?.isVerified === false)
|
||||||
|
);
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
{
|
{
|
||||||
const log = getQuerystringParameter(queryStrings.LOG);
|
const log = getQuerystringParameter(queryStrings.LOG);
|
||||||
if (eval(log)) {
|
if (eval(log) || !preReqResult) {
|
||||||
console.log("------------- quote.vue pagePrereqs start -----------------");
|
console.log("------------- quote.vue pagePrereqs start -----------------");
|
||||||
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + store.getters.order.serviceLocation?.zipCode);
|
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + store.getters.order.serviceLocation?.zipCode);
|
||||||
console.log(new Date() +" store.getters.order.serviceLocation.zipCodeCtu: " + store.getters.order.serviceLocation?.zipCodeCtu);
|
console.log(new Date() +" store.getters.order.serviceLocation.zipCodeCtu: " + store.getters.order.serviceLocation?.zipCodeCtu);
|
||||||
|
|
@ -467,15 +471,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return preReqResult;
|
||||||
store.getters.order.serviceLocation.zipCode &&
|
|
||||||
store.getters.order.serviceLocation.zipCodeCtu &&
|
|
||||||
(store.getters.order.damage.isRepair ||
|
|
||||||
(store.getters.order.lineItems?.glassParts != null &&
|
|
||||||
store.getters.order.lineItems.glassParts.length > 0)) &&
|
|
||||||
(payment.insuranceCoverage?.isVerified == null ||
|
|
||||||
payment.insuranceCoverage?.isVerified === false)
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
vapsItemsSelectedAction(vapsItemsSelected) {
|
vapsItemsSelectedAction(vapsItemsSelected) {
|
||||||
this.lineItems.vaps = vapsItemsSelected;
|
this.lineItems.vaps = vapsItemsSelected;
|
||||||
|
|
@ -596,7 +592,7 @@ export default {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let price = 0;
|
let price = 0;
|
||||||
if (tier.value == "TierTwo" && this.isServicePackageDiscountOnOrder) {
|
if (tier.additionalButtonData?.servicePackageDiscount && this.isServicePackageDiscountOnOrder) {
|
||||||
lineItemsToPrice.push(...this.servicePackageDiscountParts);
|
lineItemsToPrice.push(...this.servicePackageDiscountParts);
|
||||||
}
|
}
|
||||||
price += baseMixin.methods.getTierOnePackagePrice(
|
price += baseMixin.methods.getTierOnePackagePrice(
|
||||||
|
|
@ -646,7 +642,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
Form,
|
Form,
|
||||||
textBlock,
|
textBlock,
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
<!-- End of body text parsing -->
|
<!-- End of body text parsing -->
|
||||||
<div
|
<div
|
||||||
class="package-footer fw-bold caption ms-n6 mt-4"
|
class="package-footer fw-bold caption ms-n4 mt-4"
|
||||||
v-if="this.buttonFooterCopy"
|
v-if="this.buttonFooterCopy"
|
||||||
v-html="this.buttonFooterCopy"></div>
|
v-html="this.buttonFooterCopy"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -166,14 +166,14 @@ export default {
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 1rem;
|
padding: 0.75rem;
|
||||||
border: 1px solid $gray-300;
|
border: 1px solid $gray-300;
|
||||||
box-shadow:
|
box-shadow:
|
||||||
0px 4px 8px -4px rgba(0, 0, 0, 0.15),
|
0px 4px 8px -4px rgba(0, 0, 0, 0.15),
|
||||||
0px 4px 24px -8px rgba(0, 0, 0, 0.2);
|
0px 4px 24px -8px rgba(0, 0, 0, 0.2);
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
min-height: 60px;
|
min-height: 52px;
|
||||||
max-height: 126px;
|
max-height: 126px;
|
||||||
@include media-breakpoint-up(md) {
|
@include media-breakpoint-up(md) {
|
||||||
max-height: 500px;
|
max-height: 500px;
|
||||||
|
|
@ -182,14 +182,14 @@ export default {
|
||||||
transition: max-height 0.25s ease-in;
|
transition: max-height 0.25s ease-in;
|
||||||
|
|
||||||
&.has-subheader {
|
&.has-subheader {
|
||||||
min-height: 80px;
|
min-height: 72px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "";
|
content: "";
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
margin-right: 1rem;
|
margin-right: 0.5rem;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border: 1px solid $gray-500;
|
border: 1px solid $gray-500;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
|
|
@ -200,8 +200,8 @@ export default {
|
||||||
&:after {
|
&:after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 19px;
|
left: 15px;
|
||||||
top: 24px;
|
top: 20px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
|
|
@ -280,6 +280,7 @@ export default {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
span {
|
span {
|
||||||
&.pricing-info {
|
&.pricing-info {
|
||||||
color: $green;
|
color: $green;
|
||||||
|
|
@ -341,7 +342,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ul {
|
ul {
|
||||||
margin: 1rem 0 0 -15px;
|
margin: 1rem 0 0 -5px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
li {
|
li {
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
|
|
|
||||||
|
|
@ -307,22 +307,6 @@ export default {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
const serviceLocation = store.getters.order.serviceLocation;
|
const serviceLocation = store.getters.order.serviceLocation;
|
||||||
|
|
||||||
// prettier-ignore
|
|
||||||
{
|
|
||||||
const log = getQuerystringParameter(queryStrings.LOG);
|
|
||||||
if (eval(log)) {
|
|
||||||
console.log("------------- schedule.vue pagePrereqs start -----------------");
|
|
||||||
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + serviceLocation.zipCode);
|
|
||||||
console.log(new Date() + " store.getters.order.serviceLocation.zipCodeCtu: " + serviceLocation.zipCodeCtu);
|
|
||||||
console.log(new Date() + " store.getters.order.serviceLocation.appointmentType: " + serviceLocation.appointmentType);
|
|
||||||
console.log(new Date() + " store.getters.order.serviceLocation.provider.providerNumber: " + serviceLocation.provider.providerNumber);
|
|
||||||
console.log(new Date() + " store.getters.payment.isInsurance: " + store.getters.payment?.isInsurance);
|
|
||||||
console.log(new Date() + " store.getters.order.damage.isRepair: " + store.getters.order.damage.isRepair);
|
|
||||||
console.log(new Date() + " store.getters.order.lineItems.glassParts: " + JSON.stringify(store.getters.order.lineItems?.glassParts));
|
|
||||||
console.log("------------- schedule.vue pagePrereqs end -------------------");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const serviceLocationPreReqs =
|
const serviceLocationPreReqs =
|
||||||
serviceLocation.zipCode &&
|
serviceLocation.zipCode &&
|
||||||
serviceLocation.zipCodeCtu &&
|
serviceLocation.zipCodeCtu &&
|
||||||
|
|
@ -337,7 +321,24 @@ export default {
|
||||||
(store.getters.order.lineItems?.glassParts != null &&
|
(store.getters.order.lineItems?.glassParts != null &&
|
||||||
store.getters.order.lineItems.glassParts.length > 0);
|
store.getters.order.lineItems.glassParts.length > 0);
|
||||||
|
|
||||||
return serviceLocationPreReqs && paymentInfo && damageInfo;
|
const preReqResult = serviceLocationPreReqs && paymentInfo && damageInfo;
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
{
|
||||||
|
const log = getQuerystringParameter(queryStrings.LOG);
|
||||||
|
if (eval(log) || !preReqResult) {
|
||||||
|
console.log("------------- schedule.vue pagePrereqs start -----------------");
|
||||||
|
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + serviceLocation.zipCode);
|
||||||
|
console.log(new Date() + " store.getters.order.serviceLocation.zipCodeCtu: " + serviceLocation.zipCodeCtu);
|
||||||
|
console.log(new Date() + " store.getters.order.serviceLocation.appointmentType: " + serviceLocation.appointmentType);
|
||||||
|
console.log(new Date() + " store.getters.order.serviceLocation.provider.providerNumber: " + serviceLocation.provider.providerNumber);
|
||||||
|
console.log(new Date() + " store.getters.payment.isInsurance: " + store.getters.payment?.isInsurance);
|
||||||
|
console.log(new Date() + " store.getters.order.damage.isRepair: " + store.getters.order.damage.isRepair);
|
||||||
|
console.log(new Date() + " store.getters.order.lineItems.glassParts: " + JSON.stringify(store.getters.order.lineItems?.glassParts));
|
||||||
|
console.log("------------- schedule.vue pagePrereqs end -------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return preReqResult;
|
||||||
},
|
},
|
||||||
async getAvailableDatesMethod(startDate, endDate) {
|
async getAvailableDatesMethod(startDate, endDate) {
|
||||||
const newShopTimeSlots = await getAvailableDates(
|
const newShopTimeSlots = await getAvailableDates(
|
||||||
|
|
@ -445,6 +446,11 @@ export default {
|
||||||
forwardButtonAction() {
|
forwardButtonAction() {
|
||||||
this.updateSupportingItems();
|
this.updateSupportingItems();
|
||||||
|
|
||||||
|
if (this.selectedTimeSlotInfo.timeSlot.jobMinMinutes == null) {
|
||||||
|
this.selectedTimeSlotInfo.timeSlot.jobMinMinutes = this.selectableDatesData?.estimatedServiceMinutesMinimum?.toString();
|
||||||
|
this.selectedTimeSlotInfo.timeSlot.jobMaxMinutes = this.selectableDatesData?.estimatedServiceMinutesMaximum?.toString();
|
||||||
|
}
|
||||||
|
|
||||||
this.dispatchStoreAction(
|
this.dispatchStoreAction(
|
||||||
this.storeActions.SAVE_SCHEDULE,
|
this.storeActions.SAVE_SCHEDULE,
|
||||||
this.selectedTimeSlotInfo.timeSlot,
|
this.selectedTimeSlotInfo.timeSlot,
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" class="mt-5" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
<serviceZipModalQuestion
|
<serviceZipModalQuestion
|
||||||
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
|
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
|
||||||
|
|
@ -389,14 +389,13 @@ export default {
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
console.log(
|
// prettier-ignore
|
||||||
"ins: servce-location invalid prereq:" +
|
{
|
||||||
store.getters.payment.parentAccountNumber +
|
console.log(new Date() + "Insurance: servce-location invalid prereqs");
|
||||||
":" +
|
console.log(new Date() + "store.getters.payment.parentAccountNumber:" + store.getters.payment.parentAccountNumber);
|
||||||
store.getters.order.policy.policyNumber +
|
console.log(new Date() + "store.getters.order.policy.policyNumber:" + store.getters.order.policy.policyNumber);
|
||||||
":" +
|
console.log(new Date() + "store.getters.order.serviceLocation.zipCode:" + store.getters.order.serviceLocation.zipCode);
|
||||||
store.getters.order.serviceLocation.zipCode
|
}
|
||||||
);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -406,12 +405,12 @@ export default {
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
console.log(
|
// prettier-ignore
|
||||||
"cash: servce-location invalid prereq:" +
|
{
|
||||||
JSON.stringify(store.getters.lineItems.supportingItems) +
|
console.log(new Date() + "Cash: servce-location invalid prereqs");
|
||||||
":" +
|
console.log(new Date() + "store.getters.lineItems.supportingItems:" + JSON.stringify(store.getters.lineItems.supportingItems));
|
||||||
store.getters.order.serviceLocation.zipCode
|
console.log(new Date() + "store.getters.order.serviceLocation.zipCode:" + store.getters.order.serviceLocation.zipCode);
|
||||||
);
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner cmsWidgetName="VehicleBannerWidget" />
|
|
||||||
<funnelSubHeader class="pb-4" cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader class="pb-4" cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
<div>
|
<div>
|
||||||
<textboxQuestion
|
<textboxQuestion
|
||||||
|
|
@ -65,7 +64,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import buttonQuestion from "@/digital-components/button-question/button-question";
|
import buttonQuestion from "@/digital-components/button-question/button-question";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
|
|
@ -278,7 +276,6 @@ export default {
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
navbar,
|
navbar,
|
||||||
Form,
|
Form,
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
<alert
|
<alert
|
||||||
ref="vehicleChangeAlert"
|
ref="vehicleChangeAlert"
|
||||||
v-if="shouldDisplayVehicleChangeAlert"
|
v-if="shouldDisplayVehicleChangeAlert"
|
||||||
|
|
@ -84,7 +79,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import sideDoorOptions from "@/layouts/vehicle-damage/side-door-options/side-door-options";
|
import sideDoorOptions from "@/layouts/vehicle-damage/side-door-options/side-door-options";
|
||||||
import damageLocationQuestion from "@/layouts/vehicle-damage/damage-location-question/damage-location-question";
|
import damageLocationQuestion from "@/layouts/vehicle-damage/damage-location-question/damage-location-question";
|
||||||
|
|
@ -718,7 +712,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
sideDoorOptions,
|
sideDoorOptions,
|
||||||
damageLocationQuestion,
|
damageLocationQuestion,
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
ref="vehicleBanner"
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
<funnelSubHeader
|
<funnelSubHeader
|
||||||
ref="funnelSubHeader"
|
ref="funnelSubHeader"
|
||||||
cmsWidgetName="FunnelSubHeaderWidget" />
|
cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
@ -60,7 +56,6 @@
|
||||||
// Components
|
// Components
|
||||||
import glassPartQuestion from "@/layouts/vehicle-parts/glass-part-question/glass-part-question";
|
import glassPartQuestion from "@/layouts/vehicle-parts/glass-part-question/glass-part-question";
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
|
|
@ -238,7 +233,6 @@ export default {
|
||||||
Form,
|
Form,
|
||||||
glassPartQuestion,
|
glassPartQuestion,
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
navbar,
|
navbar,
|
||||||
alert,
|
alert,
|
||||||
|
|
|
||||||
|
|
@ -48,14 +48,6 @@
|
||||||
validationRules="style-required"
|
validationRules="style-required"
|
||||||
placeHolderText="Select style"
|
placeHolderText="Select style"
|
||||||
customDropdownId="styleQuestionField" />
|
customDropdownId="styleQuestionField" />
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="displayGeneric"
|
|
||||||
:displayVehicleImage="imageUrl"
|
|
||||||
:vehicleCategory="category"
|
|
||||||
:displayUnmatchedVehicleIcon="unmatchedVehicleIcon"
|
|
||||||
class="mt-5 vehicle-footer"
|
|
||||||
ref="banner" />
|
|
||||||
<alert
|
<alert
|
||||||
ref="AlertNoService"
|
ref="AlertNoService"
|
||||||
v-if="displayNoServiceAlert"
|
v-if="displayNoServiceAlert"
|
||||||
|
|
@ -82,7 +74,6 @@
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
import vehicleQuestion from "@/layouts/vehicle/vehicle-question/vehicle-question";
|
import vehicleQuestion from "@/layouts/vehicle/vehicle-question/vehicle-question";
|
||||||
|
|
||||||
|
|
@ -541,7 +532,6 @@ export default {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
vehicleBanner,
|
|
||||||
Form,
|
Form,
|
||||||
alert,
|
alert,
|
||||||
vehicleQuestion,
|
vehicleQuestion,
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 col-xl-4">
|
<div class="col-md-6 col-xl-4 mt-4">
|
||||||
<vehicleBanner
|
|
||||||
cmsWidgetName="VehicleBannerWidget"
|
|
||||||
:displayGenericVehicleImage="false" />
|
|
||||||
|
|
||||||
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
<funnelSubHeader cmsWidgetName="FunnelSubHeaderWidget" />
|
||||||
|
|
||||||
<textboxQuestion
|
<textboxQuestion
|
||||||
class="mb-2 mt-5"
|
class="mb-2 mt-5"
|
||||||
cmsWidgetName="VinNumberQuestionWidget"
|
cmsWidgetName="VinNumberQuestionWidget"
|
||||||
|
|
@ -132,7 +127,6 @@
|
||||||
// Components
|
// Components
|
||||||
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
|
||||||
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-header";
|
||||||
import alert from "@/ux-components/alert/alert";
|
import alert from "@/ux-components/alert/alert";
|
||||||
import textboxQuestion from "@/digital-components/textbox-question/textbox-question";
|
import textboxQuestion from "@/digital-components/textbox-question/textbox-question";
|
||||||
|
|
@ -506,7 +500,6 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
funnelHeader,
|
funnelHeader,
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
|
||||||
funnelSubHeader,
|
funnelSubHeader,
|
||||||
textboxQuestion,
|
textboxQuestion,
|
||||||
alert,
|
alert,
|
||||||
|
|
|
||||||
|
|
@ -97,8 +97,6 @@ const routes = [
|
||||||
);
|
);
|
||||||
updateOrCreateFunnelCookie();
|
updateOrCreateFunnelCookie();
|
||||||
}
|
}
|
||||||
//Update external parameter state
|
|
||||||
updateExternalParameterState();
|
|
||||||
|
|
||||||
//Affiliate Cookies
|
//Affiliate Cookies
|
||||||
const affiliateCookies = getAffiliateCookies();
|
const affiliateCookies = getAffiliateCookies();
|
||||||
|
|
@ -115,12 +113,16 @@ const routes = [
|
||||||
to.query.fmgPage
|
to.query.fmgPage
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//Update external parameter state but not when returning from heritage
|
||||||
|
if (!to.query.fmgPage?.startsWith("service-location")) {
|
||||||
|
updateExternalParameterState();
|
||||||
|
}
|
||||||
|
|
||||||
// clear part related state because heritage selected a new vehicle
|
// clear part related state because heritage selected a new vehicle
|
||||||
if (
|
if (
|
||||||
to.query.fmgPage === fmgPageValues.VEHICLE &&
|
to.query.fmgPage === fmgPageValues.VEHICLE &&
|
||||||
eval(getFunnelCookie()?.HasDelayedClaimRegistration)
|
eval(getFunnelCookie()?.HasDelayedClaimRegistration)
|
||||||
) {
|
) {
|
||||||
console.log(new Date() + "Router: Policy Vehicle Changed");
|
|
||||||
store.commit(storeMutations.RESET_GLASS_PARTS_STATE);
|
store.commit(storeMutations.RESET_GLASS_PARTS_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -637,6 +639,22 @@ function getRedirectedStartPage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateExternalParameterState() {
|
function updateExternalParameterState() {
|
||||||
|
// if there is an existing external parameter state then they have already been through from an external source(LeadGen) and
|
||||||
|
// are returning. clear out prior related things that need to be selected again like parts and damage type.
|
||||||
|
if (
|
||||||
|
store.getters.externalParameterState?.isExternalParameter ==
|
||||||
|
externalParameterStatus.INACTIVE
|
||||||
|
) {
|
||||||
|
store.dispatch(storeActions.RESET_VEHICLE_STATE_AND_DEPENDENCIES);
|
||||||
|
store.dispatch(storeActions.SAVE_SERVICE_ZIP_CODE_INFO, {
|
||||||
|
state: null,
|
||||||
|
zipCode: null,
|
||||||
|
zipCodeCtu: null,
|
||||||
|
});
|
||||||
|
store.dispatch(storeActions.SAVE_EMAIL, null);
|
||||||
|
store.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES);
|
||||||
|
}
|
||||||
|
|
||||||
const externalParameterYear = getQuerystringParameter(queryStrings.VEHICLE_YEAR);
|
const externalParameterYear = getQuerystringParameter(queryStrings.VEHICLE_YEAR);
|
||||||
const externalParameterMake = getQuerystringParameter(queryStrings.VEHICLE_MAKE);
|
const externalParameterMake = getQuerystringParameter(queryStrings.VEHICLE_MAKE);
|
||||||
const externalParameterModel = getQuerystringParameter(queryStrings.VEHICLE_MODEL);
|
const externalParameterModel = getQuerystringParameter(queryStrings.VEHICLE_MODEL);
|
||||||
|
|
|
||||||
|
|
@ -819,10 +819,21 @@ export const getters = {
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
shouldHideRecalibration: (state) => {
|
shouldHideRecalibration: (state) => {
|
||||||
|
var order;
|
||||||
|
if (window.sessionStorage.getItem("submittedOrder") !== null) {
|
||||||
|
order = JSON.parse(window.sessionStorage.getItem("submittedOrder"));
|
||||||
|
} else {
|
||||||
|
order = state.order;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (order.payment.isInsurance) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
experimentMixin.methods
|
experimentMixin.methods
|
||||||
.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)
|
.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)
|
||||||
?.toLowerCase() === "true" && getters.isRecalibrationOnOrder
|
?.toLowerCase() === "true" && getters.isRecalibrationOnOrder(state)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
areRearWipersOnOrder: (state) => {
|
areRearWipersOnOrder: (state) => {
|
||||||
|
|
@ -1153,6 +1164,12 @@ export const actions = {
|
||||||
},
|
},
|
||||||
|
|
||||||
// Dependency Actions
|
// Dependency Actions
|
||||||
|
resetVehicleStateAndDependencies(context) {
|
||||||
|
context.commit(storeMutations.RESET_VEHICLE_STATE);
|
||||||
|
|
||||||
|
context.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES);
|
||||||
|
},
|
||||||
|
|
||||||
resetDamageAndDependencies(context) {
|
resetDamageAndDependencies(context) {
|
||||||
context.commit(storeMutations.RESET_DAMAGE_STATE);
|
context.commit(storeMutations.RESET_DAMAGE_STATE);
|
||||||
|
|
||||||
|
|
@ -2937,6 +2954,7 @@ export const actions = {
|
||||||
|
|
||||||
// set to local storage
|
// set to local storage
|
||||||
window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder));
|
window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder));
|
||||||
|
window.sessionStorage.setItem("createNewSessionForHeritage", true);
|
||||||
|
|
||||||
// clear vuex
|
// clear vuex
|
||||||
context.commit(storeMutations.RESET_STATE);
|
context.commit(storeMutations.RESET_STATE);
|
||||||
|
|
|
||||||
|
|
@ -76,68 +76,53 @@ caption,
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Poppins styles from Google Fonts
|
// Averta Fonts
|
||||||
|
|
||||||
// Regular styles
|
@font-face {
|
||||||
|
font-family: 'AvertaBold';
|
||||||
.poppins-light {
|
src: url('@/assets/fonts/averta-bold-webfont.woff2') format('woff2'),
|
||||||
font-family: "Poppins", sans-serif;
|
url('@/assets/fonts/averta-bold-webfont.woff') format('woff');
|
||||||
font-weight: 300;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poppins-regular {
|
@font-face {
|
||||||
font-family: "Poppins", sans-serif;
|
font-family: 'AvertaBold_Italic';
|
||||||
font-weight: 400;
|
src: url('@/assets/fonts/averta-bolditalic-webfont.woff2') format('woff2'),
|
||||||
|
url('@/assets/fonts/averta-bolditalic-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poppins-medium {
|
@font-face {
|
||||||
font-family: "Poppins", sans-serif;
|
font-family: 'AvertaExtraBold';
|
||||||
font-weight: 500;
|
src: url('@/assets/fonts/averta-extrabold-webfont.woff2') format('woff2'),
|
||||||
|
url('@/assets/fonts/averta-extrabold-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poppins-semibold {
|
@font-face {
|
||||||
font-family: "Poppins", sans-serif;
|
font-family: 'AvertaRegular';
|
||||||
font-weight: 600;
|
src: url('@/assets/fonts/averta-regular-webfont.woff2') format('woff2'),
|
||||||
|
url('@/assets/fonts/averta-regular-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.poppins-bold {
|
@font-face {
|
||||||
font-family: "Poppins", sans-serif;
|
font-family: 'AvertaRegular_Italic';
|
||||||
font-weight: 700;
|
src: url('@/assets/fonts/averta-regularitalic-webfont.woff2') format('woff2'),
|
||||||
|
url('@/assets/fonts/averta-regularitalic-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Italic styles
|
@font-face {
|
||||||
|
font-family: 'AvertaSemibold';
|
||||||
|
src: url('@/assets/fonts/averta-semibold-webfont.woff2') format('woff2'),
|
||||||
|
url('@/assets/fonts/averta-semibold-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
.poppins-light-italic {
|
}
|
||||||
font-family: "Poppins", sans-serif;
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.poppins-regular-italic {
|
|
||||||
font-family: "Poppins", sans-serif;
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.poppins-medium-italic {
|
|
||||||
font-family: "Poppins", sans-serif;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.poppins-semibold-italic {
|
|
||||||
font-family: "Poppins", sans-serif;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.poppins-bold-italic {
|
|
||||||
font-family: "Poppins", sans-serif;
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
@ -115,7 +115,7 @@ $theme-colors: (
|
||||||
$body-color: $gray-600;
|
$body-color: $gray-600;
|
||||||
|
|
||||||
//Fonts
|
//Fonts
|
||||||
$font-family-sans-serif: Poppins, Arial, Helvetica, sans-serif;
|
$font-family-sans-serif: AvertaRegular, Arial, Helvetica, sans-serif;
|
||||||
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
|
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
|
||||||
monospace;
|
monospace;
|
||||||
// stylelint-enable value-keyword-case
|
// stylelint-enable value-keyword-case
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
]"
|
]"
|
||||||
v-model="selectedValue">
|
v-model="selectedValue">
|
||||||
<div
|
<div
|
||||||
class="button-content list-button-horizontal-content d-flex flex-column justify-content-center p-3">
|
class="button-content list-button-horizontal-content d-flex flex-column justify-content-center p-2">
|
||||||
<span class="m-0" :class="textPosition">
|
<span class="m-0" :class="textPosition">
|
||||||
{{ buttonLabel }}
|
{{ buttonLabel }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -105,7 +105,7 @@ export default {
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
]"
|
]"
|
||||||
v-model="selectedValue">
|
v-model="selectedValue">
|
||||||
<div
|
<div
|
||||||
class="d-flex w-100 align-items-center px-2 h-100 list-card-content button-content rounded-3"
|
class="d-flex w-100 align-items-center px-1 h-100 list-card-content button-content rounded-3"
|
||||||
:class="labelClasses">
|
:class="labelClasses">
|
||||||
<img
|
<img
|
||||||
v-if="buttonImage"
|
v-if="buttonImage"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue