Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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.js311
1 files changed, 1 insertions, 310 deletions
diff --git a/app/assets/javascripts/google_tag_manager/index.js b/app/assets/javascripts/google_tag_manager/index.js
index a9ae9a5af82..0cb25fbaeb5 100644
--- a/app/assets/javascripts/google_tag_manager/index.js
+++ b/app/assets/javascripts/google_tag_manager/index.js
@@ -1,310 +1 @@
-import { v4 as uuidv4 } from 'uuid';
-import { logError } from '~/lib/logger';
-
-const SKU_PREMIUM = '2c92a00d76f0d5060176f2fb0a5029ff';
-const SKU_ULTIMATE = '2c92a0ff76f0d5250176f2f8c86f305a';
-const PRODUCT_INFO = {
- [SKU_PREMIUM]: {
- // eslint-disable-next-line @gitlab/require-i18n-strings
- name: 'Premium',
- id: '0002',
- price: '228',
- variant: 'SaaS',
- },
- [SKU_ULTIMATE]: {
- // eslint-disable-next-line @gitlab/require-i18n-strings
- name: 'Ultimate',
- id: '0001',
- price: '1188',
- variant: 'SaaS',
- },
-};
-const EMPTY_NAMESPACE_ID_VALUE = 'not available';
-
-const generateProductInfo = (sku, quantity) => {
- const product = PRODUCT_INFO[sku];
-
- if (!product) {
- logError('Unexpected product sku provided to generateProductInfo');
- return {};
- }
-
- const productInfo = {
- ...product,
- brand: 'GitLab',
- category: 'DevOps',
- quantity,
- };
-
- return productInfo;
-};
-
-const isSupported = () => Boolean(window.dataLayer) && gon.features?.gitlabGtmDatalayer;
-// gon.features.gitlabGtmDatalayer is set by writing
-// `push_frontend_feature_flag(:gitlab_gtm_datalayer, type: :ops)`
-// to the appropriate controller
-// window.dataLayer is set by adding partials to the appropriate view found in
-// views/layouts/_google_tag_manager_body.html.haml and _google_tag_manager_head.html.haml
-
-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 pushEnhancedEcommerceEvent = (event, args = {}) => {
- if (!window.dataLayer) {
- return;
- }
-
- try {
- window.dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object
- 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 trackSaasTrialGroup = () => {
- if (!isSupported()) {
- return;
- }
-
- const form = document.querySelector('.js-saas-trial-group');
-
- if (!form) return;
-
- form.addEventListener('submit', () => {
- pushEvent('saasTrialGroup');
- });
-};
-
-export const trackProjectImport = () => {
- if (!isSupported()) {
- return;
- }
-
- const importButtons = document.querySelectorAll('.js-import-project-btn');
- importButtons.forEach((button) => {
- button.addEventListener('click', () => {
- const { platform } = button.dataset;
- pushEvent('projectImport', { platform });
- });
- });
-};
-
-export const trackSaasTrialGetStarted = () => {
- if (!isSupported()) {
- return;
- }
-
- const getStartedButton = document.querySelector('.js-get-started-btn');
- getStartedButton.addEventListener('click', () => {
- pushEvent('saasTrialGetStarted');
- });
-};
-
-export const trackTrialAcceptTerms = () => {
- if (!isSupported()) {
- return;
- }
-
- pushEvent('saasTrialAcceptTerms');
-};
-
-export const trackCheckout = (selectedPlan, quantity) => {
- if (!isSupported()) {
- return;
- }
-
- const product = generateProductInfo(selectedPlan, quantity);
-
- if (Object.keys(product).length === 0) {
- return;
- }
-
- const eventData = {
- ecommerce: {
- currencyCode: 'USD',
- checkout: {
- actionField: { step: 1 },
- products: [product],
- },
- },
- };
-
- // eslint-disable-next-line @gitlab/require-i18n-strings
- pushEnhancedEcommerceEvent('EECCheckout', eventData);
-};
-
-export const getNamespaceId = () => {
- return window.gl.snowplowStandardContext?.data?.namespace_id || EMPTY_NAMESPACE_ID_VALUE;
-};
-
-export const trackTransaction = (transactionDetails) => {
- if (!isSupported()) {
- return;
- }
-
- const transactionId = uuidv4();
- const { paymentOption, revenue, tax, selectedPlan, quantity } = transactionDetails;
- const product = generateProductInfo(selectedPlan, quantity);
- const namespaceId = getNamespaceId();
-
- if (Object.keys(product).length === 0) {
- return;
- }
-
- const eventData = {
- ecommerce: {
- currencyCode: 'USD',
- purchase: {
- actionField: {
- id: transactionId,
- affiliation: 'GitLab',
- option: paymentOption,
- revenue: revenue.toString(),
- tax: tax.toString(),
- },
- products: [{ ...product, dimension36: namespaceId }],
- },
- },
- };
-
- pushEnhancedEcommerceEvent('EECtransactionSuccess', eventData);
-};
-
-export const pushEECproductAddToCartEvent = () => {
- if (!isSupported()) {
- return;
- }
-
- window.dataLayer.push({
- event: 'EECproductAddToCart',
- ecommerce: {
- currencyCode: 'USD',
- add: {
- products: [
- {
- name: 'CI/CD Minutes',
- id: '0003',
- price: '10',
- brand: 'GitLab',
- category: 'DevOps',
- variant: 'add-on',
- quantity: 1,
- },
- ],
- },
- },
- });
-};
-
-export const trackAddToCartUsageTab = () => {
- const getStartedButton = document.querySelector('.js-buy-additional-minutes');
- if (!getStartedButton) {
- return;
- }
- getStartedButton.addEventListener('click', pushEECproductAddToCartEvent);
-};
-
-export const trackCombinedGroupProjectForm = () => {
- if (!isSupported()) {
- return;
- }
-
- const form = document.querySelector('.js-groups-projects-form');
- form.addEventListener('submit', () => {
- pushEvent('combinedGroupProjectFormSubmit');
- });
-};
-
-export const trackCompanyForm = (aboutYourCompanyType) => {
- if (!isSupported()) {
- return;
- }
-
- pushEvent('aboutYourCompanyFormSubmit', { aboutYourCompanyType });
-};
-
-export const saasTrialWelcome = () => {
- if (!isSupported()) {
- return;
- }
-
- const saasTrialWelcomeButton = document.querySelector('.js-trial-welcome-btn');
-
- saasTrialWelcomeButton?.addEventListener('click', () => {
- pushEvent('saasTrialWelcome');
- });
-};
-
-export const saasTrialContinuousOnboarding = () => {
- if (!isSupported()) {
- return;
- }
-
- const getStartedButton = document.querySelector('.js-get-started-btn');
-
- getStartedButton?.addEventListener('click', () => {
- pushEvent('saasTrialContinuousOnboarding');
- });
-};
+export const trackTrialAcceptTerms = () => {};