index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import getMeta from '../../../utils/meta'
  2. import { swapModal } from '../../utils/swapModal'
  3. import * as eventTracking from '../../../infrastructure/event-tracking'
  4. function getFormValues() {
  5. const modalEl = document.querySelector('[data-ol-group-plan-modal]')
  6. const planCode = modalEl.querySelector('#plan_code').value
  7. const size = modalEl.querySelector('#size').value
  8. const currency = modalEl.querySelector('#currency').value
  9. const usage = modalEl.querySelector('#usage').value
  10. return { planCode, size, currency, usage }
  11. }
  12. function updateGroupPlanView() {
  13. const prices = getMeta('ol-groupPlans')
  14. const currencySymbols = getMeta('ol-currencySymbols')
  15. const modalEl = document.querySelector('[data-ol-group-plan-modal]')
  16. const { planCode, size, currency, usage } = getFormValues()
  17. const price = prices[usage][planCode][currency][size]
  18. const currencySymbol = currencySymbols[currency]
  19. const displayPrice = `${currencySymbol}${price}`
  20. modalEl.querySelectorAll('[data-ol-group-plan-plan-code]').forEach(el => {
  21. el.hidden = el.getAttribute('data-ol-group-plan-plan-code') !== planCode
  22. })
  23. modalEl.querySelectorAll('[data-ol-group-plan-usage]').forEach(el => {
  24. el.hidden = el.getAttribute('data-ol-group-plan-usage') !== usage
  25. })
  26. modalEl.querySelector(
  27. '[data-ol-group-plan-display-price]'
  28. ).innerText = displayPrice
  29. modalEl.querySelector(
  30. '[data-ol-group-plan-for-n-users]'
  31. ).innerText = `For ${size} users`
  32. }
  33. const modalEl = $('[data-ol-group-plan-modal]')
  34. modalEl
  35. .on('shown.bs.modal', function () {
  36. const path = `${window.location.pathname}${window.location.search}`
  37. history.replaceState(null, document.title, path + '#groups')
  38. })
  39. .on('hidden.bs.modal', function () {
  40. history.replaceState(null, document.title, window.location.pathname)
  41. })
  42. function showGroupPlanModal() {
  43. modalEl.modal()
  44. eventTracking.send(
  45. 'subscription-funnel',
  46. 'plans-page',
  47. 'group-inquiry-potential'
  48. )
  49. }
  50. document
  51. .querySelectorAll('[data-ol-group-plan-form] select')
  52. .forEach(el => el.addEventListener('change', updateGroupPlanView))
  53. document.querySelectorAll('[data-ol-purchase-group-plan]').forEach(el =>
  54. el.addEventListener('click', e => {
  55. e.preventDefault()
  56. const { planCode, size, currency, usage } = getFormValues()
  57. const queryParams = new URLSearchParams(
  58. Object.entries({
  59. planCode: `group_${planCode}_${size}_${usage}`,
  60. currency,
  61. itm_campaign: 'groups',
  62. })
  63. )
  64. const itmContent = getMeta('ol-itm_content')
  65. if (itmContent) {
  66. queryParams.set('itm_content', itmContent)
  67. }
  68. const url = new URL('/user/subscription/new', window.origin)
  69. url.search = queryParams.toString()
  70. window.location = url.toString()
  71. })
  72. )
  73. document.querySelectorAll('[data-ol-open-group-plan-modal]').forEach(el => {
  74. el.addEventListener('click', function (e) {
  75. e.preventDefault()
  76. showGroupPlanModal()
  77. })
  78. })
  79. document
  80. .querySelectorAll('[data-ol-open-contact-form-for-more-than-50-licenses]')
  81. .forEach(el => {
  82. el.addEventListener('click', function (e) {
  83. e.preventDefault()
  84. swapModal(
  85. '[data-ol-group-plan-modal]',
  86. '[data-ol-contact-form-modal="general"]'
  87. )
  88. })
  89. })
  90. updateGroupPlanView()
  91. if (window.location.hash === '#groups') {
  92. showGroupPlanModal()
  93. }