UNPKG

@recras/online-booking-js

Version:

JS library for easy integration of Recras online booking and voucher sales

106 lines (89 loc) 3.72 kB
class RecrasEventHelper { static PREFIX_GLOBAL = 'Recras'; static PREFIX_BOOKING = 'Booking'; static PREFIX_CONTACT_FORM = 'ContactForm'; static PREFIX_VOUCHER = 'Voucher'; static EVENT_BOOKING_BOOKING_SUBMITTED = 'BuyInProgress'; static EVENT_BOOKING_CONTACT_FORM_SHOWN = 'ContactFormShown'; static EVENT_BOOKING_DATE_SELECTED = 'DateSelected'; static EVENT_BOOKING_PACKAGE_CHANGED = 'PackageChanged'; static EVENT_BOOKING_PACKAGES_SHOWN = 'PackagesShown'; static EVENT_BOOKING_PRODUCTS_SHOWN = 'ProductsShown'; static EVENT_BOOKING_REDIRECT_PAYMENT = 'RedirectToPayment'; static EVENT_BOOKING_RESET = 'Reset'; static EVENT_BOOKING_TIME_SELECTED = 'TimeSelected'; static EVENT_CONTACT_FORM_SUBMIT = 'Submit'; static EVENT_VOUCHER_REDIRECT_PAYMENT = 'RedirectToPayment'; static EVENT_VOUCHER_TEMPLATE_CHANGED = 'TemplateChanged'; static EVENT_VOUCHER_VOUCHER_SUBMITTED = 'BuyInProgress'; constructor() { this.analyticsEnabled = false; this.eventsEnabled = RecrasEventHelper.allEvents(); } static allEvents() { return [ RecrasEventHelper.EVENT_BOOKING_BOOKING_SUBMITTED, RecrasEventHelper.EVENT_BOOKING_CONTACT_FORM_SHOWN, RecrasEventHelper.EVENT_BOOKING_DATE_SELECTED, RecrasEventHelper.EVENT_BOOKING_PACKAGE_CHANGED, RecrasEventHelper.EVENT_BOOKING_PACKAGES_SHOWN, RecrasEventHelper.EVENT_BOOKING_PRODUCTS_SHOWN, RecrasEventHelper.EVENT_BOOKING_REDIRECT_PAYMENT, RecrasEventHelper.EVENT_BOOKING_RESET, RecrasEventHelper.EVENT_BOOKING_TIME_SELECTED, RecrasEventHelper.EVENT_CONTACT_FORM_SUBMIT, RecrasEventHelper.EVENT_VOUCHER_REDIRECT_PAYMENT, RecrasEventHelper.EVENT_VOUCHER_TEMPLATE_CHANGED, RecrasEventHelper.EVENT_VOUCHER_VOUCHER_SUBMITTED, ]; } eventEnabled(name) { return this.eventsEnabled.includes(name); } ga4EventMap(action) { let map = { [RecrasEventHelper.EVENT_BOOKING_PACKAGE_CHANGED]: 'select_content', [RecrasEventHelper.EVENT_BOOKING_REDIRECT_PAYMENT]: 'begin_checkout', [RecrasEventHelper.EVENT_VOUCHER_TEMPLATE_CHANGED]: 'select_content', [RecrasEventHelper.EVENT_VOUCHER_REDIRECT_PAYMENT]: 'begin_checkout', }; if (map[action] === undefined) { return false; } return map[action]; } sendAnalyticsEvent(cat, action, label = undefined, value = undefined, ga4Value = undefined) { if (typeof window.gtag !== 'function') { return; } if (this.ga4EventMap(action) && ga4Value) { // v4 window.gtag('event', this.ga4EventMap(action), ga4Value); return; } // Global Site Tag (v3) let eventData = { event_category: RecrasEventHelper.PREFIX_GLOBAL + ':' + cat, }; if (label) { eventData.event_label = label; } if (value) { eventData.value = value; } window.gtag('event', action, eventData); } sendEvent(cat, action, label = undefined, value = undefined, ga4Value = undefined) { if (this.analyticsEnabled && this.eventEnabled(action)) { this.sendAnalyticsEvent(cat, action, label, value, ga4Value); } const event = new Event(RecrasEventHelper.PREFIX_GLOBAL + ':' + cat + ':' + action); return document.dispatchEvent(event); } setAnalytics(bool) { this.analyticsEnabled = bool; } setEvents(events) { this.eventsEnabled = events; } }