diff options
author | Steve Klebanoff <steve@0xproject.com> | 2018-11-21 01:23:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-21 01:23:34 +0800 |
commit | ba41fc9275bebe17577f87d72f54b7e7dc420acc (patch) | |
tree | 54b788a7cbf76c8c3781dbcb1fb11d8b21156b13 /packages/instant/src/util/analytics.ts | |
parent | 36e888c3a50ea9a639a8935690ea7dd67dedf166 (diff) | |
parent | 497385818b42f298c777ce3fbeb3e2d55a2bdc64 (diff) | |
download | dexon-0x-contracts-ba41fc9275bebe17577f87d72f54b7e7dc420acc.tar.gz dexon-0x-contracts-ba41fc9275bebe17577f87d72f54b7e7dc420acc.tar.zst dexon-0x-contracts-ba41fc9275bebe17577f87d72f54b7e7dc420acc.zip |
Merge pull request #1272 from 0xProject/feature/instant/heap
[instant] Base heap integration
Diffstat (limited to 'packages/instant/src/util/analytics.ts')
-rw-r--r-- | packages/instant/src/util/analytics.ts | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/instant/src/util/analytics.ts b/packages/instant/src/util/analytics.ts new file mode 100644 index 000000000..2ffaac1dd --- /dev/null +++ b/packages/instant/src/util/analytics.ts @@ -0,0 +1,64 @@ +import { ObjectMap } from '@0x/types'; + +import { heapUtil } from './heap'; + +let isDisabled = false; +export const disableAnalytics = (shouldDisableAnalytics: boolean) => { + isDisabled = shouldDisableAnalytics; +}; +export const evaluateIfEnabled = (fnCall: () => void) => { + if (isDisabled) { + return; + } + fnCall(); +}; + +enum EventNames { + INSTANT_OPENED = 'Instant - Opened', + WALLET_READY = 'Wallet - Ready', +} +const track = (eventName: EventNames, eventData: ObjectMap<string | number> = {}): void => { + evaluateIfEnabled(() => { + heapUtil.evaluateHeapCall(heap => heap.track(eventName, eventData)); + }); +}; +function trackingEventFnWithoutPayload(eventName: EventNames): () => void { + return () => { + track(eventName); + }; +} +// tslint:disable-next-line:no-unused-variable +function trackingEventFnWithPayload<T extends ObjectMap<string | number>>( + eventName: EventNames, +): (eventDataProperties: T) => void { + return (eventDataProperties: T) => { + track(eventName, eventDataProperties); + }; +} + +export interface AnalyticsUserOptions { + ethAddress?: string; + ethBalanceInUnitAmount?: string; +} +export interface AnalyticsEventOptions { + embeddedHost?: string; + embeddedUrl?: string; + networkId?: number; + providerName?: string; + gitSha?: string; + npmVersion?: string; +} +export const analytics = { + addUserProperties: (properties: AnalyticsUserOptions): void => { + evaluateIfEnabled(() => { + heapUtil.evaluateHeapCall(heap => heap.addUserProperties(properties)); + }); + }, + addEventProperties: (properties: AnalyticsEventOptions): void => { + evaluateIfEnabled(() => { + heapUtil.evaluateHeapCall(heap => heap.addEventProperties(properties)); + }); + }, + trackWalletReady: trackingEventFnWithoutPayload(EventNames.WALLET_READY), + trackInstantOpened: trackingEventFnWithoutPayload(EventNames.INSTANT_OPENED), +}; |