-
Notifications
You must be signed in to change notification settings - Fork 67
/
Analytics.service.ts
63 lines (56 loc) 路 1.52 KB
/
Analytics.service.ts
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
import {AnalyticsBrowser} from '@segment/analytics-next';
import {Categories} from 'constants/Analytics.constants';
import Env from 'utils/Env';
const isAnalyticsEnabled = () => Env.get('analyticsEnabled') && !Env.get('isTracetestDev');
const appVersion = Env.get('appVersion');
const env = Env.get('env');
const serverID = Env.get('serverID');
const measurementId = Env.get('measurementId');
export const analytics = new AnalyticsBrowser();
type TAnalyticsService = {
event<A>(category: Categories, action: A, label: string): void;
page(page: string): void;
identify(): void;
load(): void;
};
const AnalyticsService = (): TAnalyticsService => ({
event<A>(category: Categories, action: A, label: string) {
if (!isAnalyticsEnabled()) return;
analytics.track(String(action), {
serverID,
appVersion,
env,
label,
category,
});
},
page(name: string) {
if (!isAnalyticsEnabled()) return;
analytics.page(name, {
serverID,
appVersion,
env,
});
},
identify() {
if (!isAnalyticsEnabled()) return;
analytics.identify({
serverID,
appVersion,
env,
});
},
load() {
const isSegmentLoaded = Env.get('segmentLoaded');
if (isAnalyticsEnabled() && !isSegmentLoaded) {
analytics.load({writeKey: measurementId});
Env.set('segmentLoaded', true);
return;
}
if (!isAnalyticsEnabled() && isSegmentLoaded) {
analytics.reset();
Env.set('segmentLoaded', false);
}
},
});
export default AnalyticsService();