diff --git a/src/global-methods.js b/src/global-methods.js index cba64e908..1ae2dbf80 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -1,13 +1,20 @@ import axios from "axios"; import analyticsMixIn from "@/mixins/analytics-mixin.js"; import store from "@/store"; +import router from "@/router"; import { applicationConfig } from "@/constants/application-config.js"; import { GaCategories, GaActions, GaLabels } from "@/constants/analytics"; import { headerKeys } from "@/constants/header-keys"; export default { - callHttpClient({ method, endpoint, payload, logApiCall = true }) { + callHttpClient({ + method, + endpoint, + payload, + logApiCall = true, + additionalSuccessEventDataHandler, + }) { return new Promise((resolve, reject) => { const cfDistroUrl = applicationConfig.CONSUMER_CF_DISTRO; let payloadAndAnalyticsData = {}; @@ -26,10 +33,16 @@ export default { }).then( (response) => { if (logApiCall) { + let additionalEventData = ""; + if (additionalSuccessEventDataHandler) { + additionalEventData = "_" + additionalSuccessEventDataHandler(response); + } + const pageName = analyticsMixIn.methods.getPageName(); + const nextPageName = router.lastNavigationPage || pageName; analyticsMixIn.methods.pushEventToGA( GaCategories.API_RESPONSE, - GaActions.RESULT, - `${GaLabels.SUCCESS}_${endpoint}`, + `${nextPageName}_${endpoint}`, + `${GaLabels.SUCCESS}${additionalEventData}`, true ); } diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 29eb76c3d..75f22edcb 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -23,6 +23,10 @@ import { applicationConfig } from "../constants/application-config"; export default { methods: { + getPageName() { + return getPageNameByQueryString(); + }, + logPageView(pageEvent) { const currentPageName = getPageNameByQueryString(); var payload = { diff --git a/src/router/index.js b/src/router/index.js index eb8e3947c..04d26c9d6 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -160,6 +160,14 @@ const router = createRouter({ //---------------------------------------------------------- Router Functions ---------------------------------------------------------- +router.beforeEach(async (to, from, next) => { + // set lastNavigationPage here to capture state before API calls for analytics. + // use current page url query string name when to.name is "root" (due to unresolved navigation in beforeEach) + router.lastNavigationPage = to.name == "root" ? analyticsMixin.methods.getPageName() : to.name; + + next(); +}); + router.afterEach(async (to, from) => { // Update lastPageVisited in the store store.commit(storeMutations.UPDATE_LAST_PAGE_VISITED, to.name); diff --git a/src/store/index.js b/src/store/index.js index ea1122f0c..510877a53 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1093,6 +1093,8 @@ export const actions = { eon: order.eon, }, }, + additionalSuccessEventDataHandler: (response) => + "Email provided: " + (order.customer.emailAddress ? "true" : "false"), }); }, loadSession(