From f7ddb5ff6cf08c6f343ceb55dbbb22cd8ccae91c Mon Sep 17 00:00:00 2001 From: FrankRua Date: Mon, 21 Mar 2022 16:18:25 -0400 Subject: [PATCH 1/5] cleanup, setup state for referrals --- src/helpers/heritage-integration-helper.js | 40 +++++++++------- src/router/index.js | 21 ++++----- .../router-constants/router-parameter-keys.js | 4 +- src/store/index.js | 47 +++++++++---------- 4 files changed, 55 insertions(+), 57 deletions(-) diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index e4534631f..61e410604 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -9,8 +9,8 @@ import baseMixin from "../mixins/base-mixin"; export async function loadReferralFromHeritageFunnelIfPresent() { const orderInfo = getHeritageCookieValue(); - // Do nothing if there is no cookie. - if(orderInfo === null){ + // Do nothing if there is no cookie or no correlation id. + if (orderInfo === null || orderInfo.ReferralCorrelationId === undefined) { return; } @@ -22,12 +22,14 @@ export async function loadReferralFromHeritageFunnelIfPresent() { } // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. - await loadOrder(); + await loadOrder(orderInfo.ReferralNumber, orderInfo.ReferralDate, orderInfo.ReferralCorrelationId); } +// Navigate to Heritage Funnel with the proper URL format. +// Will Save the referral if there is one in state, or create a new one if one is not in state. export async function navigateToHeritageFunnel() { await saveOrder(); - const referralCorrelationId = store.getters.referralCorrelationId; + const referralCorrelationId = store.state.order.referralCorrelationId; router.navigate( navigationScenarios.MOVE_TO_HERITAGE_FUNNEL, @@ -42,42 +44,44 @@ export async function navigateToHeritageFunnel() { ); } +// Saves Referral if one is available and commits referral details to state. +// Also sets cookie properties. export async function saveOrder() { - const savedOrderInfo = (await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER)).data; + const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); // Save the referral information back from the store. await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_REFERRAL_INFORMATION, { - referralNumber: savedOrderInfo.referralNumber, - correlationId: savedOrderInfo.referralCorrelationId, - referralDate: savedOrderInfo.referralDate, - }) + referralNumber: savedOrderInfo.data.referralNumber, + correlationId: savedOrderInfo.data.referralCorrelationId, + referralDate: savedOrderInfo.data.referralDate, + }, false); // Set cookie properties. setHeritageCookieProperties({ DidHeritageFunnelUpdateLast: false - }) + }); } -export async function loadOrder() { - const loadOrderInfo = (await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER)).data; - - // Save the data from the loaded order to state. - await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_LOAD_ORDER_DATA, { loadOrderInfo }); +// Loads order based on referral data in cookie, also loads the referral information into state. +export async function loadOrder(referralNumber, referralDate, correlationId) { + const loadOrderResponse = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, + { referralNumber: referralNumber, referralDate: referralDate, correlationId: correlationId } + , false); } // --------- PRIVATE FUNCTIONS --------- /* Start cookie related functions */ export function getHeritageCookieValue() { - console.log("A") + console.log("getHeritageCookieValue called"); const cookieJson = document.cookie ?.split("; ") ?.find(row => row.startsWith(`${cookieNames.ORDER_INFO}=`)) ?.split("=")[1]; - + try { return JSON.parse(cookieJson); - } catch(error) { + } catch (error) { return null; } } diff --git a/src/router/index.js b/src/router/index.js index 1aebd3b77..2dd8e8486 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -4,7 +4,6 @@ import { storeActions } from "@/constants/store-actions"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; -import { routerParameterKeys } from '@/router/router-constants/router-parameter-keys' import { loadReferralFromHeritageFunnelIfPresent, saveOrder, getHeritageCookieValue } from "@/helpers/heritage-integration-helper"; import baseMixin from "@/mixins/base-mixin"; @@ -30,17 +29,17 @@ const routes = [ path: "/", name: "root", async beforeEnter(to, from, next) { - // On entering the concept funnel - if (from.redirectedFrom === undefined) { - // Read cookie information, decide what to do next - loadReferralFromHeritageFunnelIfPresent(); - } - // If we have no query string, or we don't have the FmgPage query string. if (to.query.fmgPage === undefined) { await GoToFunnelStartOn404(next); } else { try { + + // On entering the concept funnel "fresh", read cookie information, decide what to do next. + if (from.redirectedFrom === undefined) { + await loadReferralFromHeritageFunnelIfPresent(); + } + // If we already have our route, go to it. if (router.hasRoute(to.query.fmgPage)) { // Since our route is already in scope, we can grab the component from it and call the arePagePrerequisitesValid function. @@ -135,15 +134,16 @@ async function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery baseMixin.methods.savePageDataToStore(destinationFmgPageValue, optionalPageData); // if cookie and referralNumber exists - if (getHeritageCookieValue()?.ReferralNumber) - saveOrder(); + if (getHeritageCookieValue()?.ReferralNumber) { + await saveOrder(); + } router.push({ name: "root", query: Object.assign(optionalQuery, { fmgPage: destinationFmgPageValue, }), - params: Object.assign(optionalParams, {[routerParameterKeys.FROM_ROUTER_NAVIGATE]: true}) + params: optionalParams }); } else if (matchingScenarioMap.destinationUrl !== undefined) { navigateToUrl(matchingScenarioMap.destinationUrl, optionalQuery); @@ -152,7 +152,6 @@ async function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery // Get navigation map depending on the scenario and the current 'page' you're on. function getNavigationMap(scenario, currentRoute) { - console.log("A") const fmgPageValue = currentRoute.query.fmgPage; const matchedQueryValue = routingTable .filter( diff --git a/src/router/router-constants/router-parameter-keys.js b/src/router/router-constants/router-parameter-keys.js index 7ace86f37..2407d74c4 100644 --- a/src/router/router-constants/router-parameter-keys.js +++ b/src/router/router-constants/router-parameter-keys.js @@ -1,5 +1,3 @@ -const routerParameterKeys = { - FROM_ROUTER_NAVIGATE: 'fromRouterNavigate', - }; +const routerParameterKeys = { }; export { routerParameterKeys }; \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index 14d90744b..62de9805c 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -148,25 +148,25 @@ export const mutations = { // Misc Mutations setLoadOrderInformation(state, orderInformation) { - state.order.referralNumber = orderInformation.ReferralNumber; - state.order.referralDate = orderInformation.ReferralDate; - state.order.referralCorrelationId = orderInformation.CorrelationId; + state.order.referralNumber = orderInformation.referralNumber; + state.order.referralDate = orderInformation.referralDate; + state.order.referralCorrelationId = orderInformation.correlationId; state.order.vehicle = { - year: orderInformation.Year, - make: orderInformation.Make, - model: orderInformation.Model, - style: orderInformation.Style, - carId: orderInformation.CarId, - category: orderInformation.Category, - imageUrl: orderInformation.ImageUrl, - imageVifNumber: orderInformation.ImageVifNumber, - imageColor: orderInformation.ImageColor + year: orderInformation.vehicle.year, + make: orderInformation.vehicle.make, + model: orderInformation.vehicle.model, + style: orderInformation.vehicle.style, + carId: orderInformation.vehicle.carId, + category: orderInformation.vehicle.category, + imageUrl: orderInformation.vehicle.imageUrl, + imageVifNumber: orderInformation.vehicle.imageVifNumber, + imageColor: orderInformation.vehicle.imageVifColor }; - state.order.damage.glassToReplace = orderInformation.GlassToReplace; - state.order.damage.isRepair = orderInformation.IsRepair; - state.order.damage.numberOfChips = orderInformation.NumberOfChips; - state.order.lineItems.glassParts = orderInformation.Parts; - state.order.parentAccountNumber = orderInformation.ParentAccountNumber; + state.order.damage.glassToReplace = orderInformation.glassToReplace; + state.order.damage.isRepair = orderInformation.isRepair; + state.order.damage.numberOfChips = orderInformation.numberOfChips; + state.order.lineItems.glassParts = orderInformation.parts; + state.order.parentAccountNumber = orderInformation.parentAccountNumber; } } @@ -184,9 +184,6 @@ export const getters = { eventBus: (state) => state.applicationUser.eventBus, damage: (state) => state.order.damage, lineItems: (state) => state.order.lineItems, - referralNumber: (state) => state.order.referralNumber, - referralDate: (state) => state.order.referralDate, - referralCorrelationId: (state) => state.order.referralCorrelationId, pageData: (state) => (page) => { return state.applicationUser.pageData[page]; } @@ -321,9 +318,6 @@ export const actions = { context.commit(storeMutations.UPDATE_REFERRAL_DATE, referralDate); context.commit(storeMutations.UPDATE_REFERRAL_CORRELATION_ID, correlationId); }, - setLoadOrderData(context, { loadOrderData }) { - - }, // Parts API Actions getPartsOrQuestions(context, { carId, glassArray, zipCode, vin = '' }) { @@ -357,8 +351,8 @@ export const actions = { }, numberOfChips: damage.numberOfChips, glassToReplace: damage.glassToReplace, - referralNumber: context.getters.referralNumber, - referralDate: context.getters.referralDate + referralNumber: context.state.order.referralNumber, + referralDate: context.state.order.referralDate }, }); }, @@ -372,6 +366,9 @@ export const actions = { referralDate: referralDate, correlationId: correlationId }, + }).then( (response) => { + context.commit(storeMutations.SET_LOAD_ORDER_INFO, response.data); + return response; }); } } From aeca237b0538bd1e1c818297bd5d6710f32638c6 Mon Sep 17 00:00:00 2001 From: FrankRua Date: Mon, 21 Mar 2022 18:46:21 -0400 Subject: [PATCH 2/5] started to re-do cookie --- src/constants/application-config.js | 1 + src/constants/cookie-names.js | 2 +- src/constants/store-mutations.js | 2 +- src/helpers/heritage-integration-helper.js | 114 +++++++++++------- .../heritage-integration-helper.spec.js | 12 +- src/router/index.js | 12 +- src/store/index.js | 2 +- 7 files changed, 88 insertions(+), 57 deletions(-) diff --git a/src/constants/application-config.js b/src/constants/application-config.js index 4b80d25d1..8c033d4cd 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -1,5 +1,6 @@ const applicationConfig = { CONSUMER_APIGATEWAY_URL: process.env.VUE_APP_CONSUMER_API_GATEWAY, + SESSION_TIMEOUT_CONFIG: 30 }; export { applicationConfig }; diff --git a/src/constants/cookie-names.js b/src/constants/cookie-names.js index 33a76ae43..6b1e3c909 100644 --- a/src/constants/cookie-names.js +++ b/src/constants/cookie-names.js @@ -1,5 +1,5 @@ const cookieNames = { - ORDER_INFO: "OrderInfo" + CONCEPT_SESSION_INFO: "ConceptSessionInfo", }; export { cookieNames }; diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 2636464bd..00ac66d58 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -34,7 +34,7 @@ const storeMutations = { // OTHER MUTATIONS UPDATE_PAGE_DATA: "updatePageData", - SET_LOAD_ORDER_INFO: "setLoadOrderInformation" + SET_LOAD_CONCEPT_SESSION_INFO: "setLoadOrderInformation" }; diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index 61e410604..01950fdce 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -1,28 +1,30 @@ import { storeActions } from "@/constants/store-actions.js"; import { cookieNames } from "@/constants/cookie-names"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; +import { applicationConfig } from "@/constants/application-config"; import store from "@/store"; import router from "@/router"; import baseMixin from "../mixins/base-mixin"; + // Read info from heritage funnel and reset state or load referral export async function loadReferralFromHeritageFunnelIfPresent() { - const orderInfo = getHeritageCookieValue(); + // const orderInfo = getHeritageCookieValue(); - // Do nothing if there is no cookie or no correlation id. - if (orderInfo === null || orderInfo.ReferralCorrelationId === undefined) { - return; - } + // // Do nothing if there is no cookie or no correlation id. + // if (orderInfo === null || orderInfo.ReferralCorrelationId === undefined) { + // return; + // } - // Reset state if cookie says to. - if (orderInfo.ShouldResetState) { - baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); - deleteHeritageCookie(); - return; - } + // // Reset state if cookie says to. + // if (orderInfo.ShouldResetState) { + // baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); + // //deleteHeritageCookie(); + // return; + // } - // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. - await loadOrder(orderInfo.ReferralNumber, orderInfo.ReferralDate, orderInfo.ReferralCorrelationId); + // // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. + // await loadOrder(orderInfo.ReferralNumber, orderInfo.ReferralDate, orderInfo.ReferralCorrelationId); } // Navigate to Heritage Funnel with the proper URL format. @@ -47,19 +49,19 @@ export async function navigateToHeritageFunnel() { // Saves Referral if one is available and commits referral details to state. // Also sets cookie properties. export async function saveOrder() { - const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); + // const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); - // Save the referral information back from the store. - await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_REFERRAL_INFORMATION, { - referralNumber: savedOrderInfo.data.referralNumber, - correlationId: savedOrderInfo.data.referralCorrelationId, - referralDate: savedOrderInfo.data.referralDate, - }, false); + // // Save the referral information back from the store. + // await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_REFERRAL_INFORMATION, { + // referralNumber: savedOrderInfo.data.referralNumber, + // correlationId: savedOrderInfo.data.referralCorrelationId, + // referralDate: savedOrderInfo.data.referralDate, + // }, false); - // Set cookie properties. - setHeritageCookieProperties({ - DidHeritageFunnelUpdateLast: false - }); + // // Set cookie properties. + // setHeritageCookieProperties({ + // DidHeritageFunnelUpdateLast: false + // }); } // Loads order based on referral data in cookie, also loads the referral information into state. @@ -69,14 +71,42 @@ export async function loadOrder(referralNumber, referralDate, correlationId) { , false); } +export function updateOrCreateConceptCookie() { + // Create the cookie + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}={}; path=/`; + + // Set up cookie with all the props. + setConceptCookieProperties({ + LastTouched: new Date(), + DidHeritageFunnelUpdateLast: false, + ReferralNumber: store.state.order.referralNumber, + ReferralDate: store.state.order.referralDate, + ReferralCorrelationId: store.state.order.referralCorrelationId, + }); + +} + +export function isConceptSessionStillActive() { + if(getConceptCookie() !== null){ + const lastTouchedValue = getConceptCookie().LastTouched; + const timeoutAmount = applicationConfig.SESSION_TIMEOUT_CONFIG; + const isMoreThanHalfHourAgo = ((new Date() - new Date(lastTouchedValue)) / 60000) > timeoutAmount; + + if(isMoreThanHalfHourAgo){ + return false; + } + + return true; + } +} + // --------- PRIVATE FUNCTIONS --------- /* Start cookie related functions */ -export function getHeritageCookieValue() { - console.log("getHeritageCookieValue called"); +export function getConceptCookie() { const cookieJson = document.cookie ?.split("; ") - ?.find(row => row.startsWith(`${cookieNames.ORDER_INFO}=`)) + ?.find(row => row.startsWith(`${cookieNames.CONCEPT_SESSION_INFO}=`)) ?.split("=")[1]; try { @@ -86,31 +116,27 @@ export function getHeritageCookieValue() { } } -function deleteHeritageCookie() { - // If this cookie is ever created from the concept funnel, will need to add another - // line with the path=/fmg/ - document.cookie = `${cookieNames.ORDER_INFO}=; Max-Age=0; path=/; domain=${location.hostname}`; -} - -function setHeritageCookieValue(cookieValue) { - let cookieValueJson = cookieValue; - if (typeof cookieValue == "object") - cookieValueJson = JSON.stringify(cookieValue); - - document.cookie = `${cookieNames.ORDER_INFO}=${cookieValueJson}; path=/`; -} - -function setHeritageCookieProperties(properties) { +function setConceptCookieProperties(properties) { if (typeof properties == "object") { - let cookie = getHeritageCookieValue(); + let cookie = getConceptCookie(); if (cookie !== null) { Object.keys(properties).forEach(key => { cookie[key] = properties[key]; }); - setHeritageCookieValue(cookie); + const cookieValueJson = JSON.stringify(cookie); + + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=${cookieValueJson}; path=/`; } } } + +// function deleteHeritageCookie() { +// // If this cookie is ever created from the concept funnel, will need to add another +// // line with the path=/fmg/ +// document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; path=/; domain=${location.hostname}`; +// } + + /* End cookie related functions */ diff --git a/src/helpers/heritage-integration-helper.spec.js b/src/helpers/heritage-integration-helper.spec.js index f99187474..a5f7fd437 100644 --- a/src/helpers/heritage-integration-helper.spec.js +++ b/src/helpers/heritage-integration-helper.spec.js @@ -29,16 +29,16 @@ describe("saveOrder", () => { // ShouldResetState: testShouldResetState // } - // console.log(cookieNames.ORDER_INFO); + // console.log(cookieNames.CONCEPT_SESSION_INFO); // console.log(testCookieValue) // console.log(JSON.stringify(testCookieValue)); // console.log(location.hostname) - // let myString = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)};domain=${location.hostname};path=/;`; + // let myString = `${cookieNames.CONCEPT_SESSION_INFO}=${JSON.stringify(testCookieValue)};domain=${location.hostname};path=/;`; // console.log(myString) // document.cookie = 'OrderInfo={"Hahahah":true};domain=localhost;path=/;'; // console.log(document.cookie) // document.cookie = "Ahhh=AHHH;" - // document.cookie = `${cookieNames.ORDER_INFO}=; Max-Age=0; domain=${location.hostname};`; + // document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; domain=${location.hostname};`; // console.log(document.cookie) // // Act @@ -217,7 +217,7 @@ describe.skip("cookies", () => { const cookies = { "orderconfirmation": 1565980, "optimizelyEndUserId": "oeu1610051865958r0.07937134272718804", - [cookieNames.ORDER_INFO]: `{"ReferralNumber":"1566818","ReferralDate":"2022-03-15T10:56:24.597","ReferralCorrelationId":"404d2b04-f86e-45c3-b373-127b6217b060","ShouldResetState":false,"DidHeritageFunnelUpdateLast":true}`, + [cookieNames.CONCEPT_SESSION_INFO]: `{"ReferralNumber":"1566818","ReferralDate":"2022-03-15T10:56:24.597","ReferralCorrelationId":"404d2b04-f86e-45c3-b373-127b6217b060","ShouldResetState":false,"DidHeritageFunnelUpdateLast":true}`, "UNIQUE_SESSION_ID": "33756020-b58e-4ec7-b8b8-3f1576719c40", "_ga": "GA1.1.1631274579.1622658999", "da_lid": "B10847599A73EA95861EBB99009A283E27|0|0|0 clientTag=null", @@ -227,9 +227,9 @@ const cookies = { function setupCookies({ heritageCookieValue = "", includeHeritageCookie = true }) { console.log(heritageCookieValue) Object.keys(cookies).forEach(key => { - const cookieValue = key == cookieNames.ORDER_INFO ? heritageCookieValue : cookies[key]; + const cookieValue = key == cookieNames.CONCEPT_SESSION_INFO ? heritageCookieValue : cookies[key]; - if (includeHeritageCookie || key != cookieNames.ORDER_INFO) + if (includeHeritageCookie || key != cookieNames.CONCEPT_SESSION_INFO) document.cookie = `${key}=${cookieValue}`; }); } diff --git a/src/router/index.js b/src/router/index.js index 2dd8e8486..79db19b63 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -4,7 +4,7 @@ import { storeActions } from "@/constants/store-actions"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; -import { loadReferralFromHeritageFunnelIfPresent, saveOrder, getHeritageCookieValue } from "@/helpers/heritage-integration-helper"; +import { updateOrCreateConceptCookie, loadReferralFromHeritageFunnelIfPresent, isConceptSessionStillActive} from "@/helpers/heritage-integration-helper"; import baseMixin from "@/mixins/base-mixin"; import eventBus from "@/helpers/event-bus/event-bus"; @@ -35,6 +35,10 @@ const routes = [ } else { try { + // Check our 'Session' is still good, update the cookie. + isConceptSessionStillActive(); + updateOrCreateConceptCookie(); + // On entering the concept funnel "fresh", read cookie information, decide what to do next. if (from.redirectedFrom === undefined) { await loadReferralFromHeritageFunnelIfPresent(); @@ -134,9 +138,9 @@ async function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery baseMixin.methods.savePageDataToStore(destinationFmgPageValue, optionalPageData); // if cookie and referralNumber exists - if (getHeritageCookieValue()?.ReferralNumber) { - await saveOrder(); - } + // if (getHeritageCookieValue()?.ReferralNumber) { + // await saveOrder(); + // } router.push({ name: "root", diff --git a/src/store/index.js b/src/store/index.js index 62de9805c..af280675e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -367,7 +367,7 @@ export const actions = { correlationId: correlationId }, }).then( (response) => { - context.commit(storeMutations.SET_LOAD_ORDER_INFO, response.data); + context.commit(storeMutations.SET_LOAD_CONCEPT_SESSION_INFO, response.data); return response; }); } From c6dac0bb96e00b594ab847b6eba300d114b599e9 Mon Sep 17 00:00:00 2001 From: FrankRua Date: Mon, 21 Mar 2022 18:51:00 -0400 Subject: [PATCH 3/5] function updates --- src/helpers/heritage-integration-helper.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index 01950fdce..010d1f1cb 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -103,7 +103,7 @@ export function isConceptSessionStillActive() { // --------- PRIVATE FUNCTIONS --------- /* Start cookie related functions */ -export function getConceptCookie() { +function getConceptCookie() { const cookieJson = document.cookie ?.split("; ") ?.find(row => row.startsWith(`${cookieNames.CONCEPT_SESSION_INFO}=`)) @@ -132,11 +132,11 @@ function setConceptCookieProperties(properties) { } } -// function deleteHeritageCookie() { -// // If this cookie is ever created from the concept funnel, will need to add another -// // line with the path=/fmg/ -// document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; path=/; domain=${location.hostname}`; -// } +function deleteConceptCookie() { + // If this cookie is ever created from the concept funnel, will need to add another + // line with the path=/fmg/ + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; path=/; domain=${location.hostname}`; +} /* End cookie related functions */ From c77c8e12a2f9792769bd08d84452c3dd1c477773 Mon Sep 17 00:00:00 2001 From: FrankRua Date: Tue, 22 Mar 2022 08:41:02 -0400 Subject: [PATCH 4/5] more integration helper changes --- src/helpers/heritage-integration-helper.js | 130 ++++++++++-------- .../heritage-integration-helper.spec.js | 8 +- src/router/index.js | 24 ++-- 3 files changed, 93 insertions(+), 69 deletions(-) diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index 010d1f1cb..6a421a90b 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -7,71 +7,64 @@ import router from "@/router"; import baseMixin from "../mixins/base-mixin"; -// Read info from heritage funnel and reset state or load referral -export async function loadReferralFromHeritageFunnelIfPresent() { - // const orderInfo = getHeritageCookieValue(); - - // // Do nothing if there is no cookie or no correlation id. - // if (orderInfo === null || orderInfo.ReferralCorrelationId === undefined) { - // return; - // } - - // // Reset state if cookie says to. - // if (orderInfo.ShouldResetState) { - // baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); - // //deleteHeritageCookie(); - // return; - // } - - // // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. - // await loadOrder(orderInfo.ReferralNumber, orderInfo.ReferralDate, orderInfo.ReferralCorrelationId); -} - -// Navigate to Heritage Funnel with the proper URL format. -// Will Save the referral if there is one in state, or create a new one if one is not in state. -export async function navigateToHeritageFunnel() { - await saveOrder(); - const referralCorrelationId = store.state.order.referralCorrelationId; - - router.navigate( - navigationScenarios.MOVE_TO_HERITAGE_FUNNEL, - router.currentRoute.value, - { - corid: referralCorrelationId, - src: "concept-funnel", - // TODO CSR-98 REMOVE THIS - cns: "all", - experiments: "RemoveServiceAreaPage=ServAreaRemoval_V7=ServAreaNoRemove_V7_TEST=true,ConceptFunnel=ConceptFunnel_V1=ConceptFunnel_TEST=true" - } - ); -} - // Saves Referral if one is available and commits referral details to state. -// Also sets cookie properties. export async function saveOrder() { - // const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); + console.log("saving order..."); + const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); - // // Save the referral information back from the store. - // await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_REFERRAL_INFORMATION, { - // referralNumber: savedOrderInfo.data.referralNumber, - // correlationId: savedOrderInfo.data.referralCorrelationId, - // referralDate: savedOrderInfo.data.referralDate, - // }, false); + // Save the referral information back from the store. + await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SET_REFERRAL_INFORMATION, { + referralNumber: savedOrderInfo.data.referralNumber, + correlationId: savedOrderInfo.data.referralCorrelationId, + referralDate: savedOrderInfo.data.referralDate, + }, false); - // // Set cookie properties. - // setHeritageCookieProperties({ - // DidHeritageFunnelUpdateLast: false - // }); + // Update the cookie with the referral information when saved. + updateOrCreateConceptCookie(); } // Loads order based on referral data in cookie, also loads the referral information into state. export async function loadOrder(referralNumber, referralDate, correlationId) { - const loadOrderResponse = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, + console.log("loading order...", referralNumber, referralDate, correlationId); + await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, { referralNumber: referralNumber, referralDate: referralDate, correlationId: correlationId } , false); } +// Read info from heritage funnel and reset state or load referral +export async function loadReferralIfPresent() { + console.log("attempting to load referral...."); + const conceptCookie = getConceptCookie(); + + // Do nothing if there is no cookie or no correlation id. + if (conceptCookie === null || conceptCookie.ReferralCorrelationId === null) { + console.log("No referral found"); + return; + } + + // Reset state if cookie says to. + if (conceptCookie.ShouldResetState) { + console.log("Resetting state..."); + baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); + deleteConceptCookie(); + return; + } + + console.log("Loading order..."); + // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. + await loadOrder(conceptCookie.ReferralNumber, conceptCookie.ReferralDate, conceptCookie.ReferralCorrelationId); +} + export function updateOrCreateConceptCookie() { + console.log("Updating cookie...", { + LastTouched: new Date(), + DidHeritageFunnelUpdateLast: false, + ShouldResetState: false, + ReferralNumber: store.state.order.referralNumber, + ReferralDate: store.state.order.referralDate, + ReferralCorrelationId: store.state.order.referralCorrelationId, + }); + // Create the cookie document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}={}; path=/`; @@ -79,6 +72,7 @@ export function updateOrCreateConceptCookie() { setConceptCookieProperties({ LastTouched: new Date(), DidHeritageFunnelUpdateLast: false, + ShouldResetState: false, ReferralNumber: store.state.order.referralNumber, ReferralDate: store.state.order.referralDate, ReferralCorrelationId: store.state.order.referralCorrelationId, @@ -87,12 +81,14 @@ export function updateOrCreateConceptCookie() { } export function isConceptSessionStillActive() { - if(getConceptCookie() !== null){ + if (getConceptCookie() !== null) { const lastTouchedValue = getConceptCookie().LastTouched; const timeoutAmount = applicationConfig.SESSION_TIMEOUT_CONFIG; const isMoreThanHalfHourAgo = ((new Date() - new Date(lastTouchedValue)) / 60000) > timeoutAmount; - if(isMoreThanHalfHourAgo){ + console.log("has session expired -->", isMoreThanHalfHourAgo); + + if (isMoreThanHalfHourAgo) { return false; } @@ -100,10 +96,27 @@ export function isConceptSessionStillActive() { } } -// --------- PRIVATE FUNCTIONS --------- +// Navigate to Heritage Funnel with the proper URL format. +// Will Save the referral if there is one in state, or create a new one if one is not in state. +export async function navigateToHeritageFunnel() { + + // Create the order (or save existing order) when navigating to Heritage Funnel. + await saveOrder(); + + router.navigate( + navigationScenarios.MOVE_TO_HERITAGE_FUNNEL, + router.currentRoute.value, + { + corid: store.state.order.referralCorrelationId, + src: "concept-funnel", + cns: "all", + experiments: "RemoveServiceAreaPage=ServAreaRemoval_V7=ServAreaNoRemove_V7_TEST=true,ConceptFunnel=ConceptFunnel_V1=ConceptFunnel_TEST=true" + } + ); +} /* Start cookie related functions */ -function getConceptCookie() { +export function getConceptCookie() { const cookieJson = document.cookie ?.split("; ") ?.find(row => row.startsWith(`${cookieNames.CONCEPT_SESSION_INFO}=`)) @@ -116,6 +129,11 @@ function getConceptCookie() { } } + + + +// --------- PRIVATE FUNCTIONS --------- + function setConceptCookieProperties(properties) { if (typeof properties == "object") { let cookie = getConceptCookie(); diff --git a/src/helpers/heritage-integration-helper.spec.js b/src/helpers/heritage-integration-helper.spec.js index a5f7fd437..eb1130c21 100644 --- a/src/helpers/heritage-integration-helper.spec.js +++ b/src/helpers/heritage-integration-helper.spec.js @@ -19,7 +19,7 @@ describe("saveOrder", () => { } } - describe("loadReferralFromHeritageFunnelIfPresent", () => { + describe("loadReferralIfPresent", () => { // test("ShouldResetState == true => heritage cookie is deleted", () => { // // Arrange // // TODO CSR-98 Can we not mock this?? @@ -42,7 +42,7 @@ describe("saveOrder", () => { // console.log(document.cookie) // // Act - // helper.loadReferralFromHeritageFunnelIfPresent(); + // helper.loadReferralIfPresent(); // // Assert // console.log(document.cookie) @@ -54,7 +54,7 @@ describe("saveOrder", () => { // helper.getHeritageCookieValue = jest.fn(x => x.ShouldResetState = false); // // Act - // helper.loadReferralFromHeritageFunnelIfPresent(); + // helper.loadReferralIfPresent(); // // Assert // expect(helper.getHeritageCookieValue).toHaveBeenCalled(); @@ -65,7 +65,7 @@ describe("saveOrder", () => { // helper.getHeritageCookieValue = jest.fn(x => x.ShouldResetState = true); // // Act - // helper.loadReferralFromHeritageFunnelIfPresent(); + // helper.loadReferralIfPresent(); // // Assert // expect(helper.getHeritageCookieValue).toHaveBeenCalled(); diff --git a/src/router/index.js b/src/router/index.js index 79db19b63..54a64c5d2 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -4,7 +4,7 @@ import { storeActions } from "@/constants/store-actions"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; -import { updateOrCreateConceptCookie, loadReferralFromHeritageFunnelIfPresent, isConceptSessionStillActive} from "@/helpers/heritage-integration-helper"; +import * as integrationHelper from "@/helpers/heritage-integration-helper"; import baseMixin from "@/mixins/base-mixin"; import eventBus from "@/helpers/event-bus/event-bus"; @@ -35,13 +35,19 @@ const routes = [ } else { try { - // Check our 'Session' is still good, update the cookie. - isConceptSessionStillActive(); - updateOrCreateConceptCookie(); + // Check our 'Session' is still good. + // If not, reset state and go back to the start. + if (!integrationHelper.isConceptSessionStillActive()) { + baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); + await GoToFunnelStartOn404(next); + } + + // Create funnel cookie, or update it if it already exists. + integrationHelper.updateOrCreateConceptCookie(); // On entering the concept funnel "fresh", read cookie information, decide what to do next. if (from.redirectedFrom === undefined) { - await loadReferralFromHeritageFunnelIfPresent(); + await integrationHelper.loadReferralIfPresent(); } // If we already have our route, go to it. @@ -137,10 +143,10 @@ async function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery // Append page data to the store for the NEXT page, if any. It will be an empty object if none is provided. baseMixin.methods.savePageDataToStore(destinationFmgPageValue, optionalPageData); - // if cookie and referralNumber exists - // if (getHeritageCookieValue()?.ReferralNumber) { - // await saveOrder(); - // } + // if cookie and referralNumber/Date exists + if (integrationHelper.getConceptCookie()?.ReferralNumber && integrationHelper.getConceptCookie()?.ReferralDate) { + await integrationHelper.saveOrder(); + } router.push({ name: "root", From 5eedfb9ce670ab149da92f9dfa2d73e287220d8c Mon Sep 17 00:00:00 2001 From: FrankRua Date: Tue, 22 Mar 2022 12:22:07 -0400 Subject: [PATCH 5/5] small refactor --- src/helpers/heritage-integration-helper.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index 6a421a90b..53ff90aab 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -2,6 +2,7 @@ import { storeActions } from "@/constants/store-actions.js"; import { cookieNames } from "@/constants/cookie-names"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; import { applicationConfig } from "@/constants/application-config"; + import store from "@/store"; import router from "@/router"; import baseMixin from "../mixins/base-mixin"; @@ -27,7 +28,7 @@ export async function saveOrder() { export async function loadOrder(referralNumber, referralDate, correlationId) { console.log("loading order...", referralNumber, referralDate, correlationId); await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, - { referralNumber: referralNumber, referralDate: referralDate, correlationId: correlationId } + { referralNumber: referralNumber.toString(), referralDate: referralDate, correlationId: correlationId } , false); } @@ -50,14 +51,14 @@ export async function loadReferralIfPresent() { return; } - console.log("Loading order..."); + console.log("calling load order from loadReferralIfPresent()..."); // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. await loadOrder(conceptCookie.ReferralNumber, conceptCookie.ReferralDate, conceptCookie.ReferralCorrelationId); } export function updateOrCreateConceptCookie() { console.log("Updating cookie...", { - LastTouched: new Date(), + LastTouched: new Date().toUTCString(), DidHeritageFunnelUpdateLast: false, ShouldResetState: false, ReferralNumber: store.state.order.referralNumber, @@ -70,7 +71,7 @@ export function updateOrCreateConceptCookie() { // Set up cookie with all the props. setConceptCookieProperties({ - LastTouched: new Date(), + LastTouched: new Date().toUTCString(), DidHeritageFunnelUpdateLast: false, ShouldResetState: false, ReferralNumber: store.state.order.referralNumber, @@ -85,7 +86,6 @@ export function isConceptSessionStillActive() { const lastTouchedValue = getConceptCookie().LastTouched; const timeoutAmount = applicationConfig.SESSION_TIMEOUT_CONFIG; const isMoreThanHalfHourAgo = ((new Date() - new Date(lastTouchedValue)) / 60000) > timeoutAmount; - console.log("has session expired -->", isMoreThanHalfHourAgo); if (isMoreThanHalfHourAgo) { @@ -129,9 +129,6 @@ export function getConceptCookie() { } } - - - // --------- PRIVATE FUNCTIONS --------- function setConceptCookieProperties(properties) {