Merge branch 'release/2025.01.23' into rlsmerge/2025.01.23-to-develop

This commit is contained in:
CarlNation 2025-01-21 09:46:58 -05:00
commit 4b584dc08e
9 changed files with 50 additions and 57 deletions

View file

@ -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) {

View file

@ -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();
}, },
}, },

View file

@ -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;

View file

@ -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();
}, },

View file

@ -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() {

View file

@ -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 {

View file

@ -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;
} }

View file

@ -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) {

View file

@ -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>