diff --git a/src/constants/application-config.js b/src/constants/application-config.js index d4a0ceb8c..a72b306d3 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -30,6 +30,7 @@ const applicationConfig = { OUTLOOK_CALENDAR: "https://outlook.office.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent", FRONTEND_LOGGER_PATH: "/analytics/api/v1/logging", + AFFILIATE_COOKIE_CONTAINING_NAME: "_Track", }; export { applicationConfig }; diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 244f213cd..4f5158090 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -111,6 +111,9 @@ const storeMutations = { RESET_LEADGEN_SERVICEZIP_STATE: "resetLeadGenServiceZipState", RESET_LEADGEN_QUOTE_STATE: "resetLeadGenQuoteState", RESET_IS_LEADGEN: "resetIsLeadGen", + + //Affiliate Cookies + UPDATE_AFFILIATE_COOKIES: "updateAffiliateCookies", }; export { storeMutations }; diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index 579993795..1b7b551ca 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -210,6 +210,17 @@ export function refreshCookieExpiration(name, expirationTime) { } } +export function getAffiliateCookies() { + const affiliateCookies = []; + const cookieContainingName = applicationConfig.AFFILIATE_COOKIE_CONTAINING_NAME; + const affiliateCookiesAll = getCookiesContainingName(cookieContainingName); + affiliateCookiesAll?.forEach((cookieName) => { + const cookieValue = getCookieValueByName(cookieName); + affiliateCookies.push({ CookieName: cookieName, CookieValue: cookieValue }); + }); + return affiliateCookies; +} + /* =========================== = PRIVATE FUNCTIONS = @@ -292,3 +303,15 @@ function getCookieValueByName(name) { function isLocalhost() { return location.hostname.includes("localhost"); } + +function getCookiesContainingName(name) { + const allCookies = document.cookie.split(";"); + const matchingCookies = []; + for (const cookie of allCookies) { + const [cookieName, cookieValue] = cookie.trim().split("="); + if (cookieName.includes(name)) { + matchingCookies.push(cookieName); + } + } + return matchingCookies; +} diff --git a/src/router/index.js b/src/router/index.js index 9508a0eba..5b0456210 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -18,6 +18,7 @@ import { getFunnelCookie, updateSessionIdCookie, deleteFunnelCookie, + getAffiliateCookies, } from "@/helpers/heritage-integration/cookie-helper"; import { loadSessionIfPresent, saveSession } from "@/helpers/heritage-integration/order-helper"; import { @@ -164,7 +165,11 @@ const routes = [ ); } } - + //Affiliate Cookies + const affiliateCookies = getAffiliateCookies(); + if (affiliateCookies != null && affiliateCookies.length > 0) { + store.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies); + } const loadSessionResponse = await loadSessionIfPresent( to.query.isInsurance != null ? to.query.isInsurance == "true" diff --git a/src/store/index.js b/src/store/index.js index db7dbc0fc..dd2a2db74 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -172,6 +172,7 @@ const getDefaultState = () => { lastPageVisited: null, experiments: [], triggeredSiteEntry: false, + affiliateCookies: [], }, }; }; @@ -732,6 +733,9 @@ export const mutations = { updateTriggeredSiteEntry(state, wasSiteEntryTriggered) { state.applicationUser.triggeredSiteEntry = wasSiteEntryTriggered; }, + updateAffiliateCookies(state, affiliateCookies) { + state.applicationUser.affiliateCookies = affiliateCookies; + }, }; // Export Getters @@ -1809,6 +1813,8 @@ export const actions = { // create a new array to avoid mutating state const newGlassToReplace = convertGlassPieceNamingForApi(damage.glassToReplace); + //affiliate cookie save only when submitAfterSave + const affiliateCookies = submitAfterSave ? applicationUser.affiliateCookies : null; return globalMethods.callHttpClient({ method: endpoints.SaveSession.method, @@ -1822,6 +1828,7 @@ export const actions = { lastPage: applicationUser.lastPageVisited, pageData: applicationUser.pageData, savedSessionId: applicationUser.savedSessionId, + affiliateCookies: affiliateCookies, }, order: { vehicle: { @@ -2796,6 +2803,7 @@ export const actions = { const submittedOrder = context.state.order; const experiments = context.state.applicationUser.experiments; + const affiliateCookies = context.state.applicationUser.affiliateCookies; // set to local storage window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder)); @@ -2809,6 +2817,9 @@ export const actions = { //restore user's experiments context.commit(storeMutations.UPDATE_EXPERIMENTS, experiments); + //restore affiliate cookies + context.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies); + //clear leadGen session storage window.sessionStorage.removeItem("leadGenState"); },