@mntm/stats
Version:
A package for integrating analytics tools
52 lines (51 loc) • 1.61 kB
JavaScript
import { loadScript, thenable } from '../utils.js';
import { launchParams } from '../launch.js';
import { safeWindow } from '../dom.js';
/**
* Implements Google Analytics
*
* @param code G-XXXXXXX
*/
export const createProviderGA = (code) => {
const context = safeWindow;
context.ga = context.ga || [];
context.gtag = function gtag() {
// eslint-disable-next-line prefer-rest-params
const args = arguments;
context.ga.push(args);
};
context.gtag('js', new Date());
context.gtag('consent', 'default', {
// Disable cookie (Modern)
ad_storage: 'denied',
analytics_storage: 'denied',
wait_for_update: 0
});
context.gtag('config', code, {
user_id: launchParams.vk_user_id,
// Disable cookie (Legacy)
storage: 'none',
client_storage: 'none'
});
context.gtag('set', 'user_properties', {
crm_id: launchParams.vk_user_id
});
const load = loadScript(`https://www.googletagmanager.com/gtag/js?id=${code}&l=ga`);
const ready = load.then(() => {
if (context.ga.push === Array.prototype.push) {
throw new Error('net::ERR_BLOCKED_BY_CLIENT');
}
});
const provider = {
send(event, params) {
return thenable(ready, () => {
context.gtag('event', event, {
event_category: params.category || 'main',
event_label: params.label || '',
screen_name: params.screen || 'unknown'
});
});
}
};
return provider;
};