lbry-desktop/ui/redux/middleware/analytics.js
2021-10-22 10:56:44 +08:00

67 lines
1.7 KiB
JavaScript

// @flow
import analytics, { GA_DIMENSIONS } from 'analytics';
import * as ACTIONS from 'constants/action_types';
export function createAnalyticsMiddleware() {
return (/* { dispatch, getState } */) => (next: any) => (action: {
type: string,
data: any,
actions: Array<any>,
}) => {
if (action.type === 'BATCH_ACTIONS') {
action.actions.forEach((a) => handleAnalyticsForAction(a));
} else {
handleAnalyticsForAction(action);
}
return next(action);
};
}
function handleAnalyticsForAction(action: { type: string, data: any }) {
switch (action.type) {
case ACTIONS.SUPPORT_TRANSACTION_COMPLETED:
{
const { amount, type } = action.data;
analytics.reportEvent('spend_virtual_currency', {
// https://developers.google.com/analytics/devguides/collection/ga4/reference/events#spend_virtual_currency
value: amount,
virtual_currency_name: 'lbc',
item_name: type,
});
}
break;
case ACTIONS.COMMENT_CREATE_COMPLETED:
analytics.reportEvent('comments', {
[GA_DIMENSIONS.ACTION]: 'create',
});
break;
case ACTIONS.COMMENT_CREATE_FAILED:
analytics.reportEvent('comments', {
[GA_DIMENSIONS.ACTION]: 'create_fail',
});
break;
case ACTIONS.PUBLISH_SUCCESS:
{
const { type } = action.data;
analytics.reportEvent('publish', {
[GA_DIMENSIONS.ACTION]: 'publish_success',
[GA_DIMENSIONS.TYPE]: type,
});
}
break;
case ACTIONS.PUBLISH_FAIL:
analytics.reportEvent('publish', {
[GA_DIMENSIONS.ACTION]: 'publish_fail',
});
break;
default:
// Do nothing
break;
}
}