diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-20 09:16:11 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-20 09:16:11 +0000 |
commit | edaa33dee2ff2f7ea3fac488d41558eb5f86d68c (patch) | |
tree | 11f143effbfeba52329fb7afbd05e6e2a3790241 /app/assets/javascripts/google_tag_manager | |
parent | d8a5691316400a0f7ec4f83832698f1988eb27c1 (diff) | |
download | gitlab-ce-edaa33dee2ff2f7ea3fac488d41558eb5f86d68c.tar.gz |
Add latest changes from gitlab-org/gitlab@14-7-stable-eev14.7.0-rc42
Diffstat (limited to 'app/assets/javascripts/google_tag_manager')
-rw-r--r-- | app/assets/javascripts/google_tag_manager/index.js | 122 |
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'); + }); +}; |