-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.js
108 lines (92 loc) · 2.98 KB
/
index.js
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
'use strict';
import { NativeModules, NativeAppEventEmitter } from 'react-native';
const RNTaplytics = NativeModules.RNTaplytics;
let loadStatus = 'loading';
let variableNames = [];
let variableValues = [];
let variableCallbacks = [];
const resolveVariables = (success) => {
loadStatus = success ? 'succeeded' : 'failed';
RNTaplytics.variables(variableNames, variableValues, (results) => {
for (let i = 0; i < variableCallbacks.length; i++) {
variableCallbacks[i](results[i]);
}
});
};
const createVariable = (name, defaultValue, callback) => {
variableNames.push(name);
variableValues.push(defaultValue);
variableCallbacks.push(callback);
if (loadStatus !== 'loading') {
return RNTaplytics.variables([name], [defaultValue], (results) => callback(results[0]));
} else {
return defaultValue;
}
};
var propertiesLoadedSubscription = NativeAppEventEmitter.addListener(
'RNTaplyticsPropertiesLoaded',
resolveVariables,
);
let alreadyInit = false;
const Taplytics = {
init: (apiToken, options) => {
if (alreadyInit) { return; }
alreadyInit = true;
loadStatus = 'loading';
RNTaplytics.init(apiToken, options);
},
identify: RNTaplytics.setUserAttributes,
track: (name, optionalValue, optionalAttributes) => {
// TODO(aria): Better edge case handling here
const value = (typeof optionalValue === 'number') ? optionalValue : null;
const attributes = (optionalValue == null) ? optionalValue : optionalAttributes;
if (value == null) {
RNTaplytics.track(name, attributes);
} else {
RNTaplytics.trackWithValue(name, value, attributes);
}
},
page: (optionalCategory, optionalName, optionalAttributes) => {
console.warn(
"Taplytics.page is unsupported. Sending a track event instead. Called with:",
optionalCategory,
optionalName,
optionalAttributes
);
if (optionalAttributes != null) {
RNTaplytics.track('Page', 0, Object.assign({
category: optionalCategory,
name: optionalName,
}, optionalAttributes));
} else if (optionalName != null) {
if (typeof optionalName === 'string') {
RNTaplytics.track('Page', 0, {
category: optionalCategory,
name: optionalName,
});
} else {
RNTaplytics.track('Page', 0, Object.assign({
name: optionalCategory,
}, optionalAttributes));
}
} else {
RNTaplytics.track('Page', 0, {
name: optionalName,
});
}
},
reset: RNTaplytics.reset, // takes an optional callback
runningExperiments: RNTaplytics.runningExperiments,
variable: (name, defaultValue, callback) => {
return createVariable(name, defaultValue, callback);
},
codeBlock: RNTaplytics.codeBlock,
propertiesLoadedCallback: (callback) => {
var propertiesLoadedSubscription = NativeAppEventEmitter.addListener(
'RNTaplyticsPropertiesLoaded',
callback,
);
return () => propertiesLoadedSubscription.remove();
},
};
export default Taplytics;