added segment integration

This commit is contained in:
Nikhil Nandagopal 2019-08-30 16:53:42 +05:30
parent e3ee07d158
commit 7acfc149ad
3 changed files with 62 additions and 24 deletions

View File

@ -0,0 +1,59 @@
export type EventName = "PAGE_VIEW" | "ADD_COMPONENT" | "DELETE_COMPONENT" | "RESIZE_COMPONENT"
export type Gender = "MALE" | "FEMALE"
export interface User {
userId: string
name: string
email: string
gender: Gender
}
class AnalyticsUtil {
static initializeHotjar(id: string, sv: string) {
(function init(h: any, o: any, t: any, j: any, a?: any, r?: any) {
h.hj =
h.hj ||
function() {
(h.hj.q = h.hj.q || []).push(arguments);
};
h._hjSettings = { hjid: id, hjsv: sv };
a = o.getElementsByTagName('head')[0];
r = o.createElement('script');
r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, '//static.hotjar.com/c/hotjar-', '.js?sv=');
};
static initializeSegment() {
(function init(window: any){
var analytics=window.analytics=window.analytics||[];
if(!analytics.initialize) {
if(analytics.invoked) {
window.console&&console.error&&console.error("Segment snippet included twice.");
} else {
analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];
analytics.factory=function(t: any){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}
};
}
for(var t: any=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t: any,e: any){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a: any=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
analytics.load("O7rsLdWq7fhJI9rYsj1eatGAjuULTmfP");
analytics.page();
}
})(window)
}
static logEvent(eventName: EventName, eventData: any) {
const windowDoc: any = window
windowDoc.analytics.track(eventName, eventData);
}
static identifyUser(userId: string, userData: User) {
const windowDoc: any = window
windowDoc.analytics.identify(userId, userData);
}
}
export default AnalyticsUtil

View File

@ -1,7 +1,7 @@
import { ReduxAction } from "../constants/ActionConstants" import { ReduxAction } from "../constants/ActionConstants"
import { SENTRY_PROD_CONFIG, SENTRY_STAGE_CONFIG, HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV } from "../constants/ThirdPartyConstants"; import { SENTRY_PROD_CONFIG, SENTRY_STAGE_CONFIG, HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV } from "../constants/ThirdPartyConstants";
import * as Sentry from '@sentry/browser'; import * as Sentry from '@sentry/browser';
import HotjarUtil from "./HotjarUtil" import AnalyticsUtil from "./AnalyticsUtil"
export const createReducer = ( export const createReducer = (
initialState: any, initialState: any,
@ -20,13 +20,13 @@ export const appInitializer = () => {
switch (process.env.REACT_APP_ENVIRONMENT) { switch (process.env.REACT_APP_ENVIRONMENT) {
case "PRODUCTION": case "PRODUCTION":
Sentry.init(SENTRY_PROD_CONFIG); Sentry.init(SENTRY_PROD_CONFIG);
HotjarUtil.initializeHotjar(HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV); AnalyticsUtil.initializeHotjar(HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV);
AnalyticsUtil.initializeSegment();
break; break;
case "STAGING": case "STAGING":
Sentry.init(SENTRY_STAGE_CONFIG); Sentry.init(SENTRY_STAGE_CONFIG);
break break
case "LOCAL": case "LOCAL":
HotjarUtil.initializeHotjar(HOTJAR_PROD_HJID, HOTJAR_PROD_HJSV);
break; break;
} }
} }

View File

@ -1,21 +0,0 @@
class HotjarUtil {
static initializeHotjar(id: string, sv: string) {
(function init(h: any, o: any, t: any, j: any, a?: any, r?: any) {
h.hj =
h.hj ||
function() {
(h.hj.q = h.hj.q || []).push(arguments);
};
h._hjSettings = { hjid: id, hjsv: sv };
a = o.getElementsByTagName('head')[0];
r = o.createElement('script');
r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, '//static.hotjar.com/c/hotjar-', '.js?sv=');
};
}
export default HotjarUtil