aboutsummaryrefslogtreecommitdiffstats
path: root/packages/instant/src/util/analytics.ts
blob: 4de3e5effc56cfbbdf63f33de4241e7db642dbb0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { ObjectMap } from '@0x/types';
import { logUtils } from '@0x/utils';

import { HeapAnalytics, heapUtil } from './heap';

export class Analytics {
    public static init(): Analytics {
        return new Analytics();
    }
    public track(eventName: string, eventProperties?: ObjectMap<string | number>): void {
        console.log('HEAP: tracking', eventName, eventProperties);
        this._evaluteHeapCall(heap => heap.track(eventName, eventProperties));
    }
    public addUserProperties(properties: ObjectMap<string | number>): void {
        console.log('HEAP: adding user properties', properties);
        this._evaluteHeapCall(heap => heap.addUserProperties(properties));
    }
    public addEventProperties(properties: ObjectMap<string | number>): void {
        this._evaluteHeapCall(heap => heap.addEventProperties(properties));
    }
    private _evaluteHeapCall(heapFunctionCall: (heap: HeapAnalytics) => void): void {
        const curHeap = heapUtil.getHeap();
        if (curHeap) {
            try {
                heapFunctionCall(curHeap);
            } catch (e) {
                // We never want analytics to crash our React component
                // TODO: error reporter here
                logUtils.log('Analytics error', e);
            }
        }
    }
}

export const analytics = Analytics.init();