-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
86 lines (73 loc) · 2.05 KB
/
index.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import connectionScript from './connection';
import { InitProps, Props, TrackableEventData } from './types';
import { TrackableEventNameEnum } from './enums';
class SnapchatPixel {
constructor({ pixelID, debug = true, pageViewOnInit = true }: Props) {
connectionScript();
this.pixelID = pixelID;
this.debug = debug;
this.pageViewOnInit = pageViewOnInit;
}
private pixelID: string;
private debug: boolean;
private consolePrefix = '[react-use-snapchat-pixel]';
private initialized = false;
private pageViewOnInit: boolean;
private clientDedupId: string | undefined = undefined;
init(props: InitProps) {
if (this.initialized && this.debug) {
console.error(
this.consolePrefix,
new Date().toLocaleTimeString(),
'\nError',
'Snapchat Pixel was already initialized'
);
return;
}
window.snaptr('init', this.pixelID, props);
if (this.debug) {
console.log(
this.consolePrefix,
new Date().toLocaleTimeString(),
'Snapchat Pixel initialized'
);
}
if (this.pageViewOnInit) {
this.trackEvent(TrackableEventNameEnum.PAGE_VIEW);
}
this.initialized = true;
}
getClientDeduplicationId() {
return this.clientDedupId;
}
trackEvent(
eventName: TrackableEventNameEnum | keyof typeof TrackableEventNameEnum,
data?: TrackableEventData[TrackableEventNameEnum]
) {
if (!this.initialized && this.debug) {
console.error(
this.consolePrefix,
new Date().toLocaleTimeString(),
'\nError',
'\nYou tried to track event before initialization'
);
return;
}
if (data?.client_dedup_id) {
this.clientDedupId = data.client_dedup_id;
}
window.snaptr('track', eventName, data);
if (this.debug) {
console.log(
this.consolePrefix,
new Date().toLocaleTimeString(),
'\nEvent tracked.',
'\nEvent name: ',
eventName,
'\nEvent data: ',
data
);
}
}
}
export { SnapchatPixel, TrackableEventNameEnum };