Merge branch 'release/2025.01.23' into rlsmerge/2025.01.23-to-develop
This commit is contained in:
commit
4b584dc08e
9 changed files with 50 additions and 57 deletions
|
|
@ -226,7 +226,7 @@ export default {
|
||||||
if (this.buttonTypeString == "radio") {
|
if (this.buttonTypeString == "radio") {
|
||||||
classes += " radio-button-container";
|
classes += " radio-button-container";
|
||||||
} else if (this.buttonTypeString == "servicePackageRadio") {
|
} else if (this.buttonTypeString == "servicePackageRadio") {
|
||||||
classes = "package-wrapper col-md-4";
|
classes = "package-wrapper col";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.buttonTypeString == "listCard" && this.buttonsInfo.length > 2) {
|
if (this.buttonTypeString == "listCard" && this.buttonsInfo.length > 2) {
|
||||||
|
|
|
||||||
|
|
@ -99,9 +99,6 @@ export default {
|
||||||
// hide save progress button; show success message alert
|
// hide save progress button; show success message alert
|
||||||
this.isProgressSaved = true;
|
this.isProgressSaved = true;
|
||||||
|
|
||||||
// communicate to parent the new status
|
|
||||||
this.$emit("save-progress-saved");
|
|
||||||
|
|
||||||
this.modal.closeModal();
|
this.modal.closeModal();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ export default {
|
||||||
position: relative;
|
position: relative;
|
||||||
color: $black;
|
color: $black;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: .25rem;
|
border-radius: 0.25rem;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-12 col-xl-8 mb-5">
|
<div class="col-md-12 mb-5" :class="getColCount()">
|
||||||
<servicePackageQuestion
|
<servicePackageQuestion
|
||||||
ref="servicePackage"
|
ref="servicePackage"
|
||||||
cashCmsWidgetName="CashServicePackageQuestionWidget"
|
cashCmsWidgetName="CashServicePackageQuestionWidget"
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
:shouldHideRecalibration="shouldHideRecalibration"
|
:shouldHideRecalibration="shouldHideRecalibration"
|
||||||
@vapsItemsSelected="vapsItemsSelectedAction"
|
@vapsItemsSelected="vapsItemsSelectedAction"
|
||||||
@servicePackageDiscountSelected="servicePackageDiscountSelectedAction"
|
@servicePackageDiscountSelected="servicePackageDiscountSelectedAction"
|
||||||
|
@currentNumberOfPackages="currentNumberOfPackagesAction"
|
||||||
:servicePackage="servicePackage"
|
:servicePackage="servicePackage"
|
||||||
:activePromos="lineItems.promos"
|
:activePromos="lineItems.promos"
|
||||||
v-on="{ 'buttonEvent.openModal': openModalAction }"
|
v-on="{ 'buttonEvent.openModal': openModalAction }"
|
||||||
|
|
@ -40,7 +41,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-12 col-xl-8 p-md-0">
|
<div class="col-md-12" :class="getColCount()">
|
||||||
<!-- If Cash AND vehicle does not require recal OR if Cash AND State requires showing recal, then show Afterpay banner -->
|
<!-- If Cash AND vehicle does not require recal OR if Cash AND State requires showing recal, then show Afterpay banner -->
|
||||||
<afterpayModalBanner
|
<afterpayModalBanner
|
||||||
v-if="showAfterpayBanner"
|
v-if="showAfterpayBanner"
|
||||||
|
|
@ -83,8 +84,7 @@
|
||||||
modalWidgetName="SaveProgressModalWidget"
|
modalWidgetName="SaveProgressModalWidget"
|
||||||
modalName="SaveProgressModal"
|
modalName="SaveProgressModal"
|
||||||
v-if="showSaveProgressModal"
|
v-if="showSaveProgressModal"
|
||||||
pageName="quote"
|
pageName="quote" />
|
||||||
@save-progress-saved="updateSaveProgressAsSaved" />
|
|
||||||
|
|
||||||
<textBlock
|
<textBlock
|
||||||
cmsWidgetName="quoteDisclaimer"
|
cmsWidgetName="quoteDisclaimer"
|
||||||
|
|
@ -444,6 +444,7 @@ export default {
|
||||||
showSaveProgressPopup: null,
|
showSaveProgressPopup: null,
|
||||||
showSaveProgressModal: null,
|
showSaveProgressModal: null,
|
||||||
isSaveProgressComplete: null,
|
isSaveProgressComplete: null,
|
||||||
|
packageNumber: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -493,6 +494,16 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getColCount() {
|
||||||
|
if (this.packageNumber > 2) {
|
||||||
|
return "col-xl-8";
|
||||||
|
} else {
|
||||||
|
return "col-xl-6";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
currentNumberOfPackagesAction(packageNumber) {
|
||||||
|
this.packageNumber = packageNumber;
|
||||||
|
},
|
||||||
openModalAction(modalName) {
|
openModalAction(modalName) {
|
||||||
this.$refs[modalName].openModal();
|
this.$refs[modalName].openModal();
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,7 @@ export default {
|
||||||
: "Special: Save $" + this.getServicePackageDiscountPrice(),
|
: "Special: Save $" + this.getServicePackageDiscountPrice(),
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
this.$emit("currentNumberOfPackages", modifiedAnswers.length);
|
||||||
return modifiedAnswers;
|
return modifiedAnswers;
|
||||||
},
|
},
|
||||||
isServicePackageDiscountOnOrder() {
|
isServicePackageDiscountOnOrder() {
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,9 @@ export default {
|
||||||
.package-main {
|
.package-main {
|
||||||
.package-wrapper {
|
.package-wrapper {
|
||||||
margin: 1rem 0;
|
margin: 1rem 0;
|
||||||
|
&:first-child {
|
||||||
|
margin: 1rem 0 0 0;
|
||||||
|
}
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin: 1rem 0 0 0;
|
margin: 1rem 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -148,6 +151,12 @@ export default {
|
||||||
margin: 1rem 0.5rem 0 0.5rem;
|
margin: 1rem 0.5rem 0 0.5rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
&:first-child {
|
||||||
|
margin: 1rem 0.5rem 0 0;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
margin: 1rem 0 0 0.5rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ import store from "@/store";
|
||||||
import baseMixin from "@/mixins/base-mixin";
|
import baseMixin from "@/mixins/base-mixin";
|
||||||
import { applicationConfig } from "../constants/application-config";
|
import { applicationConfig } from "../constants/application-config";
|
||||||
import { getFunnelCookie } from "@/helpers/heritage-integration/cookie-helper";
|
import { getFunnelCookie } from "@/helpers/heritage-integration/cookie-helper";
|
||||||
|
import { fmgPageValues } from "@/router/router-constants/fmgPage-values";
|
||||||
|
import router from "@/router/index.js";
|
||||||
|
import { getQuerystringParameter } from "@/helpers/querystring-helper";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -714,14 +717,19 @@ export default {
|
||||||
// The sid cookie for analytics will expire every 30 minutes and get recreated in initSession. If this happens
|
// The sid cookie for analytics will expire every 30 minutes and get recreated in initSession. If this happens
|
||||||
// and we also have the funnel cookie present, that indicates they have an existing session that is now expired
|
// and we also have the funnel cookie present, that indicates they have an existing session that is now expired
|
||||||
// so route them to the return user page.
|
// so route them to the return user page.
|
||||||
|
const fromHeritage = getQuerystringParameter(queryStrings.FROM_HERITAGE) === "true";
|
||||||
const funnelCookieLastTouched = getFunnelCookie()?.LastTouched;
|
const funnelCookieLastTouched = getFunnelCookie()?.LastTouched;
|
||||||
if (
|
if (
|
||||||
this.noSession() &&
|
this.noSession() &&
|
||||||
|
!fromHeritage &&
|
||||||
funnelCookieLastTouched !== null &&
|
funnelCookieLastTouched !== null &&
|
||||||
funnelCookieLastTouched !== undefined
|
funnelCookieLastTouched !== undefined
|
||||||
) {
|
) {
|
||||||
await this.initSession();
|
await this.initSession();
|
||||||
window.location.href = applicationConfig.RETURN_USER_PAGE;
|
router.push({
|
||||||
|
path: "/",
|
||||||
|
query: { fmgPage: fmgPageValues.RETURN_USER },
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,8 +80,9 @@ const routes = [
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fromHeritage = getQuerystringParameter(queryStrings.FROM_HERITAGE) === "true";
|
|
||||||
const fromReturnUser = from?.name === fmgPageValues.RETURN_USER;
|
const fromReturnUser = from?.name === fmgPageValues.RETURN_USER;
|
||||||
|
const fromContentSite = getQuerystringParameter(queryStrings.START_TYPE) === "fmg";
|
||||||
|
const toReturnUserPage = to.query?.fmgPage === fmgPageValues.RETURN_USER;
|
||||||
|
|
||||||
// Intercept all navigation if a submitted order exists in storage
|
// Intercept all navigation if a submitted order exists in storage
|
||||||
if (window.sessionStorage.getItem("submittedOrder") !== null) {
|
if (window.sessionStorage.getItem("submittedOrder") !== null) {
|
||||||
|
|
@ -92,18 +93,20 @@ const routes = [
|
||||||
}
|
}
|
||||||
// On entering the funnel "fresh", read cookie information, decide what to do next.
|
// On entering the funnel "fresh", read cookie information, decide what to do next.
|
||||||
else if (from.redirectedFrom === undefined || fromReturnUser) {
|
else if (from.redirectedFrom === undefined || fromReturnUser) {
|
||||||
// if entering the funnel from non-funnel check and see if there is already a funnel cookie.
|
// if entering the funnel from the content site, check and see if there is already a funnel cookie.
|
||||||
// if so, send them to return-user page
|
// if so, send them to return-user page.
|
||||||
const funnelCookieLastTouched = getFunnelCookie()?.LastTouched;
|
const funnelCookieLastTouched = getFunnelCookie()?.LastTouched;
|
||||||
if (
|
if (fromContentSite &&
|
||||||
to?.query?.fmgPage !== fmgPageValues.RETURN_USER &&
|
|
||||||
!fromReturnUser &&
|
|
||||||
!fromHeritage &&
|
|
||||||
funnelCookieLastTouched !== null &&
|
funnelCookieLastTouched !== null &&
|
||||||
funnelCookieLastTouched !== undefined
|
funnelCookieLastTouched !== undefined &&
|
||||||
|
!toReturnUserPage
|
||||||
) {
|
) {
|
||||||
log(" --navigate to return user");
|
log(" --from content site navigate to return user");
|
||||||
NavigateToReturnUser(next, to);
|
router.push({
|
||||||
|
path: "/",
|
||||||
|
query: { fmgPage: fmgPageValues.RETURN_USER },
|
||||||
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear the saveSessionPromise - if it exists in the vuex store but a new instance was created
|
// clear the saveSessionPromise - if it exists in the vuex store but a new instance was created
|
||||||
|
|
@ -651,42 +654,6 @@ function GetRouteInfoFromPageName(pageName) {
|
||||||
return routeData;
|
return routeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function NavigateToReturnUser(next, to) {
|
|
||||||
const returnRoute = GetRouteInfoFromPageName(fmgPageValues.RETURN_USER);
|
|
||||||
log("--returnRoute:", returnRoute);
|
|
||||||
|
|
||||||
if (router.hasRoute(to.query.fmgPage)) {
|
|
||||||
// Since our route is already in scope, we can grab the component from it and call the arePagePrerequisitesValid function.
|
|
||||||
let component = router
|
|
||||||
.getRoutes()
|
|
||||||
.filter((x) => x.name === fmgPageValues.RETURN_USER)[0].components;
|
|
||||||
|
|
||||||
log("--return-user component:", component);
|
|
||||||
|
|
||||||
// If the component hasn't been loaded fully, load it before we check prerequisites.
|
|
||||||
if (component.default.methods === undefined) {
|
|
||||||
component = await component.default();
|
|
||||||
}
|
|
||||||
|
|
||||||
log(" --has route for return-user:", fmgPageValues.RETURN_USER);
|
|
||||||
return next({ name: fmgPageValues.RETURN_USER, query: to.query, params: to.params });
|
|
||||||
} else {
|
|
||||||
log(" --add route for return-user:", fmgPageValues.RETURN_USER);
|
|
||||||
router.addRoute({
|
|
||||||
path: returnRoute[0].path, // Always the same path, because we control it with query strings.
|
|
||||||
name: returnRoute[0].name,
|
|
||||||
component: returnRoute[0].component,
|
|
||||||
});
|
|
||||||
|
|
||||||
next({
|
|
||||||
name: returnRoute[0].name,
|
|
||||||
query: Object.assign(to.query, { fmgPage: returnRoute[0].name }),
|
|
||||||
params: to.params,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Go to our start page on a 404.
|
// Go to our start page on a 404.
|
||||||
function GoToFunnelStartOn404(next, errorPayload = null) {
|
function GoToFunnelStartOn404(next, errorPayload = null) {
|
||||||
if (errorPayload !== null) {
|
if (errorPayload !== null) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
:class="[
|
:class="[
|
||||||
isPrimary ? 'btn-primary' : 'btn-secondary',
|
isPrimary ? 'btn-primary' : 'btn-secondary',
|
||||||
isFloat ? 'float-end' : '',
|
isFloat ? 'float-end' : '',
|
||||||
(isLoaderDisplayed && !suppressLoader) ? 'has-loader' : '',
|
isLoaderDisplayed && !suppressLoader ? 'has-loader' : '',
|
||||||
]"
|
]"
|
||||||
@click="clicked">
|
@click="clicked">
|
||||||
<span class="m-0">{{ this.buttonText }}</span>
|
<span class="m-0">{{ this.buttonText }}</span>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue