summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/google_tag_manager/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/google_tag_manager/index.js')
-rw-r--r--app/assets/javascripts/google_tag_manager/index.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/app/assets/javascripts/google_tag_manager/index.js b/app/assets/javascripts/google_tag_manager/index.js
new file mode 100644
index 00000000000..ab80e15c2ec
--- /dev/null
+++ b/app/assets/javascripts/google_tag_manager/index.js
@@ -0,0 +1,122 @@
+import { logError } from '~/lib/logger';
+
+const isSupported = () => Boolean(window.dataLayer) && gon.features?.gitlabGtmDatalayer;
+
+const pushEvent = (event, args = {}) => {
+ if (!window.dataLayer) {
+ return;
+ }
+
+ try {
+ window.dataLayer.push({
+ event,
+ ...args,
+ });
+ } catch (e) {
+ logError('Unexpected error while pushing to dataLayer', e);
+ }
+};
+
+const pushAccountSubmit = (accountType, accountMethod) =>
+ pushEvent('accountSubmit', { accountType, accountMethod });
+
+const trackFormSubmission = (accountType) => {
+ const form = document.getElementById('new_new_user');
+ form.addEventListener('submit', () => {
+ pushAccountSubmit(accountType, 'form');
+ });
+};
+
+const trackOmniAuthSubmission = (accountType) => {
+ const links = document.querySelectorAll('.js-oauth-login');
+ links.forEach((link) => {
+ const { provider } = link.dataset;
+ link.addEventListener('click', () => {
+ pushAccountSubmit(accountType, provider);
+ });
+ });
+};
+
+export const trackFreeTrialAccountSubmissions = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ trackFormSubmission('freeThirtyDayTrial');
+ trackOmniAuthSubmission('freeThirtyDayTrial');
+};
+
+export const trackNewRegistrations = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ trackFormSubmission('standardSignUp');
+ trackOmniAuthSubmission('standardSignUp');
+};
+
+export const trackSaasTrialSubmit = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ pushEvent('saasTrialSubmit');
+};
+
+export const trackSaasTrialSkip = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ const skipLink = document.querySelector('.js-skip-trial');
+ skipLink.addEventListener('click', () => {
+ pushEvent('saasTrialSkip');
+ });
+};
+
+export const trackSaasTrialGroup = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ const form = document.querySelector('.js-saas-trial-group');
+ form.addEventListener('submit', () => {
+ pushEvent('saasTrialGroup');
+ });
+};
+
+export const trackSaasTrialProject = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ const form = document.getElementById('new_project');
+ form.addEventListener('submit', () => {
+ pushEvent('saasTrialProject');
+ });
+};
+
+export const trackSaasTrialProjectImport = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ const importButtons = document.querySelectorAll('.js-import-project-btn');
+ importButtons.forEach((button) => {
+ button.addEventListener('click', () => {
+ const { platform } = button.dataset;
+ pushEvent('saasTrialProjectImport', { saasProjectImport: platform });
+ });
+ });
+};
+
+export const trackSaasTrialGetStarted = () => {
+ if (!isSupported()) {
+ return;
+ }
+
+ const getStartedButton = document.querySelector('.js-get-started-btn');
+ getStartedButton.addEventListener('click', () => {
+ pushEvent('saasTrialGetStarted');
+ });
+};