aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/ts/utils/analytics.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/website/ts/utils/analytics.ts')
-rw-r--r--packages/website/ts/utils/analytics.ts80
1 files changed, 62 insertions, 18 deletions
diff --git a/packages/website/ts/utils/analytics.ts b/packages/website/ts/utils/analytics.ts
index f4bfa083f..9a1684813 100644
--- a/packages/website/ts/utils/analytics.ts
+++ b/packages/website/ts/utils/analytics.ts
@@ -1,27 +1,71 @@
import * as _ from 'lodash';
-import * as ReactGA from 'react-ga';
-import { InjectedWeb3 } from 'ts/types';
+import { InjectedWeb3, ObjectMap, Order } from 'ts/types';
import { configs } from 'ts/utils/configs';
import { utils } from 'ts/utils/utils';
-export const analytics = {
- init(): void {
- ReactGA.initialize(configs.GOOGLE_ANALYTICS_ID);
- },
- logEvent(category: string, action: string, label: string, value?: any): void {
- ReactGA.event({
- category,
- action,
- label,
- value,
- });
- },
- async logProviderAsync(web3IfExists: InjectedWeb3): Promise<void> {
+export interface HeapAnalytics {
+ indentify(id: string, idType: string): void;
+ track(eventName: string, eventProperties?: ObjectMap<string | number>): void;
+ resetIdentity(): void;
+ addUserProperties(properties: ObjectMap<string | number>): void;
+ addEventProperties(properties: ObjectMap<string | number>): void;
+ removeEventProperty(property: string): void;
+ clearEventProperties(): void;
+}
+
+export class Analytics implements HeapAnalytics {
+ private _heap: HeapAnalytics;
+ public static init(): Analytics {
+ const heap = (window as any).heap;
+ if (!_.isUndefined(heap)) {
+ return new Analytics(heap);
+ } else {
+ throw new Error('Could not find the Heap SDK on the page.');
+ }
+ }
+ constructor(heap: HeapAnalytics) {
+ this._heap = heap;
+ }
+ // HeapAnalytics Wrappers
+ public indentify(id: string, idType: string): void {
+ this._heap.indentify(id, idType);
+ }
+ public track(eventName: string, eventProperties?: ObjectMap<string | number>): void {
+ this._heap.track(eventName, eventProperties);
+ }
+ public resetIdentity(): void {
+ this._heap.resetIdentity();
+ }
+ public addUserProperties(properties: ObjectMap<string | number>): void {
+ this._heap.addUserProperties(properties);
+ }
+ public addEventProperties(properties: ObjectMap<string | number>): void {
+ this._heap.addEventProperties(properties);
+ }
+ public removeEventProperty(property: string): void {
+ this._heap.removeEventProperty(property);
+ }
+ public clearEventProperties(): void {
+ this._heap.clearEventProperties();
+ }
+ // Custom methods
+ public trackOrderEvent(eventName: string, order: Order): void {
+ const orderLoggingData = {
+ takerTokenAmount: order.signedOrder.takerTokenAmount,
+ makeTokenAmount: order.signedOrder.makerTokenAmount,
+ takerToken: order.metadata.takerToken.symbol,
+ makerToken: order.metadata.makerToken.symbol,
+ };
+ this.track(eventName, orderLoggingData);
+ }
+ public async logProviderAsync(web3IfExists: InjectedWeb3): Promise<void> {
await utils.onPageLoadAsync();
const providerType =
!_.isUndefined(web3IfExists) && !_.isUndefined(web3IfExists.currentProvider)
? utils.getProviderType(web3IfExists.currentProvider)
: 'NONE';
- ReactGA.ga('set', 'dimension1', providerType);
- },
-};
+ }
+}
+
+// Assume heap library has loaded.
+export const analytics = Analytics.init();