From 635913934242d928c32248a5931fc10ecea30abd Mon Sep 17 00:00:00 2001 From: Katie Date: Tue, 2 Aug 2022 12:17:35 -0400 Subject: [PATCH] CSR-690 Implement navigation to and from heritage --- src/constants/store-mutations.js | 1 + src/global-methods.js | 7 +++- .../heritage-integration/cookie-helper.js | 3 +- .../heritage-integration/navigation-helper.js | 42 ++++++++++++++----- .../heritage-integration/session-helper.js | 25 +++++++---- .../capability-questions.vue | 2 +- src/layouts/estimate/estimate.vue | 5 +-- .../molding-questions/molding-questions.vue | 2 +- src/layouts/vehicle-damage/vehicle-damage.vue | 5 +-- src/layouts/vehicle-make/vehicle-make.vue | 5 ++- src/layouts/vehicle-parts/vehicle-parts.vue | 11 +++-- src/mixins/vehicle-questions-mixin.js | 8 ++-- src/router/index.js | 2 + src/router/router-constants/fmgPage-values.js | 3 +- src/store/index.js | 22 +++++++--- 15 files changed, 95 insertions(+), 48 deletions(-) diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 508f59bf7..44e43ff3e 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -39,6 +39,7 @@ const storeMutations = { UPDATE_REFERRAL_DATE: "updateReferralDate", UPDATE_REFERRAL_CORRELATION_ID: "updateReferralCorrelationId", UPDATE_PARENT_ACCT_NUMBER: "updateParentAcctNumber", + UPDATE_EON: "updateEON", UPDATE_SAVED_SESSION_ID: "updateSavedSessionId", UPDATE_CRM_CUSTOMER_ID: "updateCrmCustomerId", diff --git a/src/global-methods.js b/src/global-methods.js index ffda1e77f..4a2026764 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -9,7 +9,12 @@ import { headerKeys } from "@/constants/header-keys"; export default { callHttpClient({ method, endpoint, payload, logApiCall = true }) { return new Promise((resolve, reject) => { - const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; + // const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; + + let cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; + if (endpoint.includes("/order/")) + cfDistroUrl = "https://localhost:44346" + const payloadAndAnalyticsData = Object.assign({}, payload, { AppName: "FixMyGlass" }); const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings) diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index 775a64fec..fa475beff 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -1,6 +1,7 @@ import { cookieNames } from "@/constants/cookie-names"; import store from "@/store"; import { applicationConfig } from "@/constants/application-config"; +// import { getDateForSavedSessionTimeout } from "@/helpers/heritage-integration/session-helper"; /* Will update the cookie if present, or create a new one if not. @@ -15,7 +16,7 @@ export function updateOrCreateFunnelCookie() { // Set up cookie with all the props. setFunnelCookieProperties({ LastTouched: new Date().toUTCString(), - SavedSessionTimeoutDate: store.getters.applicationUser.savedSessionTimeout, + // SavedSessionTimeoutDate: getDateForSavedSessionTimeout(), DidHeritageFunnelUpdateLast: false, ShouldResetState: false, ReferralNumber: store.getters.order.referralNumber, diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index 3ebb7ded8..c3ec9445a 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -16,7 +16,7 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita if (toRoute.query[queryStrings.START_TYPE] === 'fmg') { // If they have an existing order, return 'heritage' for the page name. if (existingHeritageOrder) { - return 'heritage'; + return fmgPageValues.HERITAGE; } return await getLatestPageForRedirection(); @@ -61,11 +61,16 @@ async function getLatestPageForRedirection() { // If this is a non-CTA navigation, determine where to send the user based on page prerequisites. // This also works if a user has a 'fmg' start_type query string but no current order. // That shouldn't happen, but it's possible. - const vehicleMakeComponent = (await lazyLoadComponent('vehicle-make')()).default; - const vehicleModelComponent = (await lazyLoadComponent('vehicle-model')()).default; - const vehicleStyleComponent = (await lazyLoadComponent('vehicle-style')()).default; - const vehicleDamageComponent = (await lazyLoadComponent('vehicle-damage')()).default; - + const vehicleMakeComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_MAKE);//(await lazyLoadComponent('vehicle-make')()).default; + const vehicleModelComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_MODEL);//(await lazyLoadComponent('vehicle-model')()).default; + const vehicleStyleComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_STYLE);//(await lazyLoadComponent('vehicle-style')()).default; + const vehicleDamageComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_DAMAGE);//(await lazyLoadComponent('vehicle-damage')()).default; + const estimateComponent = await getLazyLoadedComponent(fmgPageValues.ESTIMATE); + const vinLookupComponent = await getLazyLoadedComponent(fmgPageValues.VIN_LOOKUP); + const partQuestionsComponent = await getLazyLoadedComponent(fmgPageValues.PART_QUESTIONS);//(await lazyLoadComponent('part-questions')()).default; + const vehiclePartsComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_PARTS); + const moldingQuestionsComponent = await getLazyLoadedComponent(fmgPageValues.MOLDING_QUESTIONS); + const capabilityQuestionsComponent = await getLazyLoadedComponent(fmgPageValues.CAPABILITY_QUESTIONS);//(await lazyLoadComponent('capability-questions')()).default if (!vehicleMakeComponent.methods.arePagePrerequisitesValid()) { return fmgPageValues.VEHICLE_YEAR; @@ -75,15 +80,28 @@ async function getLatestPageForRedirection() { return fmgPageValues.VEHICLE_MODEL; } else if (!vehicleDamageComponent.methods.arePagePrerequisitesValid()) { return fmgPageValues.VEHICLE_STYLE; - } else if (store.getters.damage.isRepair == null || !store.getters.vehicle.carId) { + } else if (!estimateComponent.methods.arePagePrerequisitesValid()) { return fmgPageValues.VEHICLE_DAMAGE; } else { - if (store.getters.vehicle.vin) { + if (capabilityQuestionsComponent.methods.arePagePrerequisitesValid()) { + return fmgPageValues.CAPABILITY_QUESTIONS; + } + else if (moldingQuestionsComponent.methods.arePagePrerequisitesValid()) { + return fmgPageValues.MOLDING_QUESTIONS; + } + else if (vehiclePartsComponent.methods.arePagePrerequisitesValid()) { + return fmgPageValues.VEHICLE_PARTS; + } + else if (partQuestionsComponent.methods.arePagePrerequisitesValid()) { + return fmgPageValues.PART_QUESTIONS; + } + else if (store.getters.vehicle.vin) { return fmgPageValues.VIN_LOOKUP; - } else { + } + else { return fmgPageValues.ESTIMATE; } - } + } } /* @@ -126,4 +144,8 @@ function isVinRelatedPage(toRoute) { fmgPageValue === fmgPageValues.ADDRESS_LOOKUP || fmgPageValue === fmgPageValues.ADDRESS_VEHICLES || fmgPageValue === fmgPageValues.ESTIMATE; +} + +async function getLazyLoadedComponent(pageName) { + return (await lazyLoadComponent(pageName)()).default; } \ No newline at end of file diff --git a/src/helpers/heritage-integration/session-helper.js b/src/helpers/heritage-integration/session-helper.js index ca50a4e7b..c03288b42 100644 --- a/src/helpers/heritage-integration/session-helper.js +++ b/src/helpers/heritage-integration/session-helper.js @@ -28,23 +28,34 @@ export function isAnalyticsSessionStillActive() { */ export function isSavedSessionStillActive() { if (getFunnelCookie() !== null) { - const savedSessionTimeStamp = new Date(getFunnelCookie().SavedSessionTimeoutDate); + const savedSessionTimeStamp = new Date(getSavedSessionTimeoutDate()); const isSavedSessionTimedOut = (new Date(new Date().toUTCString()) > savedSessionTimeStamp); - if (isSavedSessionTimedOut) { - return false; - } - - return true; + return !isSavedSessionTimedOut; } } /* -Function to get the date for the saved session timeout. +Function to calculate the date for the saved session timeout. */ export function getDateForSavedSessionTimeout() { const currentDate = new Date(new Date().toUTCString()) currentDate.setDate(currentDate.getDate() + applicationConfig.SAVED_SESSION_TIMEOUT_DAYS) return currentDate.toUTCString(); +} + +/** Function to get saved session timeout date based on values in the cookie */ +function getSavedSessionTimeoutDate() { + console.log("getFunnelCookie()?.LastTouched: ", getFunnelCookie()?.LastTouched) + let lastTouched = new Date(getFunnelCookie()?.LastTouched); + lastTouched = lastTouched ? lastTouched : new Date().toUTCString(); + let savedSessionTimeoutDate = lastTouched; + savedSessionTimeoutDate.setDate(savedSessionTimeoutDate.getDate() + applicationConfig.SAVED_SESSION_TIMEOUT_DAYS); + + // const test = lastTouched + // ? lastTouched.setDate(lastTouched.getDate() + applicationConfig.SAVED_SESSION_TIMEOUT_DAYS) + // : getDateForSavedSessionTimeout(); + + return savedSessionTimeoutDate; } \ No newline at end of file diff --git a/src/layouts/capability-questions/capability-questions.vue b/src/layouts/capability-questions/capability-questions.vue index 69fc8aad5..a29aa3779 100644 --- a/src/layouts/capability-questions/capability-questions.vue +++ b/src/layouts/capability-questions/capability-questions.vue @@ -112,7 +112,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - return true; // TODO - DO TRUE TEST OF PAGEDATA + return false; // TODO - DO TRUE TEST OF PAGEDATA // return Object.keys(store.getters.pageData(fmgPageValues.CAPABILITY_QUESTIONS)).length > 0; }, showThisPartQuestionChain(part, i) { diff --git a/src/layouts/estimate/estimate.vue b/src/layouts/estimate/estimate.vue index 3949d4c41..3cc6b1149 100644 --- a/src/layouts/estimate/estimate.vue +++ b/src/layouts/estimate/estimate.vue @@ -80,10 +80,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - if(store.getters.damage.isRepair!=null){ - return true; - } - return false; + return store.getters.damage.isRepair != null; }, backButtonAction() { // route to move backwards diff --git a/src/layouts/molding-questions/molding-questions.vue b/src/layouts/molding-questions/molding-questions.vue index d2b469a36..f575c9240 100644 --- a/src/layouts/molding-questions/molding-questions.vue +++ b/src/layouts/molding-questions/molding-questions.vue @@ -115,7 +115,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - return true; // TODO - DO TRUE TEST OF PAGEDATA + return false; // TODO - DO TRUE TEST OF PAGEDATA // return Object.keys(store.getters.pageData(fmgPageValues.MOLDING_QUESTIONS)).length > 0; }, showThisPartQuestionChain(part, i) { diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 7d61814f8..a00c91a85 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -155,10 +155,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - if(store.getters.vehicle.carId){ - return true; - } - return false; + return store.getters.vehicle.carId; }, attachCustomEvents(){ diff --git a/src/layouts/vehicle-make/vehicle-make.vue b/src/layouts/vehicle-make/vehicle-make.vue index 8cd77c545..4a2eff8f9 100644 --- a/src/layouts/vehicle-make/vehicle-make.vue +++ b/src/layouts/vehicle-make/vehicle-make.vue @@ -76,9 +76,10 @@ export default { ); }, arePagePrerequisitesValid() { - if (store.getters.vehicle.year){ - return true; + if (store.getters.vehicle.year){ + return true; } + return false; }, }, diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index 290910217..103af885b 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -155,11 +155,11 @@ export default { methods: { arePagePrerequisitesValid() { // Check if isRepair is populated and if the pageData we need is here (Parts data) - return store.getters.damage.isRepair != null && + return store.getters.damage.isRepair != null && store.getters.pageData(fmgPageValues.VEHICLE_PARTS) && Object.keys(store.getters.pageData(fmgPageValues.VEHICLE_PARTS)).length !== 0; }, backButtonAction() { - const hasPartQuestions = this.hasPartQuestions(this.$store.getters.pageData(fmgPageValues.PART_QUESTIONS).partsOrQuestions); + const hasPartQuestions = this.hasPartQuestions(this.$store.getters.pageData(fmgPageValues.PART_QUESTIONS)?.partsOrQuestions); const backNavigationScenario = hasPartQuestions ? this.navigationScenarios.CLICKED_BACK_WITH_PART_QUESTION_ANSWERS : this.navigationScenarios.CLICKED_BACK_WITHOUT_PART_QUESTION_ANSWERS; this.$router.navigate( @@ -175,7 +175,6 @@ export default { this.PartsFromApi.partsOrQuestions )) { for (let [partKey, partValue] of Object.entries(value.parts)) { - const currentPart = this.PartsFromApi.partsOrQuestions[key].parts[partKey]; const isMatched = this.selectedGlassPartNumbers.some( @@ -184,9 +183,9 @@ export default { if (isMatched) { matchedParts.push({ - "glassLocation": value.glassLocation, - "glassName": value.glassName, - "parts": [currentPart] + glassLocation: value.glassLocation, + glassName: value.glassName, + parts: [currentPart] }); } } diff --git a/src/mixins/vehicle-questions-mixin.js b/src/mixins/vehicle-questions-mixin.js index 7a86066a8..1a28fe028 100644 --- a/src/mixins/vehicle-questions-mixin.js +++ b/src/mixins/vehicle-questions-mixin.js @@ -2,18 +2,18 @@ export default { methods: { hasPartQuestions(partsOrQuestions) { - return partsOrQuestions.some(pq => pq.partQuestions?.length > 0); + return partsOrQuestions?.some(pq => pq.partQuestions?.length > 0); }, hasGlassLocationWithMultipleParts(partsOrQuestions) { - return partsOrQuestions.some(pq => pq.parts?.length > 1); + return partsOrQuestions?.some(pq => pq.parts?.length > 1); }, hasChildPartQuestions(partsOrQuestions) { - return partsOrQuestions.some(pq => { + return partsOrQuestions?.some(pq => { return pq.parts?.some(part => part.childPartQuestions?.length > 0); }); }, hasCapabilityQuestions(partsOrQuestions) { - return partsOrQuestions.some(pq => { + return partsOrQuestions?.some(pq => { return pq.parts?.some(part => part.requiresCapabilityQuestions === true); }); }, diff --git a/src/router/index.js b/src/router/index.js index 767b9ab18..4295ae491 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -224,6 +224,8 @@ function navigateToUrl(url, optionalQuery = {}) { externalUrl.searchParams.append(queryKey, optionalQuery[queryKey]); } + externalUrl.searchParams.append("experiments", "ConceptFunnel=ConceptFunnel_V1=ConceptFunnel_TEST=true"); + window.location.assign(externalUrl); } diff --git a/src/router/router-constants/fmgPage-values.js b/src/router/router-constants/fmgPage-values.js index 404a89de9..d924e30de 100644 --- a/src/router/router-constants/fmgPage-values.js +++ b/src/router/router-constants/fmgPage-values.js @@ -14,7 +14,8 @@ const fmgPageValues = { REVEAL: "reveal", ESTIMATE: "estimate", ADDRESS_VEHICLES: "address-vehicles", - QUOTE: "quote" + QUOTE: "quote", + HERITAGE: "heritage" }; export { fmgPageValues }; diff --git a/src/store/index.js b/src/store/index.js index 44dfccfcc..28d231316 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -60,11 +60,12 @@ const getDefaultState = () => { referralDate: null, referralCorrelationId: null, accountNumber: 0, + eon: null }, applicationUser: { eventBus: [], pageData: {}, - savedSessionTimeout: getDateForSavedSessionTimeout(), + // savedSessionTimeout: getDateForSavedSessionTimeout(), saveOrderPromise: null, savedSessionId: null, crmCustomerId: null, @@ -139,6 +140,9 @@ export const mutations = { updateParentAcctNumber(state, parentAcctNumber) { state.order.accountNumber = parentAcctNumber; }, + updateEON(state, eon) { + state.order.eon = eon; + }, updateIsInsurance(state, isInsurance) { state.order.payment.isInsurance = isInsurance; }, @@ -279,6 +283,7 @@ export const mutations = { state.order.referralNumber = orderInformation.referralNumber; state.order.referralDate = orderInformation.referralDate; state.order.referralCorrelationId = orderInformation.referralCorrelationId; + state.order.eon = orderInformation.eon; state.order.vehicle = Object.assign(state.order.vehicle, { year: orderInformation.vehicle?.year, @@ -504,10 +509,11 @@ export const actions = { }, // Misc Actions - updateStoreWithSaveOrderResponse(context, { referralNumber, referralDate, referralCorrelationId, accountNumber, savedSessionId, crmCustomerId }) { + updateStoreWithSaveOrderResponse(context, { referralNumber, referralDate, referralCorrelationId, eon, accountNumber, savedSessionId, crmCustomerId }) { context.commit(storeMutations.UPDATE_REFERRAL_NUMBER, referralNumber); context.commit(storeMutations.UPDATE_REFERRAL_DATE, referralDate); context.commit(storeMutations.UPDATE_REFERRAL_CORRELATION_ID, referralCorrelationId); + context.commit(storeMutations.UPDATE_EON, eon); context.commit(storeMutations.UPDATE_PARENT_ACCT_NUMBER, accountNumber); context.commit(storeMutations.UPDATE_SAVED_SESSION_ID, savedSessionId); context.commit(storeMutations.UPDATE_CRM_CUSTOMER_ID, crmCustomerId); @@ -574,10 +580,11 @@ export const actions = { }, // Misc Actions - setReferralInformation(context, { referralNumber, referralDate, referralCorrelationId }) { + setReferralInformation(context, { referralNumber, referralDate, referralCorrelationId, eon }) { context.commit(storeMutations.UPDATE_REFERRAL_NUMBER, referralNumber); context.commit(storeMutations.UPDATE_REFERRAL_DATE, referralDate); context.commit(storeMutations.UPDATE_REFERRAL_CORRELATION_ID, referralCorrelationId); + context.commit(storeMutations.UPDATE_EON, eon); }, GetExperimentsByUser(context, { userId }) { @@ -650,6 +657,7 @@ export const actions = { const damage = context.getters.damage; const order = context.state.order; const applicationUser = context.getters.applicationUser; + const lineItems = context.state.order.lineItems; return globalMethods.callHttpClient({ method: endpoints.SaveOrder.method, @@ -680,6 +688,9 @@ export const actions = { customer: { emailAddress: order.customer.emailAddress, }, + lineItems: { + glassParts: lineItems.glassParts + }, serviceLocation: { streetAddress: order.serviceLocation.address, city: order.serviceLocation.city, @@ -693,7 +704,6 @@ export const actions = { lastPage: applicationUser.lastPageVisited, crmCustomerId: applicationUser.crmCustomerId, savedSessionId: applicationUser.savedSessionId, - }, }); }, @@ -708,8 +718,8 @@ export const actions = { accountNumber: accountNumber?.toString() }, }).then((response) => { - // clear the state if the existing referral number does not equal what is returned from loadOrder - if (context.state.order.referralNumber != response.data.referralNumber) { + // clear the state if the existing EON does not equal what is returned from loadOrder + if (context.state.order.eon && context.state.order.eon != response.data.eon) { context.commit(storeMutations.RESET_STATE); } context.commit(storeMutations.UPDATE_STATE_WITH_ORDER_INFORMATION, response.data);