Skip to content

Adobe analytics plugin

Overview

The adobe analytics plugin is a standardised plugin that allows feature teams to integrate adobe analytics into their applications. This plugin is designed to provide a seamless integration experience, enabling teams to track user interactions and generate valuable insights for data-driven decision-making. The plugin is used in the WPaaS platform and located in the adobe-analytics service. The plugin has a dependency on the Data teams Adobe Analytics library, which is a wrapper around the Adobe Analytics SDK. This library is responsible for initialising the Adobe Analytics SDK and providing a set of functions to track user interactions.

shell
npm install --save @investec/plugins-adobe-analytics

Implementation Guide

The plugin exports a class with a set of functions that can be used in the platform and exposed in the invsy SDK. The functions are as follows:

ts
import { IAnalyticsClickEventPayload, IAnalyticsDownloadClickEventPayload, IAnalyticsInitPayload,
   IAnalyticsPageLoadEventPayload, IAnalyticsRoadblockLoadEventPayload, 
   IAnalyticsSearchClickEventPayload, IAnalyticsFormClickEventPayload, IAnalyticsRoadblockClickEventPayload,  
   IAnalyticsMiscClickEventPayload} from './types/adobe-analytics.interface';
import { AnalyticsBuilders, AnalyticsInterfaces } from '@investec/cadi-core';

declare global {
  interface Window {
    adobeDataLayer: any;
  }
}

function pushToDataLayer(data: any) {
  try
  {
    window.adobeDataLayer.push(data);
  }
  catch(e)
  {
    // Fail silently to avoid noise in console
  }
  
}

export class AdobeAnalytics {
  private eventBuilder : AnalyticsBuilders.EventBuilder<AnalyticsInterfaces.Identity.IWebPlatformUser> | undefined = undefined;


  initAnalytics(payload : IAnalyticsInitPayload) : void {
    this.eventBuilder = new AnalyticsBuilders.EventBuilder<AnalyticsInterfaces.Identity.IWebPlatformUser>(
      payload.user,
      payload.env,
      payload.digitalChannel
    );
  }

  setUserInfo(user : AnalyticsInterfaces.Identity.IWebPlatformUser) {
    this.eventBuilder?.updateUser(user);
  }

  getUserInfo() : AnalyticsInterfaces.Identity.IWebPlatformUser | undefined {
    return this.eventBuilder?.user;
  }

  adobeStandardizePageLoad(payload: IAnalyticsPageLoadEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildLoadEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      digitalChannel: payload.digitalChannel ?? undefined
    });
    

    pushToDataLayer(data);
  }


  adobeStandardizeRoadblockLoad(payload: IAnalyticsRoadblockLoadEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildLoadEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      roadblockInfo: payload.roadblockInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });
    

    pushToDataLayer(data);
  }


  adobeStandardizeGeneralClickEvent(payload: IAnalyticsClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }


  adobeStandardizeSearchClickEvent(payload : IAnalyticsSearchClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      searchInfo: payload.searchInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }


  adobeStandardizeDownloadClickEvent(payload : IAnalyticsDownloadClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      downloadInfo: payload.downloadInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }


  adobeStandardizeFormClickEvent(payload : IAnalyticsFormClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      formInfo: payload.formInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }


  adobeStandardizeRoadblockClickEvent(payload : IAnalyticsRoadblockClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      roadblockInfo: payload.roadblockInfo,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }


  adobeStandardizeOpenClickEvent(payload : IAnalyticsMiscClickEventPayload) {

    const eventInfo : AnalyticsInterfaces.Info.IEventInfo = {
      eventName: payload.eventName,
      featureName: payload.featureName
    };

    const data = this.eventBuilder?.buildClickEvent({
      eventInfo: eventInfo,
      pageInfo: payload.pageInfo ?? undefined,
      clickInfo: payload.clickInfo,
      searchInfo: payload.searchInfo ?? undefined,
      downloadInfo: payload.downloadInfo ?? undefined,
      formInfo: payload.formInfo ?? undefined,
      roadblockInfo: payload.roadblockInfo ?? undefined,
      digitalChannel: payload.digitalChannel ?? undefined
    });

    pushToDataLayer(data);
  }
}