diff --git a/src/router/router-constants/analytics-page-events.js b/src/constants/analytics-page-events.js similarity index 83% rename from src/router/router-constants/analytics-page-events.js rename to src/constants/analytics-page-events.js index ab4753b3d..74ff7cc2f 100644 --- a/src/router/router-constants/analytics-page-events.js +++ b/src/constants/analytics-page-events.js @@ -1,5 +1,6 @@ const analyticsPageEvents = { ENTRY: "ENTRY", + EVENT: "EVENT" }; export { analyticsPageEvents }; diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index a62a0bd1a..763a7c830 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -3,35 +3,31 @@ import baseMixin from "@/mixins/base-mixin"; import { settleAllPromises } from "@/helpers/layout-helper"; import { getDeviceIdValue, getSessionIdValue, getSessionKeyValue } from "@/helpers/heritage-integration/cookie-helper"; import { queryStrings } from "@/constants/query-strings"; +import { analyticsPageEvents } from "@/constants/analytics-page-events"; export default { methods: { - async logPageEvent(destinationFmgPageValue, pageEvent){ - const logActivityPromise = baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOG_ACTIVITY, - { - userId: getDeviceIdValue(), - sessionKey: getSessionKeyValue(), - pageName: destinationFmgPageValue, - sessionId: getSessionIdValue(), - shouldUseSessionId: true, - pageEvent: { - action: '', - event: pageEvent, - } - }, false); - - // Settle promises and get results - const promiseResultMap = [ - { - resultKey: "logActivity", - promise: logActivityPromise, - }, - ]; - - let resultMap = await settleAllPromises(promiseResultMap); + logEvent(destinationFmgPageValue, pageEvent, category, action, label, value){ + var payload = { + userId: getDeviceIdValue(), + sessionKey: getSessionKeyValue(), + pageName: destinationFmgPageValue, + sessionId: getSessionIdValue(), + shouldUseSessionId: true, + }; + + if (pageEvent) { + payload.pageEvent = {action: '', event: pageEvent}; + } + + if (category) { + payload.customEvent = {category: category, action: action, label: label, value: value}; + } + + baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOG_ACTIVITY, payload, false); }, - pushEventToGA(category, action, label, value, pageName) { + pushEventToGA(category, action, label, value, pageName, pushToLogApp) { const eventToBePushed = { 'event': 'ga_event', 'category': category, @@ -40,7 +36,12 @@ export default { 'value': value, 'path': `/fmg/?${queryStrings.FMG_PAGE}=${pageName}` } + pushToDataLayerIfDefined(eventToBePushed); + + if (pushToLogApp) { + this.logEvent(pageName, null, category, action, label, value); + } }, pushPageViewToGA(pageName) { @@ -49,7 +50,9 @@ export default { 'pagePath': `/fmg/?${queryStrings.FMG_PAGE}=${pageName}`, 'pageTitle': pageName }; + pushToDataLayerIfDefined(pageViewEvent); + this.logEvent(pageName, analyticsPageEvents.ENTRY); } }, computed: { diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js index c85a637fc..aa0cfb022 100644 --- a/src/mixins/analytics-mixin.spec.js +++ b/src/mixins/analytics-mixin.spec.js @@ -3,7 +3,7 @@ import { setupMocksForJsFiles } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; describe("analyticsMixin.js", () => { - test("logPageEvent: calls dispatch with type and payload", () => { + test("logEvent: calls dispatch with type and payload", () => { const type = ""; const payload = {}; @@ -14,7 +14,7 @@ describe("analyticsMixin.js", () => { } var mocks = setupMocksForJsFiles(mockData); - analyticsMixin.methods.logPageEvent(type, payload); + analyticsMixin.methods.logEvent(type, payload); expect(mocks.baseMixin.methods.dispatchNonBlockingStoreAction).toBeCalled(); }); diff --git a/src/router/index.js b/src/router/index.js index 1d46eec5f..034294f81 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -20,7 +20,6 @@ import analyticsMixin from "@/mixins/analytics-mixin"; // Components import ComponentTest from "@/layouts/component-test/component-test.vue"; import FormTest from "@/layouts/form-test/form-test.vue"; -import { analyticsPageEvents } from "./router-constants/analytics-page-events"; const routes = [ { @@ -124,7 +123,6 @@ const router = createRouter({ router.afterEach((to, from) => { analyticsMixin.methods.pushPageViewToGA(to.query[queryStrings.FMG_PAGE]); - analyticsMixin.methods.logPageEvent(to.query[queryStrings.FMG_PAGE], analyticsPageEvents.ENTRY); }); router.navigate = (scenario, currentRoute, optionalQuery = {}, optionalParams = {}, optionalPageData = {}) => { diff --git a/src/store/index.js b/src/store/index.js index 1bef9a507..bf6a6f937 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -422,37 +422,27 @@ export const actions = { }, logActivity(context, { userId, sessionKey, pageName, sessionId, pageEvent, customEvent, shouldUseSessionId }) { - var customEventData = {}; - customEvent?.forEach(function(event) - { - var category = event.category; - var action = event.action; - var label = event.label; - var value = event.value; - customEventData[category] = { - category: category, - action: action, - label: label, - value: value - }; - }) + var payload = { + userId: userId, + sessionKey: sessionKey, + sessionId: sessionId, + pageName: pageName, + applicationName: 'SafeliteDotCom', + shouldUseSessionId: shouldUseSessionId + }; + + if (typeof pageEvent !== 'undefined') { + payload.pageEvent = { action: pageEvent.action, event: pageEvent.event}; + } + + if (typeof customEvent !== 'undefined') { + payload.customEvents = [{category: customEvent.category, action: customEvent.action, label: customEvent.label, value: customEvent.value}]; + } return globalMethods.callHttpClient({ method: endpoints.LogActivity.method, endpoint: endpoints.LogActivity.url, - payload: { - userId: userId, - sessionKey: sessionKey, - sessionId: sessionId, - pageName: pageName, - applicationName: 'SafeliteDotCom', - shouldUseSessionId: shouldUseSessionId, - pageEvent: { - action: pageEvent.action, - event: pageEvent.event, - }, - customEvent: customEventData - } + payload: payload }); },