@bemit/consent-ui
Version:
75 lines • 1.99 kB
JavaScript
export const loadGtag = (googleTracking, cb) => {
const scriptGa = document.createElement('script');
scriptGa.async = true;
scriptGa.src = 'https://www.googletagmanager.com/gtag/js?id=' + googleTracking;
scriptGa.onload = cb;
document.body.append(scriptGa);
};
export const pluginGoogle = (group, googleTracking, config, options = {
controlledPageView: true
}) => {
const gtagState = {
loaded: false
};
window.gtag = function () {
window.dataLayer?.push(arguments);
};
let tmpLayer = [];
if (!gtagState.loaded) {
tmpLayer = [...(window.dataLayer || [])];
window.dataLayer = [];
}
return {
shouldBe: options => {
return Boolean(options?.groups?.[group]);
},
create: wasAlreadyCreated => {
if (wasAlreadyCreated) return;
const cb = () => {
window.gtag?.('js', new Date());
window.gtag?.('config', googleTracking, {
anonymize_ip: true,
transport_type: 'beacon',
send_page_view: !options?.controlledPageView,
...config
});
if (options?.controlledPageView) {
trackPageView({}, options);
}
tmpLayer.forEach(function (elem) {
window.dataLayer.push(elem);
});
tmpLayer = [];
};
if (!gtagState.loaded) {
gtagState.loaded = true;
loadGtag(googleTracking, cb);
} else {
cb();
}
},
destroy: () => {
return {
requiresRefresh: true
};
}
};
};
export function trackPageView(attributes, options = {}) {
const {
omitQuery = false,
includeHash = false
} = options;
let url = window.location.origin + window.location.pathname;
if (!omitQuery && window.location.search) {
url += window.location.search;
}
if (includeHash && window.location.hash) {
url += window.location.hash;
}
window.gtag?.('event', 'page_view', {
page_title: document.title,
page_location: url,
...attributes
});
}