From b00c0bdcf6e18dd2e2bc6b4711fa0e5f65e8a2c8 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 3 Sep 2024 15:48:38 -0400 Subject: [PATCH 01/15] CSR-2182: add new base mixin --- src/mixins/base-mixin.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 109f90d04..c86cdacb5 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -102,6 +102,12 @@ export default { }); return filteredLineItems; }, + filterOutRecalibration(lineItems) { + const filteredLineItems = lineItems.filter((item) => { + return item.partType != partTypeStrings.RECALIBRATION; + }); + return filteredLineItems; + }, getTotalPriceOfAllLineItemsAndChildParts(lineItems, includeTax) { let totalPrice = 0; lineItems.forEach((lineItem) => { From 01d0c809fa25300346ec8cc7e103886cdd186fe8 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 3 Sep 2024 15:49:55 -0400 Subject: [PATCH 02/15] CSR-2182: add boolean prop for insurance or not for cart --- src/layouts/payment-method/payment-method.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index f012f7874..e634cecfc 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -30,6 +30,7 @@ pageName="payment-method" servicePackageOptionsCmsName="ServicePackageTitle" recyclingModalCmsWidgetName="RecycleModal" + :isInsurance="isInsurance" :insuranceDeductible="currentDeductible" :insuranceCompanyName="insuranceCompanyName" :showInsuranceCoverageAs="showInsuranceCoverageAs" /> From 785c9fd1bf1052dca3bc8764368bef2ff200cf65 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 3 Sep 2024 15:59:02 -0400 Subject: [PATCH 03/15] CSR-2182: remove recal prices from cash carts --- src/fmg-components/cart/cart.vue | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 495973144..c042b3ca8 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -184,6 +184,7 @@ export default { allowItemRemoval: Boolean, recyclingModalCmsWidgetName: String, showAsPaid: Boolean, + isInsurance: Boolean, insuranceDeductible: Number, insuranceCompanyName: String, showInsuranceCoverageAs: String, @@ -299,6 +300,12 @@ export default { this.$emit("update:modelValue", newValue); }, }, + lineItemsWithoutRecal() { + if (!this.lineItems || this.lineItems.length < 1) return; + const lineItemsCopy = this.lineItems; + lineItemsCopy.supportingItems = baseMixin.methods.filterOutRecalibration(this.lineItems.supportingItems); + return lineItemsCopy; + }, showCoverageAsPending() { return this.showInsuranceCoverageAs === coverageStatus.PENDING; }, @@ -983,16 +990,23 @@ export default { return this.getCmsContent("SubtotalTextWidget", "Text"); }, subTotal() { - return baseMixin.methods.getSubTotal(this.lineItems); + if (!this.lineItems || this.lineItems.length < 1) return; + return this.isInsurance + ? baseMixin.methods.getSubTotal(this.lineItems) + : baseMixin.methods.getSubTotal(this.lineItemsWithoutRecal); }, salesTax() { - return baseMixin.methods.getSalesTax(this.lineItems); + if (!this.lineItems || this.lineItems.length < 1) return; + return this.isInsurance + ? baseMixin.methods.getSalesTax(this.lineItems) + : baseMixin.methods.getSalesTax(this.lineItemsWithoutRecal); }, amountDue() { - if (this.showAsPaid) { - return 0; - } - return baseMixin.methods.getAmountDue(this.lineItems); + if (!this.lineItems || this.lineItems.length < 1) return; + if (this.showAsPaid) return 0; + return this.isInsurance + ? baseMixin.methods.getAmountDue(this.lineItems) + : baseMixin.methods.getAmountDue(this.lineItemsWithoutRecal); }, amountPaid() { if (!this.showAsPaid) { From f0dd92e29f7eac20e6aa56204529f5673748156d Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 3 Sep 2024 15:59:51 -0400 Subject: [PATCH 04/15] CSR-2182: remove unused clone --- src/fmg-components/cart/cart.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index c042b3ca8..db61508b8 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -923,8 +923,6 @@ export default { promoCartItems() { const promoCartItems = []; - // clone the promos array - const promosClone = deepClone(this.promo); // get unique promo codes const uniquePromoCodes = [ ...new Set( From 1fbaccc4228a4c730e38632a0c573dcb55fe63a0 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 3 Sep 2024 17:23:41 -0400 Subject: [PATCH 05/15] CSR-2182: prettier formatting --- src/fmg-components/cart/cart.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index db61508b8..4d5f19f76 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -303,7 +303,9 @@ export default { lineItemsWithoutRecal() { if (!this.lineItems || this.lineItems.length < 1) return; const lineItemsCopy = this.lineItems; - lineItemsCopy.supportingItems = baseMixin.methods.filterOutRecalibration(this.lineItems.supportingItems); + lineItemsCopy.supportingItems = baseMixin.methods.filterOutRecalibration( + this.lineItems.supportingItems + ); return lineItemsCopy; }, showCoverageAsPending() { From 52c9bfecf7483c160366026e81690188f089b9b0 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 5 Sep 2024 20:42:03 -0400 Subject: [PATCH 06/15] CSR-2182: fix recursive error --- src/fmg-components/cart/cart.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 4d5f19f76..06fa922ef 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -302,9 +302,9 @@ export default { }, lineItemsWithoutRecal() { if (!this.lineItems || this.lineItems.length < 1) return; - const lineItemsCopy = this.lineItems; + const lineItemsCopy = deepClone(this.lineItems); lineItemsCopy.supportingItems = baseMixin.methods.filterOutRecalibration( - this.lineItems.supportingItems + lineItemsCopy.supportingItems ); return lineItemsCopy; }, From 16538fff6f964f9f30368f3686f312ecef0f71b6 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Fri, 6 Sep 2024 07:18:00 -0400 Subject: [PATCH 07/15] CSR-2182: fix package price to remove recal --- src/fmg-components/cart/cart.vue | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 06fa922ef..9e5a43bd6 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -140,7 +140,7 @@
Promo code {{ promoCode }} applied @@ -284,6 +284,7 @@ export default { (lineItemsToKeep) => lineItemsToKeep.cartItemType != cartItemType ); }, + getPromoCodeList() { if (this.$refs["promoModalQuestion"]) { return this.$refs["promoModalQuestion"].getPromoCodeList(); @@ -436,7 +437,14 @@ export default { packagePrice() { let packagePrice = 0; - if (!this.showCoverageAsVerified && !this.showCoverageAsPending) { + if (!this.isInsurance) { + // CASH ONLY + packagePrice = baseMixin.methods.getTierOnePackagePrice( + baseMixin.methods.filterOutFees( + baseMixin.methods.filterOutRecalibration(this.availableLineItems) + ) + ); + } else if (!this.showCoverageAsVerified && !this.showCoverageAsPending) { packagePrice = baseMixin.methods.getTierOnePackagePrice( baseMixin.methods.filterOutFees(this.availableLineItems) ); From 6b42a04068a4c017eb2e8c47441e2573a0779020 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 6 Sep 2024 09:58:56 -0400 Subject: [PATCH 08/15] CSR-2193 submittedOrder issue CSR-2193 the getter in the vuex store does not seem to return the submittedOrder data. Possibly related to caching due to the recent upgrade to vuex. Not 100% certain. So just moved the submittedOrder logic out of the store and into the basemix. --- src/constants/query-strings.js | 1 + src/helpers/date-helper.js | 10 ++- .../heritage-integration/navigation-helper.js | 8 ++- .../add-to-calendar/add-to-calendar.vue | 12 +++- src/layouts/confirmation/confirmation.vue | 70 ++++++++++--------- src/layouts/payment-method/payment-method.vue | 17 +++-- src/mixins/analytics-mixin.js | 9 ++- src/mixins/base-mixin.js | 10 ++- src/router/index.js | 7 +- src/store/index.js | 4 +- 10 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/constants/query-strings.js b/src/constants/query-strings.js index a21d93200..8d55424a9 100644 --- a/src/constants/query-strings.js +++ b/src/constants/query-strings.js @@ -36,6 +36,7 @@ const queryStrings = { VIN_SELECTION: "vinselection", SERVICE_PACKAGE: "servicepackage", NUMBER_OF_CHIPS: "numberofchips", + LOG: "log", }; export { queryStrings }; diff --git a/src/helpers/date-helper.js b/src/helpers/date-helper.js index b5afc535c..46b685c82 100644 --- a/src/helpers/date-helper.js +++ b/src/helpers/date-helper.js @@ -8,6 +8,10 @@ export function getDateDifferenceInDays(startDate, endDate) { return Math.round(difference / (1000 * 3600 * 24)); } export function get12HourTimeFormat(time) { + if (!time) { + return null; + } + // Check correct time format and split into components time = time.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)?$/) || [time]; @@ -20,8 +24,12 @@ export function get12HourTimeFormat(time) { return time.join(""); // return adjusted time or original string } export function get12HourTimeMobileFormat(time) { + if (!time) { + return null; + } + // Check correct time format and split into components - time = time.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)?$/) || [time]; + time = time?.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)?$/) || [time]; if (time.length > 1) { // If time format correct diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index f7c3ddc3b..208a301e4 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -107,8 +107,12 @@ export async function getImplicitNavigation(toRoute) { */ export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLog }) { - console.log(new Date() + " navigateToHeritageFunnel: " + JSON.stringify(applicationConfig)); - console.log(new Date() + " navigateToHeritageFunnel: " + applicationConfig.HERITAGE_FUNNEL); + const log = getQuerystringParameter(queryStrings.LOG); + if (eval(log)) { + console.log(new Date() + " applicationConfig: " + JSON.stringify(applicationConfig)); + console.log(new Date() + " navigateToHeritageFunnel: " + applicationConfig.HERITAGE_FUNNEL); + } + // Create the order (or save existing order) when navigating to Heritage Funnel. if (shouldSaveSession) { await saveSession({ pageNameToLog: pageNameToLog, shouldAwaitSaveSessionQueue: true }); diff --git a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue index 4cbe0d748..e09d84734 100644 --- a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue +++ b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue @@ -34,11 +34,16 @@ import { import store from "@/store"; import { serviceType } from "@/constants/service-type"; import { applicationConfig } from "@/constants/application-config.js"; +import baseMixin from "@/mixins/base-mixin.js"; + export default { name: "add-to-calendar", components: { calendarModalQuestion, }, + mounted() { + this.submittedOrder = baseMixin.methods.getSubmittedOrder(); + }, props: { mobileWidgetName: String, inShopWidgetName: String, @@ -56,6 +61,7 @@ export default { data() { return { selectedCalendarOption: null, + submittedOrder: null, }; }, computed: { @@ -110,10 +116,10 @@ export default { return this.getCmsContent(this.sameDayDropOffWidgetName, "BodyText"); }, UniqueId() { - return store.getters.submittedOrder.referralNumber?.toString(); + return this.submittedOrder?.referralNumber?.toString(); }, ServiceType() { - const isRepair = store.getters.submittedOrder.damage.isRepair; + const isRepair = this.submittedOrder?.damage.isRepair; const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedOrder; if (!isRepair) { if (funnelHasRecalibrationPart) { @@ -125,7 +131,7 @@ export default { return serviceType.REPAIR; }, RouteCode() { - return store.getters.submittedOrder.schedule.routeCode; + return this.submittedOrder?.schedule.routeCode; }, Appointment() { var subject = ""; diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index b46154756..38a086294 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -114,11 +114,13 @@ export default { // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.fmgPage); + var submittedOrder = baseMixin.methods.getSubmittedOrder(); + const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, { - serviceZipCode: store.getters.submittedOrder.serviceLocation.zipCode, - carId: store.getters.submittedOrder.vehicle.carId, + serviceZipCode: submittedOrder.serviceLocation.zipCode, + carId: submittedOrder.vehicle.carId, }, "confirmation" ); @@ -147,24 +149,26 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; - const lineItemsFromSubmittedOrder = deepClone(store.getters.submittedOrder.lineItems); + const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); vm.lineItems = lineItemsFromSubmittedOrder; vm.vaps = availableVaps; + vm.submittedOrder = submittedOrder; }); }, data() { return { lineItems: [], vaps: [], + submittedOrder: null, }; }, computed: { ShowCart() { - if (this.isPia && store.getters.submittedOrder.settledTenderAmount == 0) { + if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { // settleTenderAmount always shows 0 via localhost or dev. // Temporarily set return true to see cart in localhost or dev environment return false; @@ -179,7 +183,7 @@ export default { return this.getCmsContent("ScheduleConfirmationWidget", "Image"); }, CustomerPortalLoginToken() { - return store.getters.submittedOrder.customerPortalLoginToken; + return this.submittedOrder?.customerPortalLoginToken; }, ConfirmationEmailText() { return this.getCmsContent("ConfirmationEmailWidget", "BodyText") @@ -189,16 +193,16 @@ export default { ?.replaceAll(">", ">"); }, ScheduleDate() { - return store.getters.submittedOrder.schedule.date; + return this.submittedOrder?.schedule.date; }, AppointmentType() { - return store.getters.submittedOrder.serviceLocation.appointmentType; + return this.submittedOrder?.serviceLocation.appointmentType; }, ScheduleStartTime() { - return store.getters.submittedOrder.schedule.startTime; + return this.submittedOrder?.schedule.startTime; }, ScheduleEndTime() { - return store.getters.submittedOrder.schedule.endTime; + return this.submittedOrder?.schedule.endTime; }, InShopWordingText() { return this.getCmsContent("InShopWordingWidget", "BodyText"); @@ -210,31 +214,31 @@ export default { return this.getCmsContent("DropOffWordingWidget", "BodyText"); }, ServiceLocationAddress() { - return store.getters.submittedOrder.serviceLocation.address; + return this.submittedOrder?.serviceLocation.address; }, ServiceLocationAddress2() { - return store.getters.submittedOrder.serviceLocation.address2; + return this.submittedOrder?.serviceLocation.address2; }, ServiceLocationCity() { - return store.getters.submittedOrder.serviceLocation.city; + return this.submittedOrder?.serviceLocation.city; }, ServiceLocationState() { - return store.getters.submittedOrder.serviceLocation.state; + return this.submittedOrder?.serviceLocation.state; }, ServiceLocationZipCode() { - return store.getters.submittedOrder.serviceLocation.zipCode; + return this.submittedOrder?.serviceLocation.zipCode; }, ProviderAddress() { - return store.getters.submittedOrder.serviceLocation.provider.address.streetAddress; + return this.submittedOrder?.serviceLocation.provider.address.streetAddress; }, ProviderCity() { - return store.getters.submittedOrder.serviceLocation.provider.address.city; + return this.submittedOrder?.serviceLocation.provider.address.city; }, ProviderState() { - return store.getters.submittedOrder.serviceLocation.provider.address.state; + return this.submittedOrder?.serviceLocation.provider.address.state; }, ProviderZipCode() { - return store.getters.submittedOrder.serviceLocation.provider.address.zipCode; + return this.submittedOrder?.serviceLocation.provider.address.zipCode; }, AppointmentWordingText() { if (this.AppointmentType == AppointmentTypeStrings.MOBILE) { @@ -268,7 +272,7 @@ export default { // This conversion ensures we don't get get GMT induced date changes const dateObject = convertDateStringToDate(this.ScheduleDate); // Ex: Tuesday, April 22 - return dateObject.toLocaleDateString("en-us", { + return dateObject?.toLocaleDateString("en-us", { weekday: "long", month: "long", day: "numeric", @@ -286,19 +290,19 @@ export default { } }, vehicleBannerImageUrl() { - return store.getters.submittedOrder?.vehicle.imageUrl; + return this.submittedOrder?.vehicle.imageUrl; }, damageInfo() { - return store.getters.submittedOrder.damage; + return this.submittedOrder?.damage; }, isInsurance() { - return store.getters.submittedOrder.payment.isInsurance; + return this.submittedOrder?.payment.isInsurance; }, isNoComp() { - return store.getters.submittedOrder.policy.isNoComp; + return this.submittedOrder?.policy.isNoComp; }, isItac() { - return store.getters.submittedOrder.policy.isItac; + return this.submittedOrder?.policy.isItac; }, hasVapsInCart() { if (this.lineItems?.vaps?.length > 0) { @@ -311,30 +315,30 @@ export default { if (this.isNoComp || this.isItac) { return coverageStatus.NOCOMP; } else { - return store.getters.submittedOrder.payment.insuranceCoverage.coverageStatus; + return this.submittedOrder?.payment.insuranceCoverage.coverageStatus; } }, currentDeductible() { - return store.getters.submittedOrder.policy.currentDeductible; + return this.submittedOrder?.policy.currentDeductible; }, insuranceCompanyName() { - return store.getters.submittedOrder.policy.insuranceCompanyName; + return this.submittedOrder?.policy.insuranceCompanyName; }, isPia() { - return store.getters.submittedOrder?.payment.isPia; + return this.submittedOrder?.payment.isPia; }, AppointmentDuration() { - const durationMaximum = store.getters.submittedOrder?.schedule?.jobMaxMinutes; - const durationMinimum = store.getters.submittedOrder?.schedule?.jobMinMinutes; + const durationMaximum = this.submittedOrder?.schedule?.jobMaxMinutes; + const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - store.getters.submittedOrder?.schedule?.routeCode.includes( + this.submittedOrder?.schedule?.routeCode.includes( RouteCodeFlags.ALL_DAY_DROP_OFF ) ) { return durationLengthString.concat("All Day"); } else if ( - store.getters.submittedOrder?.schedule?.routeCode.includes( + this.submittedOrder?.schedule?.routeCode.includes( RouteCodeFlags.OVERNIGHT_DROP_OFF ) ) { @@ -348,7 +352,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - if (store.getters.hasSubmittedOrder) { + if (baseMixin.methods.hasSubmittedOrder()) { return true; } diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index a5a778cc8..45c2cbc2e 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -305,6 +305,8 @@ export default { lineItems.vaps = lineItems.vaps ?? []; lineItems.vaps.push(...vapsToAddToCart); + var submittedOrder = baseMixin.methods.getSubmittedOrder(); + // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); @@ -337,6 +339,8 @@ export default { validateAlerts[0].shouldAutoFade ); } + + vm.submittedOrder = submittedOrder; }); }, data() { @@ -347,6 +351,7 @@ export default { inactivePromos: this.getInactivePromosFromStore(), isRecalAckOptIn: this.getIsRecalAckOptInFromStore(), forwardClicked: false, // this prevents the pia disclaimer from showing when switching to insurance and nav forward + submittedOrder: null, }; }, methods: { @@ -565,7 +570,7 @@ export default { ); }, hasSubmittedOrder() { - return this.$store.getters.hasSubmittedOrder; + return baseMixin.methods.hasSubmittedOrder(); }, openModal(modalName) { this.$refs[modalName].openModal(); @@ -590,17 +595,17 @@ export default { }, isInsurance() { return this.hasSubmittedOrder() - ? this.$store.getters.submittedOrder.payment.isInsurance + ? this.submittedOrder?.payment.isInsurance : this.$store.getters.payment.isInsurance; }, isNoComp() { return this.hasSubmittedOrder() - ? this.$store.getters.submittedOrder.policy.isNoComp + ? this.submittedOrder?.policy.isNoComp : this.$store.getters.policy.isNoComp; }, isItac() { return this.hasSubmittedOrder() - ? this.$store.getters.submittedOrder.policy.isItac + ? this.submittedOrder?.policy.isItac : this.$store.getters.policy.isItac; }, hasVapsInCart() { @@ -615,13 +620,13 @@ export default { return coverageStatus.NOCOMP; } else { return this.hasSubmittedOrder() - ? this.$store.getters.submittedOrder.payment.insuranceCoverage.coverageStatus + ? this.submittedOrder?.payment.insuranceCoverage.coverageStatus : this.$store.getters.payment.insuranceCoverage.coverageStatus; } }, currentDeductible() { return this.hasSubmittedOrder() - ? this.$store.getters.submittedOrder.policy.currentDeductible + ? this.submittedOrder?.policy.currentDeductible : this.$store.getters.policy.currentDeductible; }, insuranceCompanyName() { diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 9ce6874ae..9bca5555d 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -37,9 +37,11 @@ export default { const currentPageName = getPageNameByQueryString(); await this.validateSession(); + var submittedOrder = baseMixin.methods.getSubmittedOrder(); + const refSequenceNum = store.getters.order.referralSequenceNumber || - store.getters.submittedOrder?.referralSequenceNumber; + submittedOrder?.referralSequenceNumber; var payload = { userId: getUserIdValue(), @@ -125,8 +127,9 @@ export default { const isDefined = (x) => x !== null && x !== undefined; // Get correct order object - const hasSubmittedOrder = store.getters.hasSubmittedOrder; - const order = hasSubmittedOrder ? store.getters.submittedOrder : store.getters.order; + const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); + var submittedOrder = baseMixin.methods.getSubmittedOrder(); + const order = hasSubmittedOrder ? submittedOrder : store.getters.order; // Begin assembling payload for data layer const payload = {}; diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 109f90d04..1f4f9178b 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -160,8 +160,8 @@ export default { ); } - const order = store.getters.hasSubmittedOrder - ? store.getters.submittedOrder + const order = this.hasSubmittedOrder() + ? this.getSubmittedOrder() : store.getters.order; if ( @@ -218,6 +218,12 @@ export default { return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]; } }, + getSubmittedOrder() { + return JSON.parse(window.sessionStorage.getItem("submittedOrder")); + }, + hasSubmittedOrder() { + return window.sessionStorage.getItem("submittedOrder") !== null; + }, }, computed: { storeActions() { diff --git a/src/router/index.js b/src/router/index.js index f3583e312..5d09686d1 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -63,7 +63,7 @@ const routes = [ } // Intercept all navigation if a submitted order exists in storage - if (store.getters.hasSubmittedOrder) { + if (window.sessionStorage.getItem("submittedOrder") !== null) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; } @@ -406,6 +406,7 @@ async function navigate( const zip = getQuerystringParameter(queryStrings.ZIP_CODE); const promo = getQuerystringParameter(queryStrings.PROMO); const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR); + const log = getQuerystringParameter(queryStrings.LOG); if ( hasZip && @@ -425,6 +426,10 @@ async function navigate( queryStringsObject[queryStrings.PAGE_ERROR] = pageError; } + if (log) { + queryStringsObject[queryStrings.LOG] = log; + } + router.push({ name: "root", query: Object.assign(optionalQuery, queryStringsObject), diff --git a/src/store/index.js b/src/store/index.js index aa5747a0f..cf29f5faf 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -883,8 +883,6 @@ export const getters = { .filter((x) => !!x.isActive) .map((x) => x.settings) .reduce((r, c) => Object.assign(r, c), {}) ?? {}, - submittedOrder: (state) => JSON.parse(window.sessionStorage.getItem("submittedOrder")), - hasSubmittedOrder: (state) => window.sessionStorage.getItem("submittedOrder") !== null, isVerifiedAndDeductibleZeroConfirmed: (state) => { // used as a CMS variable on /payment-method, needed for FunnelSubHeaderWidget on cart pages if ( @@ -2798,7 +2796,7 @@ export const actions = { }, createSubmittedOrder(context) { - if (context.getters.hasSubmittedOrder) { + if (window.sessionStorage.getItem("submittedOrder") !== null) { return; } From 114d6a88ca80094f79061efebbfbdb1b1bc41853 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 6 Sep 2024 10:04:09 -0400 Subject: [PATCH 09/15] prettier --- src/helpers/date-helper.js | 2 +- src/layouts/confirmation/confirmation.vue | 8 ++------ src/mixins/base-mixin.js | 6 ++---- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/helpers/date-helper.js b/src/helpers/date-helper.js index 46b685c82..59ffa5745 100644 --- a/src/helpers/date-helper.js +++ b/src/helpers/date-helper.js @@ -11,7 +11,7 @@ export function get12HourTimeFormat(time) { if (!time) { return null; } - + // Check correct time format and split into components time = time.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)?$/) || [time]; diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 38a086294..eb1d88705 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -332,15 +332,11 @@ export default { const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - this.submittedOrder?.schedule?.routeCode.includes( - RouteCodeFlags.ALL_DAY_DROP_OFF - ) + this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) ) { return durationLengthString.concat("All Day"); } else if ( - this.submittedOrder?.schedule?.routeCode.includes( - RouteCodeFlags.OVERNIGHT_DROP_OFF - ) + this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) ) { return durationLengthString.concat("Overnight"); } else { diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 04ce4c3a5..571ac3638 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -166,9 +166,7 @@ export default { ); } - const order = this.hasSubmittedOrder() - ? this.getSubmittedOrder() - : store.getters.order; + const order = this.hasSubmittedOrder() ? this.getSubmittedOrder() : store.getters.order; if ( order.payment.insuranceCoverage.isVerified && @@ -227,7 +225,7 @@ export default { getSubmittedOrder() { return JSON.parse(window.sessionStorage.getItem("submittedOrder")); }, - hasSubmittedOrder() { + hasSubmittedOrder() { return window.sessionStorage.getItem("submittedOrder") !== null; }, }, From 840dcb65d0a15f6952f7dcc5bc6dd2532ab604cb Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Fri, 6 Sep 2024 15:15:05 -0400 Subject: [PATCH 10/15] CSR-2194 | Fix vehicle-damage validation move continue button validation to top level --- .../base-input-button/base-input-button.vue | 7 +- src/layouts/vehicle-damage/vehicle-damage.vue | 103 +++++++++++++++++- 2 files changed, 103 insertions(+), 7 deletions(-) diff --git a/src/digital-components/base-input-button/base-input-button.vue b/src/digital-components/base-input-button/base-input-button.vue index e9b5e6411..120f05892 100644 --- a/src/digital-components/base-input-button/base-input-button.vue +++ b/src/digital-components/base-input-button/base-input-button.vue @@ -34,6 +34,7 @@ import { handleInputComponentBlur, } from "@/helpers/button-question-focus-helper"; import { inputButtonProps } from "@/digital-components/base-input-button/button-functionality-props"; +import { v4 as uuidv4 } from "uuid"; export default { name: "base-input-button", @@ -45,6 +46,7 @@ export default { data() { return { valueToEmit: null, + buttonId: uuidv4() }; }, mounted() { @@ -153,11 +155,6 @@ export default { inputType() { return this.isMultiSelect ? "checkbox" : "radio"; }, - buttonId() { - return `${this.groupName?.replace(" ", "-")}-${this.value - ?.toString() - ?.replace(" ", "-")}`; - }, isValueSelectedOnClick() { return this.isMultiSelect || this.selectingInitiatesLoad; }, diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 5744597e4..a7dfdfb49 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -1,5 +1,5 @@