From e894522acbdd29d1e032b7940da54a1b1e653ad0 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 10:12:02 -0400 Subject: [PATCH 01/12] CASH-462 | First look at order changes --- src/global-methods.js | 2 +- src/helpers/pricing-helper.js | 2 +- src/layouts/confirmation/confirmation.vue | 92 +++++++++++------------ src/store/index.js | 6 +- 4 files changed, 53 insertions(+), 49 deletions(-) diff --git a/src/global-methods.js b/src/global-methods.js index ba6cec1ec..01d0c9488 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -61,7 +61,7 @@ export default { const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; const submittedOrder = baseMixin.methods.getSubmittedOrder(); const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); - const order = hasSubmittedOrder ? submittedOrder : store.getters.order; + const order = hasSubmittedOrder ? submittedOrder.order : store.getters.order; const payloadAndAnalyticsData = Object.assign({}, payload, { AppName: "FixMyGlass" }); const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), diff --git a/src/helpers/pricing-helper.js b/src/helpers/pricing-helper.js index fda5b3b9c..4c87b8cf4 100644 --- a/src/helpers/pricing-helper.js +++ b/src/helpers/pricing-helper.js @@ -12,7 +12,7 @@ export function getDisplayAmountDue(lineItemsObject, includeTax = true) { export function getAmountDue(lineItemsObject, includeTax = true) { let amountDue = 0; const order = baseMixin?.methods?.hasSubmittedOrder() - ? baseMixin?.methods?.getSubmittedOrder() + ? baseMixin?.methods?.getSubmittedOrder().order : store.getters.order; if (lineItemsObject?.glassParts) { diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 8e49f298d..0aadfdf5c 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -173,8 +173,8 @@ export default { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, { - serviceZipCode: submittedOrder.serviceLocation.zipCode, - carId: submittedOrder.vehicle.carId, + serviceZipCode: submittedOrder.order.serviceLocation.zipCode, + carId: submittedOrder.order.vehicle.carId, }, "confirmation" ); @@ -203,10 +203,10 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; - const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); + const lineItemsFromSubmittedOrder = deepClone(submittedOrder.order.lineItems); - const isNoComp = submittedOrder?.policy?.isNoComp; - const isItac = submittedOrder?.policy?.isItac; + const isNoComp = submittedOrder?.order?.policy?.isNoComp; + const isItac = submittedOrder?.order?.policy?.isItac; const isRecalibrationOnOrder = containsRecalParts(lineItemsFromSubmittedOrder); const shouldHideRecalibration = () => { @@ -254,7 +254,7 @@ export default { return containsRecalParts(this?.lineItems); }, ShowCart() { - if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { + if (this.isPia && this.submittedOrder?.order?.settledTenderAmount == 0) { // settleTenderAmount always shows 0 via localhost or dev. // Temporarily set return true to see cart in localhost or dev environment return false; @@ -269,13 +269,13 @@ export default { return this.getCmsContent("ScheduleConfirmationWidget", "Image"); }, CustomerPortalLoginToken() { - return this.submittedOrder?.customerPortalLoginToken; + return this.submittedOrder?.order.customerPortalLoginToken; }, ConfirmationEmailText() { return this.getCmsContent("ConfirmationEmailWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.customer.emailAddress}", - this.submittedOrder?.customer?.emailAddress + this.submittedOrder?.order.customer?.emailAddress ) ?.replaceAll("{custom:MY_ACCOUNT_URL}", applicationConfig.MY_ACCOUNT) ?.replaceAll("{custom:CUSTOMER_PORTAL_LOGIN_TOKEN}", this.CustomerPortalLoginToken) @@ -283,88 +283,88 @@ export default { ?.replaceAll(">", ">"); }, ScheduleDate() { - return this.submittedOrder?.schedule?.date; + return this.submittedOrder?.order.schedule?.date; }, AppointmentType() { - return this.submittedOrder?.serviceLocation?.appointmentType; + return this.submittedOrder?.order.serviceLocation?.appointmentType; }, ScheduleStartTime() { - return this.submittedOrder?.schedule?.startTime; + return this.submittedOrder?.order.schedule?.startTime; }, ScheduleEndTime() { - return this.submittedOrder?.schedule?.endTime; + return this.submittedOrder?.order.schedule?.endTime; }, InShopWordingText() { return this.getCmsContent("InShopWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, MobileWordingText() { return this.getCmsContent("MobileWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, DropOffWordingText() { return this.getCmsContent("DropOffWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.vehicle?.year + this.submittedOrder?.order?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.vehicle?.make + this.submittedOrder?.order?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.vehicle?.model + this.submittedOrder?.order?.vehicle?.model ); }, ServiceLocationAddress() { - return this.submittedOrder?.serviceLocation?.address; + return this.submittedOrder?.order?.serviceLocation?.address; }, ServiceLocationAddress2() { - return this.submittedOrder?.serviceLocation?.address2; + return this.submittedOrder?.order?.serviceLocation?.address2; }, ServiceLocationCity() { - return this.submittedOrder?.serviceLocation?.city; + return this.submittedOrder?.order?.serviceLocation?.city; }, ServiceLocationState() { - return this.submittedOrder?.serviceLocation?.state; + return this.submittedOrder?.order?.serviceLocation?.state; }, ServiceLocationZipCode() { - return this.submittedOrder?.serviceLocation?.zipCode; + return this.submittedOrder?.order?.serviceLocation?.zipCode; }, ProviderAddress() { - return this.submittedOrder?.serviceLocation?.provider?.address?.streetAddress; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.streetAddress; }, ProviderCity() { - return this.submittedOrder?.serviceLocation?.provider?.address?.city; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.city; }, ProviderState() { - return this.submittedOrder?.serviceLocation?.provider?.address?.state; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.state; }, ProviderZipCode() { - return this.submittedOrder?.serviceLocation?.provider?.address?.zipCode; + return this.submittedOrder?.order?.serviceLocation?.provider?.address?.zipCode; }, AppointmentWordingText() { if (this.AppointmentType == AppointmentTypeStrings.MOBILE) { @@ -408,7 +408,7 @@ export default { } if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) { if ( - this.submittedOrder?.schedule?.routeCode.includes( + this.submittedOrder?.order?.schedule?.routeCode.includes( RouteCodeFlags.OVERNIGHT_DROP_OFF ) ) { @@ -420,22 +420,22 @@ export default { return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`; }, vehicleBannerImageUrl() { - return this.submittedOrder?.vehicle.imageUrl; + return this.submittedOrder?.order?.vehicle.imageUrl; }, damageInfo() { - return this.submittedOrder?.damage; + return this.submittedOrder?.order?.damage; }, isMSRFeeApplicable() { - return this.submittedOrder?.isMSRFeeApplicable; + return this.submittedOrder?.order?.isMSRFeeApplicable; }, isInsurance() { - return this.submittedOrder?.payment?.isInsurance; + return this.submittedOrder?.order?.payment?.isInsurance; }, isNoComp() { - return this.submittedOrder?.policy?.isNoComp; + return this.submittedOrder?.order?.policy?.isNoComp; }, isItac() { - return this.submittedOrder?.policy?.isItac; + return this.submittedOrder?.order?.policy?.isItac; }, hasVapsInCart() { if (this.lineItems?.vaps?.length > 0) { @@ -448,28 +448,28 @@ export default { if (this.isNoComp || this.isItac) { return coverageStatus.NOCOMP; } else { - return this.submittedOrder?.payment?.insuranceCoverage?.coverageStatus; + return this.submittedOrder?.order?.payment?.insuranceCoverage?.coverageStatus; } }, currentDeductible() { - return this.submittedOrder?.policy?.currentDeductible; + return this.submittedOrder?.order?.policy?.currentDeductible; }, insuranceCompanyName() { - return this.submittedOrder?.policy?.insuranceCompanyName; + return this.submittedOrder?.order?.policy?.insuranceCompanyName; }, isPia() { - return this.submittedOrder?.payment?.isPia; + return this.submittedOrder?.order?.payment?.isPia; }, AppointmentDuration() { - const durationMaximum = this.submittedOrder?.schedule?.jobMaxMinutes; - const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; + const durationMaximum = this.submittedOrder?.order?.schedule?.jobMaxMinutes; + const durationMinimum = this.submittedOrder?.order?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.ALL_DAY_DROP_OFF) + this.submittedOrder?.order?.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?.order?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) ) { return durationLengthString.concat("Overnight"); } else { @@ -541,7 +541,7 @@ export default { parseInt(this.donationAmount), false ); - this.lineItems = deepClone(this.getSubmittedOrder().lineItems); + this.lineItems = deepClone(this.getSubmittedOrder().order.lineItems); } else { this.showDonationError = true; this.showDonationSuccess = false; diff --git a/src/store/index.js b/src/store/index.js index 032660c6f..05cb572e1 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1854,6 +1854,7 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } + url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3263,7 +3264,10 @@ export const actions = { } // create a submitted order object from vuex. - const submittedOrder = context.state.order; + const submittedOrder = { + order: context.state.order, + applicationUser: context.state.applicationUser, + }; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; From d38cc5f2e65f298120af51c53778ca74176fc77d Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 10:31:52 -0400 Subject: [PATCH 02/12] Revert "CASH-462 | First look at order changes" This reverts commit e894522acbdd29d1e032b7940da54a1b1e653ad0. --- src/global-methods.js | 2 +- src/helpers/pricing-helper.js | 2 +- src/layouts/confirmation/confirmation.vue | 92 +++++++++++------------ src/store/index.js | 6 +- 4 files changed, 49 insertions(+), 53 deletions(-) diff --git a/src/global-methods.js b/src/global-methods.js index 01d0c9488..ba6cec1ec 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -61,7 +61,7 @@ export default { const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; const submittedOrder = baseMixin.methods.getSubmittedOrder(); const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); - const order = hasSubmittedOrder ? submittedOrder.order : store.getters.order; + const order = hasSubmittedOrder ? submittedOrder : store.getters.order; const payloadAndAnalyticsData = Object.assign({}, payload, { AppName: "FixMyGlass" }); const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), diff --git a/src/helpers/pricing-helper.js b/src/helpers/pricing-helper.js index 4c87b8cf4..fda5b3b9c 100644 --- a/src/helpers/pricing-helper.js +++ b/src/helpers/pricing-helper.js @@ -12,7 +12,7 @@ export function getDisplayAmountDue(lineItemsObject, includeTax = true) { export function getAmountDue(lineItemsObject, includeTax = true) { let amountDue = 0; const order = baseMixin?.methods?.hasSubmittedOrder() - ? baseMixin?.methods?.getSubmittedOrder().order + ? baseMixin?.methods?.getSubmittedOrder() : store.getters.order; if (lineItemsObject?.glassParts) { diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 0aadfdf5c..8e49f298d 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -173,8 +173,8 @@ export default { const wipersPromise = baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_WIPERS, { - serviceZipCode: submittedOrder.order.serviceLocation.zipCode, - carId: submittedOrder.order.vehicle.carId, + serviceZipCode: submittedOrder.serviceLocation.zipCode, + carId: submittedOrder.vehicle.carId, }, "confirmation" ); @@ -203,10 +203,10 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; - const lineItemsFromSubmittedOrder = deepClone(submittedOrder.order.lineItems); + const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); - const isNoComp = submittedOrder?.order?.policy?.isNoComp; - const isItac = submittedOrder?.order?.policy?.isItac; + const isNoComp = submittedOrder?.policy?.isNoComp; + const isItac = submittedOrder?.policy?.isItac; const isRecalibrationOnOrder = containsRecalParts(lineItemsFromSubmittedOrder); const shouldHideRecalibration = () => { @@ -254,7 +254,7 @@ export default { return containsRecalParts(this?.lineItems); }, ShowCart() { - if (this.isPia && this.submittedOrder?.order?.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; @@ -269,13 +269,13 @@ export default { return this.getCmsContent("ScheduleConfirmationWidget", "Image"); }, CustomerPortalLoginToken() { - return this.submittedOrder?.order.customerPortalLoginToken; + return this.submittedOrder?.customerPortalLoginToken; }, ConfirmationEmailText() { return this.getCmsContent("ConfirmationEmailWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.customer.emailAddress}", - this.submittedOrder?.order.customer?.emailAddress + this.submittedOrder?.customer?.emailAddress ) ?.replaceAll("{custom:MY_ACCOUNT_URL}", applicationConfig.MY_ACCOUNT) ?.replaceAll("{custom:CUSTOMER_PORTAL_LOGIN_TOKEN}", this.CustomerPortalLoginToken) @@ -283,88 +283,88 @@ export default { ?.replaceAll(">", ">"); }, ScheduleDate() { - return this.submittedOrder?.order.schedule?.date; + return this.submittedOrder?.schedule?.date; }, AppointmentType() { - return this.submittedOrder?.order.serviceLocation?.appointmentType; + return this.submittedOrder?.serviceLocation?.appointmentType; }, ScheduleStartTime() { - return this.submittedOrder?.order.schedule?.startTime; + return this.submittedOrder?.schedule?.startTime; }, ScheduleEndTime() { - return this.submittedOrder?.order.schedule?.endTime; + return this.submittedOrder?.schedule?.endTime; }, InShopWordingText() { return this.getCmsContent("InShopWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, MobileWordingText() { return this.getCmsContent("MobileWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, DropOffWordingText() { return this.getCmsContent("DropOffWordingWidget", "BodyText") ?.replaceAll( "{custom:submittedOrder.vehicle.year}", - this.submittedOrder?.order?.vehicle?.year + this.submittedOrder?.vehicle?.year ) ?.replaceAll( "{custom:submittedOrder.vehicle.make}", - this.submittedOrder?.order?.vehicle?.make + this.submittedOrder?.vehicle?.make ) ?.replaceAll( "{custom:submittedOrder.vehicle.model}", - this.submittedOrder?.order?.vehicle?.model + this.submittedOrder?.vehicle?.model ); }, ServiceLocationAddress() { - return this.submittedOrder?.order?.serviceLocation?.address; + return this.submittedOrder?.serviceLocation?.address; }, ServiceLocationAddress2() { - return this.submittedOrder?.order?.serviceLocation?.address2; + return this.submittedOrder?.serviceLocation?.address2; }, ServiceLocationCity() { - return this.submittedOrder?.order?.serviceLocation?.city; + return this.submittedOrder?.serviceLocation?.city; }, ServiceLocationState() { - return this.submittedOrder?.order?.serviceLocation?.state; + return this.submittedOrder?.serviceLocation?.state; }, ServiceLocationZipCode() { - return this.submittedOrder?.order?.serviceLocation?.zipCode; + return this.submittedOrder?.serviceLocation?.zipCode; }, ProviderAddress() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.streetAddress; + return this.submittedOrder?.serviceLocation?.provider?.address?.streetAddress; }, ProviderCity() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.city; + return this.submittedOrder?.serviceLocation?.provider?.address?.city; }, ProviderState() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.state; + return this.submittedOrder?.serviceLocation?.provider?.address?.state; }, ProviderZipCode() { - return this.submittedOrder?.order?.serviceLocation?.provider?.address?.zipCode; + return this.submittedOrder?.serviceLocation?.provider?.address?.zipCode; }, AppointmentWordingText() { if (this.AppointmentType == AppointmentTypeStrings.MOBILE) { @@ -408,7 +408,7 @@ export default { } if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) { if ( - this.submittedOrder?.order?.schedule?.routeCode.includes( + this.submittedOrder?.schedule?.routeCode.includes( RouteCodeFlags.OVERNIGHT_DROP_OFF ) ) { @@ -420,22 +420,22 @@ export default { return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`; }, vehicleBannerImageUrl() { - return this.submittedOrder?.order?.vehicle.imageUrl; + return this.submittedOrder?.vehicle.imageUrl; }, damageInfo() { - return this.submittedOrder?.order?.damage; + return this.submittedOrder?.damage; }, isMSRFeeApplicable() { - return this.submittedOrder?.order?.isMSRFeeApplicable; + return this.submittedOrder?.isMSRFeeApplicable; }, isInsurance() { - return this.submittedOrder?.order?.payment?.isInsurance; + return this.submittedOrder?.payment?.isInsurance; }, isNoComp() { - return this.submittedOrder?.order?.policy?.isNoComp; + return this.submittedOrder?.policy?.isNoComp; }, isItac() { - return this.submittedOrder?.order?.policy?.isItac; + return this.submittedOrder?.policy?.isItac; }, hasVapsInCart() { if (this.lineItems?.vaps?.length > 0) { @@ -448,28 +448,28 @@ export default { if (this.isNoComp || this.isItac) { return coverageStatus.NOCOMP; } else { - return this.submittedOrder?.order?.payment?.insuranceCoverage?.coverageStatus; + return this.submittedOrder?.payment?.insuranceCoverage?.coverageStatus; } }, currentDeductible() { - return this.submittedOrder?.order?.policy?.currentDeductible; + return this.submittedOrder?.policy?.currentDeductible; }, insuranceCompanyName() { - return this.submittedOrder?.order?.policy?.insuranceCompanyName; + return this.submittedOrder?.policy?.insuranceCompanyName; }, isPia() { - return this.submittedOrder?.order?.payment?.isPia; + return this.submittedOrder?.payment?.isPia; }, AppointmentDuration() { - const durationMaximum = this.submittedOrder?.order?.schedule?.jobMaxMinutes; - const durationMinimum = this.submittedOrder?.order?.schedule?.jobMinMinutes; + const durationMaximum = this.submittedOrder?.schedule?.jobMaxMinutes; + const durationMinimum = this.submittedOrder?.schedule?.jobMinMinutes; const durationLengthString = "Duration: "; if ( - this.submittedOrder?.order?.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?.order?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) + this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF) ) { return durationLengthString.concat("Overnight"); } else { @@ -541,7 +541,7 @@ export default { parseInt(this.donationAmount), false ); - this.lineItems = deepClone(this.getSubmittedOrder().order.lineItems); + this.lineItems = deepClone(this.getSubmittedOrder().lineItems); } else { this.showDonationError = true; this.showDonationSuccess = false; diff --git a/src/store/index.js b/src/store/index.js index 05cb572e1..032660c6f 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1854,7 +1854,6 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } - url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3264,10 +3263,7 @@ export const actions = { } // create a submitted order object from vuex. - const submittedOrder = { - order: context.state.order, - applicationUser: context.state.applicationUser, - }; + const submittedOrder = context.state.order; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; From 77c007c4447ff5a05db4614605269ea9cb1db4cb Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 13:19:44 -0400 Subject: [PATCH 03/12] CASH-462 | Rename and restructure submittedOrder Rename to submittedState Add an applicationUser attribute --- src/constants/store-actions.js | 6 +-- .../add-to-calendar/add-to-calendar.vue | 2 +- src/layouts/confirmation/confirmation.vue | 7 +--- .../payment-pia-return/payment-pia-return.vue | 2 +- src/layouts/payment/payment.vue | 2 +- src/layouts/vehicle/vehicle.vue | 2 +- src/mixins/analytics-mixin.js | 2 +- src/mixins/analytics-mixin.spec.js | 2 +- src/mixins/base-mixin.js | 12 +++++- src/router/index.js | 4 +- src/store/index.js | 39 ++++++++++++------- 11 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index e7cb38953..1e8945c49 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -109,9 +109,9 @@ const storeActions = { SAVE_IS_RECAL_ACK_OPT_IN: "saveIsRecalAckOptIn", SAVE_IS_MSR_FEE_APPLICABLE: "saveIsMSRFeeApplicable", - CREATE_SUBMITTED_ORDER: "createSubmittedOrder", - RESET_SUBMITTED_ORDER: "resetSubmittedOrder", - ADD_DONATION_TO_SUBMITTED_ORDER: "addDonationToSubmittedOrder", + CREATE_SUBMITTED_STATE: "createSubmittedState", + RESET_SUBMITTED_STATE: "resetSubmittedState", + ADD_DONATION_TO_SUBMITTED_STATE: "addDonationToSubmittedState", RESET_EXTERNAL_PARAMETER_STATE: "resetExternalParameterState", UPDATE_EXTERNAL_PARAMETER_MMS: "updateExternalParameterMMS", 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 1fef02247..c986e0366 100644 --- a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue +++ b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue @@ -115,7 +115,7 @@ export default { }, ServiceType() { const isRepair = this.getSubmittedOrder()?.damage.isRepair; - const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedOrder; + const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedState; if (!isRepair) { if (funnelHasRecalibrationPart) { return serviceType.REPLACEMENT_AND_RECALIBRATION; diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 8e49f298d..7e9cfe71e 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -164,7 +164,7 @@ export default { } // Create order - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); // This nulls the Store order + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); // This nulls the Store order // Call APIs const submittedOrder = baseMixin.methods.getSubmittedOrder(); @@ -255,11 +255,8 @@ export default { }, ShowCart() { 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; } - return true; }, ScheduleConfirmationText() { @@ -537,7 +534,7 @@ export default { this.showDonationSuccess = true; this.showDonationError = false; await baseMixin.methods.dispatchStoreAction( - storeActions.ADD_DONATION_TO_SUBMITTED_ORDER, + storeActions.ADD_DONATION_TO_SUBMITTED_STATE, parseInt(this.donationAmount), false ); diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue index b9f19f64a..f0b4433ea 100644 --- a/src/layouts/payment-pia-return/payment-pia-return.vue +++ b/src/layouts/payment-pia-return/payment-pia-return.vue @@ -192,7 +192,7 @@ export default { } this.$refs.loadingModal.isModalVisible = false; - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route); }, }, diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index abf06927b..3c87f85f2 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -683,7 +683,7 @@ export default { submitAfterSave: true, }); - await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER); + await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE); window.location = applicationConfig.CONFIRMATION_URL; } catch (error) { console.log("error: response from submit work order(payment pg):" + error.message); diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index 12e7268fa..5f769b9b7 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -448,7 +448,7 @@ export default { this.displayNoServiceAlert = false; }, async forwardButtonAction() { - await this.dispatchStoreAction(storeActions.RESET_SUBMITTED_ORDER); + await this.dispatchStoreAction(storeActions.RESET_SUBMITTED_STATE); this.dispatchStoreAction( storeActions.SAVE_VEHICLE, { diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index e59ec5039..d6e608d4b 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -337,7 +337,7 @@ export default { // Recalibration if (hasSubmittedOrder) { - payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedOrder; + payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedState; } else { payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnOrder; } diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js index a4b4672bb..711702c4a 100644 --- a/src/mixins/analytics-mixin.spec.js +++ b/src/mixins/analytics-mixin.spec.js @@ -425,7 +425,7 @@ describe("analyticsMixin.js", () => { workOrderId: "222222222222", }; store.getters.isRecalibrationOnOrder = true; - store.getters.isRecalibrationOnSubmittedOrder = false; + store.getters.isRecalibrationOnSubmittedState = false; }); test("Pushes to data layer if nominal", () => { diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 151d17dd9..1c33640f8 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -198,10 +198,18 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem("submittedOrder")); + return JSON.parse(window.sessionStorage.getItem("submittedState"))?.order; }, hasSubmittedOrder() { - return window.sessionStorage.getItem("submittedOrder") !== null; + const submittedState = window.sessionStorage.getItem("submittedState"); + return submittedState !== null && submittedState.order !== null; + }, + getSubmittedApplicationUser() { + return JSON.parse(window.sessionStorage.getItem("submittedState"))?.applicationUser; + }, + hasSubmittedApplicationUser() { + const submittedState = window.sessionStorage.getItem("submittedState"); + return submittedState !== null && submittedState.applicationUser !== null; }, }, computed: { diff --git a/src/router/index.js b/src/router/index.js index 345790734..e2263b32d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -93,10 +93,10 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem("submittedOrder") !== null) { + if (window.sessionStorage.getItem("submittedState") !== null) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(" --has submittedOrder go to confirmation"); + log(" --has submittedState go to confirmation"); } } // On entering the funnel "fresh", read cookie information, decide what to do next. diff --git a/src/store/index.js b/src/store/index.js index 032660c6f..cdd81d164 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -822,8 +822,8 @@ export const getters = { }, coverageIsVerified: (state) => { let order; - if (window.sessionStorage.getItem("submittedOrder") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedOrder")); + if (window.sessionStorage.getItem("submittedState") !== null) { + order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; } else { order = state.order; } @@ -850,10 +850,10 @@ export const getters = { isRecalibrationOnOrder: (state) => { return getHasRecalibrationPart(state); }, - isRecalibrationOnSubmittedOrder: (state) => { - if (window.sessionStorage.getItem("submittedOrder") !== null) { + isRecalibrationOnSubmittedState: (state) => { + if (window.sessionStorage.getItem("submittedState") !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem("submittedOrder")), + order: JSON.parse(window.sessionStorage.getItem("submittedState")).order, }); } @@ -861,8 +861,8 @@ export const getters = { }, shouldHideRecalibration: (state) => { var order; - if (window.sessionStorage.getItem("submittedOrder") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedOrder")); + if (window.sessionStorage.getItem("submittedState") !== null) { + order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; } else { order = state.order; } @@ -3257,19 +3257,22 @@ export const actions = { return false; }, - createSubmittedOrder(context) { - if (window.sessionStorage.getItem("submittedOrder") !== null) { + createSubmittedState(context) { + if (window.sessionStorage.getItem("submittedState") !== null) { return; } // create a submitted order object from vuex. - const submittedOrder = context.state.order; + const submittedState = { + order: context.state.order, + applicationUser: context.state.applicationUser + }; const experiments = context.state.applicationUser.experiments; const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder)); + window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3288,10 +3291,11 @@ export const actions = { context.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies); }, - addDonationToSubmittedOrder(context, donationAmount) { + addDonationToSubmittedState(context, donationAmount) { console.log("running addDonationToSubmittedOrder()... donationAmount: ", donationAmount); const submittedOrder = deepClone(baseMixin.methods.getSubmittedOrder()); + const submittedApplicationUser = deepClone(baseMixin.methods.getSubmittedApplicationUser()); if (donationAmount > 0) { console.log( @@ -3320,13 +3324,18 @@ export const actions = { }); submittedOrder.lineItems.supportingItems = nonDonationItems; } + + const submittedState = { + order: submittedOrder, + applicationUser: submittedApplicationUser + } // set to local storage - window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder)); + window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); }, - resetSubmittedOrder(context) { + resetSubmittedState(context) { // clear from local storage - window.sessionStorage.removeItem("submittedOrder"); + window.sessionStorage.removeItem("submittedState"); }, resetExternalParameterState(context) { if (context.getters.isExternalParameter) { From b90c3644d6e7151fec00b41eb0c1df320b4717c8 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 13:20:25 -0400 Subject: [PATCH 04/12] CASH-462 | Styling --- src/store/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index cdd81d164..4d079056e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -3265,7 +3265,7 @@ export const actions = { // create a submitted order object from vuex. const submittedState = { order: context.state.order, - applicationUser: context.state.applicationUser + applicationUser: context.state.applicationUser, }; const experiments = context.state.applicationUser.experiments; @@ -3327,8 +3327,8 @@ export const actions = { const submittedState = { order: submittedOrder, - applicationUser: submittedApplicationUser - } + applicationUser: submittedApplicationUser, + }; // set to local storage window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); }, From 43d1353e52776e9832dc826e691305c4967cbc99 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:15:39 -0400 Subject: [PATCH 05/12] CASH-462 | Add constant for submittedState --- src/constants/session-storage.js | 3 +++ src/mixins/base-mixin.js | 9 +++++---- src/router/index.js | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 src/constants/session-storage.js diff --git a/src/constants/session-storage.js b/src/constants/session-storage.js new file mode 100644 index 000000000..577fa4c0f --- /dev/null +++ b/src/constants/session-storage.js @@ -0,0 +1,3 @@ +export const sessionStorageKeyConstants = { + SUBMITTED_STATE: "submittedState" +} \ No newline at end of file diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 1c33640f8..73677726a 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -1,6 +1,7 @@ import store from "@/store"; import { storeActions } from "@/constants/store-actions.js"; import { storeMutations } from "@/constants/store-mutations.js"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; import { vehicleCategories } from "@/constants/vehicle-categories.js"; import { routerParams } from "@/router/router-constants/router-params"; @@ -198,17 +199,17 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem("submittedState"))?.order; + return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.order; }, hasSubmittedOrder() { - const submittedState = window.sessionStorage.getItem("submittedState"); + const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); return submittedState !== null && submittedState.order !== null; }, getSubmittedApplicationUser() { - return JSON.parse(window.sessionStorage.getItem("submittedState"))?.applicationUser; + return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.applicationUser; }, hasSubmittedApplicationUser() { - const submittedState = window.sessionStorage.getItem("submittedState"); + const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); return submittedState !== null && submittedState.applicationUser !== null; }, }, diff --git a/src/router/index.js b/src/router/index.js index e2263b32d..95aca54d8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -2,6 +2,7 @@ import { createWebHistory, createRouter } from "vue-router"; import { storeActions } from "@/constants/store-actions"; import { storeMutations } from "../constants/store-mutations"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; @@ -39,6 +40,7 @@ import { shouldStripPromoQueryString } from "@/helpers/promotions-helper"; import bailout from "@/layouts/bailout/bailout"; import { nextTick } from "vue"; import { getBoolFromString } from "@/helpers/boolean-helper"; +import { sessionStorageKeyConstants } from "../constants/session-storage"; const routes = [ { @@ -93,10 +95,10 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(" --has submittedState go to confirmation"); + log(` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation`); } } // On entering the funnel "fresh", read cookie information, decide what to do next. From af9775aa3b8e470f1360b1160448b3a408e65a24 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:17:31 -0400 Subject: [PATCH 06/12] CASH-462 | Prettier changes --- src/constants/session-storage.js | 6 +++--- src/mixins/base-mixin.js | 16 ++++++++++++---- src/router/index.js | 10 +++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/constants/session-storage.js b/src/constants/session-storage.js index 577fa4c0f..589dd6b71 100644 --- a/src/constants/session-storage.js +++ b/src/constants/session-storage.js @@ -1,3 +1,3 @@ -export const sessionStorageKeyConstants = { - SUBMITTED_STATE: "submittedState" -} \ No newline at end of file +export const sessionStorageKeyConstants = { + SUBMITTED_STATE: "submittedState", +}; diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 73677726a..b29eae8c1 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -199,17 +199,25 @@ export default { } }, getSubmittedOrder() { - return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.order; + return JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + )?.order; }, hasSubmittedOrder() { - const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); + const submittedState = window.sessionStorage.getItem( + sessionStorageKeyConstants.SUBMITTED_STATE + ); return submittedState !== null && submittedState.order !== null; }, getSubmittedApplicationUser() { - return JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE))?.applicationUser; + return JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + )?.applicationUser; }, hasSubmittedApplicationUser() { - const submittedState = window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE); + const submittedState = window.sessionStorage.getItem( + sessionStorageKeyConstants.SUBMITTED_STATE + ); return submittedState !== null && submittedState.applicationUser !== null; }, }, diff --git a/src/router/index.js b/src/router/index.js index 95aca54d8..5ec909f97 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -40,7 +40,6 @@ import { shouldStripPromoQueryString } from "@/helpers/promotions-helper"; import bailout from "@/layouts/bailout/bailout"; import { nextTick } from "vue"; import { getBoolFromString } from "@/helpers/boolean-helper"; -import { sessionStorageKeyConstants } from "../constants/session-storage"; const routes = [ { @@ -95,10 +94,15 @@ const routes = [ log(" --to.query.fmgPage ", to.query?.fmgPage); // Intercept all navigation if a submitted order exists in storage - if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + if ( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== + null + ) { if (to.query.fmgPage !== funnelStartPageName) { to.query.fmgPage = fmgPageValues.CONFIRMATION; - log(` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation`); + log( + ` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation` + ); } } // On entering the funnel "fresh", read cookie information, decide what to do next. From fe666f381abce1e3c9ce945010e1335c2b6656f3 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Thu, 3 Apr 2025 14:23:09 -0400 Subject: [PATCH 07/12] CASH-462 | Utilize new constant in the store --- src/store/index.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 4d079056e..673bf36ee 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,6 +1,7 @@ import { createStore } from "vuex"; import { endpoints } from "@/constants/endpoints.js"; import { storeMutations } from "@/constants/store-mutations"; +import { sessionStorageKeyConstants } from "@/constants/session-storage.js"; import { getDateForSavedSessionTimeout } from "@/helpers/heritage-integration/session-helper"; import createPersistedState from "vuex-persistedstate"; import globalMethods from "@/global-methods"; @@ -822,8 +823,8 @@ export const getters = { }, coverageIsVerified: (state) => { let order; - if (window.sessionStorage.getItem("submittedState") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; } else { order = state.order; } @@ -851,9 +852,9 @@ export const getters = { return getHasRecalibrationPart(state); }, isRecalibrationOnSubmittedState: (state) => { - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem("submittedState")).order, + order: JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order, }); } @@ -861,8 +862,8 @@ export const getters = { }, shouldHideRecalibration: (state) => { var order; - if (window.sessionStorage.getItem("submittedState") !== null) { - order = JSON.parse(window.sessionStorage.getItem("submittedState")).order; + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { + order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; } else { order = state.order; } @@ -3258,7 +3259,7 @@ export const actions = { }, createSubmittedState(context) { - if (window.sessionStorage.getItem("submittedState") !== null) { + if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return; } @@ -3272,7 +3273,7 @@ export const actions = { const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); + window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3330,12 +3331,12 @@ export const actions = { applicationUser: submittedApplicationUser, }; // set to local storage - window.sessionStorage.setItem("submittedState", JSON.stringify(submittedState)); + window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); }, resetSubmittedState(context) { // clear from local storage - window.sessionStorage.removeItem("submittedState"); + window.sessionStorage.removeItem(sessionStorageKeyConstants.SUBMITTED_STATE); }, resetExternalParameterState(context) { if (context.getters.isExternalParameter) { From 14165f72fdde93c7822870c5dbdc72d813fcb56a Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 10:45:35 -0400 Subject: [PATCH 08/12] CASH-462 | Add applicationUser information to submittedState Refactor experiment mixin --- src/helpers/experiment-helper.js | 20 +++++++++++ src/layouts/confirmation/confirmation.vue | 22 ++++++------ src/mixins/experiment-mixin.js | 32 ++++++++++++----- src/store/index.js | 43 +++++++++++++---------- 4 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 src/helpers/experiment-helper.js diff --git a/src/helpers/experiment-helper.js b/src/helpers/experiment-helper.js new file mode 100644 index 000000000..c0c094529 --- /dev/null +++ b/src/helpers/experiment-helper.js @@ -0,0 +1,20 @@ +export function getExperimentSettingsFromExperimentList(experimentList) { + return ( + experimentList + .filter((x) => !!x.isActive) + .map((x) => x.settings) + .reduce((r, c) => Object.assign(r, c), {}) ?? {} + ); +} + +export function getSettingValue(settingName, experimentSettings) { + return hasSetting(settingName, experimentSettings) ? experimentSettings[settingName] : null; +} + +export function hasSettingEqualTo(settingName, settingValue, experimentSettings) { + return experimentSettings[settingName] == settingValue; +} + +export function hasSetting(settingName, experimentSettings) { + return Object.hasOwn(experimentSettings, settingName); +} diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index 7e9cfe71e..40fa73dbe 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -65,7 +65,7 @@ :isNoComp="isNoComp" :isMSRFeeApplicable="isMSRFeeApplicable" /> -
+
{ let order; if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; + order = JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ).order; } else { order = state.order; } @@ -854,29 +860,24 @@ export const getters = { isRecalibrationOnSubmittedState: (state) => { if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { return getHasRecalibrationPart({ - order: JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order, + order: JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ).order, }); } - return false; }, shouldHideRecalibration: (state) => { - var order; if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - order = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)).order; - } else { - order = state.order; + state = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)); } - + let order = state.order; + let applicationUser = state.applicationUser; if (order.payment.isInsurance) { return false; } - return ( - experimentMixin.methods - .getSettingValue(experimentSettings.RECAL_PRICE_REMOVE) - ?.toLowerCase() === "true" && getters.isRecalibrationOnOrder(state) - ); + return (hasSettingEqualTo(experimentSettings.RECAL_PRICE_REMOVE, "true", getExperimentSettingsFromExperimentList(applicationUser.experiments)) && getters.isRecalibrationOnOrder(state)) }, areRearWipersOnOrder: (state) => { return !!state.order.lineItems.vaps?.some( @@ -975,10 +976,7 @@ export const getters = { }; }, experimentSettings: (state) => - state.applicationUser.experiments - .filter((x) => !!x.isActive) - .map((x) => x.settings) - .reduce((r, c) => Object.assign(r, c), {}) ?? {}, + getExperimentSettingsFromExperimentList(state.applicationUser.experiments), isVerifiedAndDeductibleZeroConfirmed: (state) => { // used in CMS on /payment-method in Header Sub Text, for FunnelSubHeaderWidget on cart pages @@ -1855,6 +1853,7 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } + url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, @@ -3273,7 +3272,10 @@ export const actions = { const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage - window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); + window.sessionStorage.setItem( + sessionStorageKeyConstants.SUBMITTED_STATE, + JSON.stringify(submittedState) + ); window.sessionStorage.setItem("createNewSessionForHeritage", true); // clear vuex @@ -3331,7 +3333,10 @@ export const actions = { applicationUser: submittedApplicationUser, }; // set to local storage - window.sessionStorage.setItem(sessionStorageKeyConstants.SUBMITTED_STATE, JSON.stringify(submittedState)); + window.sessionStorage.setItem( + sessionStorageKeyConstants.SUBMITTED_STATE, + JSON.stringify(submittedState) + ); }, resetSubmittedState(context) { From 23e16f02f4e25dbd35dc64b734893e221c463527 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 10:46:35 -0400 Subject: [PATCH 09/12] CASH-462 | lnter changes --- src/mixins/experiment-mixin.js | 9 ++++++--- src/store/index.js | 14 +++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js index 079c5fe53..474945a54 100644 --- a/src/mixins/experiment-mixin.js +++ b/src/mixins/experiment-mixin.js @@ -14,7 +14,8 @@ export default { settingValue, experimentList = store.getters.applicationUser.experiments ) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.hasSettingEqualTo( settingName, settingValue, @@ -22,11 +23,13 @@ export default { ); }, hasSetting(settingName, experimentList = store.getters.applicationUser.experiments) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.hasSetting(settingName, experimentSettings); }, getSettingValue(settingName, experimentList = store.getters.applicationUser.experiments) { - const experimentSettings = experimentHelper.getExperimentSettingsFromExperimentList(experimentList); + const experimentSettings = + experimentHelper.getExperimentSettingsFromExperimentList(experimentList); return experimentHelper.getSettingValue(settingName, experimentSettings); }, }, diff --git a/src/store/index.js b/src/store/index.js index 0257d8b1f..26b7c3286 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -23,7 +23,7 @@ import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { deepClone } from "@/helpers/object-helper"; import { getExperimentSettingsFromExperimentList, - hasSettingEqualTo + hasSettingEqualTo, } from "../helpers/experiment-helper"; import { queryStrings } from "@/constants/query-strings"; import { partTypeStrings } from "@/constants/part-type-strings"; @@ -869,7 +869,9 @@ export const getters = { }, shouldHideRecalibration: (state) => { if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) { - state = JSON.parse(window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)); + state = JSON.parse( + window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) + ); } let order = state.order; let applicationUser = state.applicationUser; @@ -877,7 +879,13 @@ export const getters = { return false; } - return (hasSettingEqualTo(experimentSettings.RECAL_PRICE_REMOVE, "true", getExperimentSettingsFromExperimentList(applicationUser.experiments)) && getters.isRecalibrationOnOrder(state)) + return ( + hasSettingEqualTo( + experimentSettings.RECAL_PRICE_REMOVE, + "true", + getExperimentSettingsFromExperimentList(applicationUser.experiments) + ) && getters.isRecalibrationOnOrder(state) + ); }, areRearWipersOnOrder: (state) => { return !!state.order.lineItems.vaps?.some( From 565c9408f63024948756e66162bbf7d3278bfe84 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 11:27:52 -0400 Subject: [PATCH 10/12] CASH-462 | remove heavy truck work around --- src/store/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index 26b7c3286..36a459d80 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1861,7 +1861,6 @@ export const actions = { if (windshieldPartWithRecal) { url += `/${windshieldPartWithRecal.partNumber}`; } - url += "/false"; return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, From 2d9b59eab4609f590fbf08dfcec1c71b6896dc5b Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 13:11:55 -0400 Subject: [PATCH 11/12] CASH-462 | Update unit tests --- src/layouts/schedule/schedule.spec.js | 4 +++- src/layouts/service-location/service-location.spec.js | 1 + src/layouts/service-zip/service-zip.spec.js | 5 +++++ src/mixins/experiment-mixin.spec.js | 10 ++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/layouts/schedule/schedule.spec.js b/src/layouts/schedule/schedule.spec.js index 3344e3d27..0e519742a 100644 --- a/src/layouts/schedule/schedule.spec.js +++ b/src/layouts/schedule/schedule.spec.js @@ -7,7 +7,6 @@ import { getMountOptions } from "@/helpers/unit-test-helper.js"; import store from "@/store"; import router from "@/router"; import baseMixin from "../../mixins/base-mixin"; -import { experimentSettings } from "../../constants/experiments"; // Mock basemixin jest.mock("@/mixins/base-mixin.js", () => ({ @@ -147,6 +146,9 @@ beforeEach(() => { jest.restoreAllMocks(); jest.clearAllMocks(); store.getters = { + applicationUser: { + experiments: [] + }, order: { schedule: { date: "2019-01-01", diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index fb34f3921..e0caf3694 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -174,6 +174,7 @@ const mockMixin = { beforeEach(() => { store.getters = { + applicationUser: {experiments: []}, lineItems: { supportingItems: [ { diff --git a/src/layouts/service-zip/service-zip.spec.js b/src/layouts/service-zip/service-zip.spec.js index 773157980..cb1406ce5 100644 --- a/src/layouts/service-zip/service-zip.spec.js +++ b/src/layouts/service-zip/service-zip.spec.js @@ -173,9 +173,14 @@ function resetMockStoreData() { }; } +const applicationUser = { + experiments: [] +}; + function applyMockStoreDataToGetters() { store.getters = { experimentSettings: mockExperimentSettings, + applicationUser: applicationUser, order: mockStoreData, damage: mockStoreData.damage, payment: mockStoreData.payment, diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index 1b2bff2f5..2031d63ef 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -135,6 +135,16 @@ function setupMocks({ experimentSettings }) { store.getters = { experimentSettings: experimentSettings ?? testExperimentSettings, + applicationUser: { + experiments: [ + { + isActive: true, + isExposed: true, + settings: experimentSettings ?? testExperimentSettings + } + + ] + } }; const mockComponent = { From d461576ddbae56a604fa37e1ab87bd67d9b6bfd5 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 7 Apr 2025 13:12:39 -0400 Subject: [PATCH 12/12] CASH-462 | Pretter --- src/layouts/schedule/schedule.spec.js | 2 +- src/layouts/service-location/service-location.spec.js | 2 +- src/layouts/service-zip/service-zip.spec.js | 2 +- src/mixins/experiment-mixin.spec.js | 9 ++++----- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/layouts/schedule/schedule.spec.js b/src/layouts/schedule/schedule.spec.js index 0e519742a..3a389aec5 100644 --- a/src/layouts/schedule/schedule.spec.js +++ b/src/layouts/schedule/schedule.spec.js @@ -147,7 +147,7 @@ beforeEach(() => { jest.clearAllMocks(); store.getters = { applicationUser: { - experiments: [] + experiments: [], }, order: { schedule: { diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js index e0caf3694..7dccc1b1e 100644 --- a/src/layouts/service-location/service-location.spec.js +++ b/src/layouts/service-location/service-location.spec.js @@ -174,7 +174,7 @@ const mockMixin = { beforeEach(() => { store.getters = { - applicationUser: {experiments: []}, + applicationUser: { experiments: [] }, lineItems: { supportingItems: [ { diff --git a/src/layouts/service-zip/service-zip.spec.js b/src/layouts/service-zip/service-zip.spec.js index cb1406ce5..3346970cf 100644 --- a/src/layouts/service-zip/service-zip.spec.js +++ b/src/layouts/service-zip/service-zip.spec.js @@ -174,7 +174,7 @@ function resetMockStoreData() { } const applicationUser = { - experiments: [] + experiments: [], }; function applyMockStoreDataToGetters() { diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js index 2031d63ef..8dc3df2b6 100644 --- a/src/mixins/experiment-mixin.spec.js +++ b/src/mixins/experiment-mixin.spec.js @@ -140,11 +140,10 @@ function setupMocks({ experimentSettings }) { { isActive: true, isExposed: true, - settings: experimentSettings ?? testExperimentSettings - } - - ] - } + settings: experimentSettings ?? testExperimentSettings, + }, + ], + }, }; const mockComponent = {