This repository has been archived by the owner on Mar 27, 2023. It is now read-only.
/
log_event.js
64 lines (58 loc) · 2.05 KB
/
log_event.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
// @flow
export const logEvent = (eventName: string, payload: any) => {
if (typeof window.mixpanel === 'undefined') return;
if (typeof window.champaign === 'undefined') return;
const opts = {
page: window.champaign.page.slug,
plugins: window.champaign.page.plugins,
layout: window.champaign.page.layout,
follow_up_layout: window.champaign.page.follow_up_layout,
new_member: !Object.keys(window.champaign.personalization.member).length,
...payload,
};
if (window.TRACK_USER_ACTIONS) window.mixpanel.track(eventName, opts);
if (window.ga) logToGa(eventName, payload);
};
const getEventData = (eventName: string, data: any) => {
switch (eventName) {
case 'action:submitted_success':
return ['action', 'submitted_success'];
case '@@chmp:consent:change_country':
return ['gdpr', 'change_country', data.countryCode];
case '@@chmp:consent:change_consent':
return ['gdpr', 'change_consent', data.consented ? 'true' : 'false'];
case 'change_amount':
return ['fundraising', 'change_amount', null, parseFloat(data.payload)];
case 'set_store_in_vault':
return [
'fundraising',
'set_store_in_vault',
data.payload ? 'true' : 'false',
];
case 'set_recurring':
return ['fundraising', 'set_recurring', data.payload ? 'true' : 'false'];
case 'fundraiser:transaction_submitted':
return [
'fundraising',
'transaction_submitted',
null,
parseFloat(data.amount),
];
case 'change_step':
return ['fundraising', 'change_step', data.payload];
case 'change_currency':
return ['fundraising', 'change_currency', data.payload];
case 'set_payment_type':
return ['fundraising', 'set_payment_type', data.payload];
case 'social_share':
return ['social_share', 'shared_on_' + data.share_type];
default:
return false;
}
};
const logToGa = (eventName: string, data: any) => {
const eventData = getEventData(eventName, data);
if (eventData) {
window.ga('send', 'event', ...eventData);
}
};