From aaa468a0166410801a18ddb4cf32227a4b6c7f9e Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 28 Apr 2022 11:18:09 -0400 Subject: [PATCH 1/3] CSR-392: add aria-required to Glass Parts Question --- .../vehicle-parts/glass-part-question/glass-part-question.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index 9be24b91b..86045e52e 100644 --- a/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -25,6 +25,7 @@ " :buttonLabel="name" altText="" + isRequired :buttonID="`${glassLocation}-${glassName}-${name}`" :groupName="`${glassLocation}-${glassName}`" @isCheckedChanged="ResetTintAndPartSelections()" @@ -50,7 +51,7 @@ :answers="value" textPosition="text-start" :loaderEnabled="false" - :isRequired="true" + isRequired :groupName="`${glassLocation}-${glassName}-${name}`" /> From bdd75d8d1b5c84c44c2d957a5f6d9594d8670ec4 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Thu, 28 Apr 2022 12:40:54 -0400 Subject: [PATCH 2/3] CSR-18 refactor event logging --- .../analytics-page-events.js | 1 + src/mixins/analytics-mixin.js | 59 +++++++++++-------- src/mixins/analytics-mixin.spec.js | 4 +- src/router/index.js | 2 - src/store/index.js | 44 ++++++-------- 5 files changed, 56 insertions(+), 54 deletions(-) rename src/{router/router-constants => constants}/analytics-page-events.js (83%) 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..64b25572e 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -3,35 +3,41 @@ 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, + async 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}; + } + + const logActivityPromise = baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOG_ACTIVITY, payload, false); + + // Settle promises and get results + const promiseResultMap = [ { - 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); + resultKey: "logActivity", + promise: logActivityPromise, + }, + ]; + + let resultMap = await settleAllPromises(promiseResultMap); }, - pushEventToGA(category, action, label, value, pageName) { + pushEventToGA(category, action, label, value, pageName, pushToLogApp) { const eventToBePushed = { 'event': 'ga_event', 'category': category, @@ -40,7 +46,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 +60,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 6bda6ab13..48ed09f14 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -410,37 +410,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 }); }, From 11e881596986cc1fd4f5c965b9c19463886e432e Mon Sep 17 00:00:00 2001 From: CarlNation Date: Thu, 28 Apr 2022 13:07:58 -0400 Subject: [PATCH 3/3] CSR-18 remove async --- src/mixins/analytics-mixin.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 64b25572e..763a7c830 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -7,7 +7,7 @@ import { analyticsPageEvents } from "@/constants/analytics-page-events"; export default { methods: { - async logEvent(destinationFmgPageValue, pageEvent, category, action, label, value){ + logEvent(destinationFmgPageValue, pageEvent, category, action, label, value){ var payload = { userId: getDeviceIdValue(), sessionKey: getSessionKeyValue(), @@ -24,17 +24,7 @@ export default { payload.customEvent = {category: category, action: action, label: label, value: value}; } - const logActivityPromise = baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOG_ACTIVITY, payload, false); - - // Settle promises and get results - const promiseResultMap = [ - { - resultKey: "logActivity", - promise: logActivityPromise, - }, - ]; - - let resultMap = await settleAllPromises(promiseResultMap); + baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOG_ACTIVITY, payload, false); }, pushEventToGA(category, action, label, value, pageName, pushToLogApp) {