plans.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import '../../../marketing'
  2. import '../../../features/plans/group-plan-modal'
  3. import * as eventTracking from '../../../infrastructure/event-tracking'
  4. import getMeta from '../../../utils/meta'
  5. let currentView = 'monthly'
  6. let currentCurrencyCode = getMeta('ol-recommendedCurrency')
  7. function selectView(view) {
  8. document.querySelectorAll('[data-ol-view-tab]').forEach(el => {
  9. if (el.getAttribute('data-ol-view-tab') === view) {
  10. el.classList.add('active')
  11. } else {
  12. el.classList.remove('active')
  13. }
  14. })
  15. document.querySelectorAll('[data-ol-view]').forEach(el => {
  16. el.hidden = el.getAttribute('data-ol-view') !== view
  17. })
  18. currentView = view
  19. updateLinkTargets()
  20. }
  21. function setUpViewSwitching(liEl) {
  22. const view = liEl.getAttribute('data-ol-view-tab')
  23. liEl.querySelector('a').addEventListener('click', function (e) {
  24. e.preventDefault()
  25. eventTracking.send('subscription-funnel', 'plans-page', `${view}-prices`)
  26. eventTracking.sendMB('plans-page-toggle', { button: view })
  27. selectView(view)
  28. })
  29. }
  30. function setUpCurrencySwitching(linkEl) {
  31. const currencyCode = linkEl.getAttribute('data-ol-currencyCode-switch')
  32. linkEl.addEventListener('click', function (e) {
  33. e.preventDefault()
  34. document.querySelectorAll('[data-ol-currencyCode]').forEach(el => {
  35. el.hidden = el.getAttribute('data-ol-currencyCode') !== currencyCode
  36. })
  37. currentCurrencyCode = currencyCode
  38. eventTracking.sendMB('plans-page-currency', { currency: currencyCode })
  39. updateLinkTargets()
  40. })
  41. }
  42. function setUpSubscriptionTracking(linkEl) {
  43. const plan =
  44. linkEl.getAttribute('data-ol-tracking-plan') ||
  45. linkEl.getAttribute('data-ol-start-new-subscription')
  46. const location = linkEl.getAttribute('data-ol-location')
  47. const period = linkEl.getAttribute('data-ol-item-view') || currentView
  48. linkEl.addEventListener('click', function () {
  49. const customLabel = linkEl.getAttribute('data-ol-tracking-label')
  50. const computedLabel = currentView === 'annual' ? `${plan}_annual` : plan
  51. const label = customLabel || computedLabel
  52. eventTracking.sendMB('plans-page-start-trial') // deprecated by plans-page-click
  53. eventTracking.send('subscription-funnel', 'sign_up_now_button', label) // deprecated by plans-page-click
  54. eventTracking.sendMB('plans-page-click', {
  55. button: plan,
  56. location,
  57. period,
  58. })
  59. })
  60. }
  61. function updateLinkTargets() {
  62. document.querySelectorAll('[data-ol-start-new-subscription]').forEach(el => {
  63. if (el.hasAttribute('data-ol-has-custom-href')) return
  64. const plan = el.getAttribute('data-ol-start-new-subscription')
  65. const view = el.getAttribute('data-ol-item-view') || currentView
  66. const suffix = view === 'annual' ? `-annual` : `_free_trial_7_days`
  67. const planCode = `${plan}${suffix}`
  68. const location = el.getAttribute('data-ol-location')
  69. el.href = `/user/subscription/new?planCode=${planCode}&currency=${currentCurrencyCode}&itm_campaign=plans&itm_content=${location}`
  70. })
  71. }
  72. function selectViewFromHash() {
  73. try {
  74. const params = new URLSearchParams(window.location.hash.substring(1))
  75. const view = params.get('view')
  76. if (view) {
  77. // make sure the selected view is valid
  78. if (document.querySelector(`[data-ol-view-tab="${view}"]`)) {
  79. selectView(view)
  80. // clear the hash so it doesn't persist when switching plans
  81. window.location.hash = ''
  82. }
  83. }
  84. } catch {
  85. // do nothing
  86. }
  87. }
  88. document.querySelectorAll('[data-ol-view-tab]').forEach(setUpViewSwitching)
  89. document
  90. .querySelectorAll('[data-ol-currencyCode-switch]')
  91. .forEach(setUpCurrencySwitching)
  92. document
  93. .querySelectorAll('[data-ol-start-new-subscription]')
  94. .forEach(setUpSubscriptionTracking)
  95. updateLinkTargets()
  96. selectViewFromHash()
  97. window.addEventListener('hashchange', selectViewFromHash)