{"version":3,"file":"zoomv.8003.min.js?t=d60e3c6d11d249698346","mappings":"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","sources":["webpack://@hero-digital/zoom/./src/components/modules/SMBROICalculator/SMBROICalculator.js"],"sourcesContent":["class BandwidthCalculator {\r\n constructor(el) {\r\n this.el = el\r\n this.showValueInput = this.el.querySelector(\r\n '.bandwidth-calculator__ShowValue'\r\n )\r\n this.mapping = {\r\n 10: '1',\r\n 20: '10',\r\n 30: '100',\r\n 40: '1000',\r\n 50: '5000+'\r\n }\r\n this.reverseMap = {}\r\n Object.entries(this.mapping).forEach(([step, val]) => {\r\n this.reverseMap[val] = step\r\n if (val.endsWith('+')) this.reverseMap[val.slice(0, -1)] = step\r\n })\r\n this.cardSelector = '.bandwidth-calculator__manualTabs-card'\r\n this.rangeStepSelector = '.bandwidth-calculator-steps'\r\n this.appsHighlightSelector = '.savings-summary .resulted-apps .highlight'\r\n this.monthlyUsageHighlightSelector = '.monthly-usage-cost .highlight'\r\n this.totalEstimatedHighlightSelector = '.total-estimated-cost .highlight'\r\n this.appCostSelector = '.bandwidth-calculator-app-cost'\r\n\r\n this.slider = this.el.querySelector('#rangeSlider')\r\n this.tooltip = this.el.querySelector('#tooltip')\r\n this.textInput = this.el.querySelector('#webinarParticipantsValue')\r\n this.init()\r\n\r\n this.bindEvents()\r\n this.updateSelectedApps()\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n\r\n window.addEventListener('resize', () => {\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n })\r\n }\r\n\r\n init() {\r\n if (!this.slider || !this.tooltip || !this.textInput) return\r\n\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n\r\n this.slider.addEventListener('input', () => {\r\n this.textInput.value = this.slider.value\r\n if (this.slider.value > 1) {\r\n this.el.querySelector('.fdn-error-message').setAttribute('hidden', true)\r\n }\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n })\r\n\r\n this.textInput.addEventListener('input', () => {\r\n let raw = this.textInput.value.trim().replace(/[^\\d]/g, '')\r\n\r\n if (raw === '' || raw === '0') {\r\n this.textInput.value = this.slider.min\r\n this.slider.value = this.slider.min\r\n this.tooltip.textContent = this.slider.min\r\n this.el.querySelector('.emp-count').textContent = 'X'\r\n this.el.querySelector('.fdn-error-message').removeAttribute('hidden')\r\n } else {\r\n let value = parseInt(raw, 10)\r\n\r\n if (isNaN(value)) {\r\n this.el.querySelector('.fdn-error-message').removeAttribute('hidden')\r\n this.el.querySelector('.emp-count').textContent = 'X'\r\n return\r\n }\r\n\r\n this.el.querySelector('.fdn-error-message').setAttribute('hidden', true)\r\n\r\n if (value > 5000) {\r\n this.slider.value = this.slider.max\r\n this.tooltip.textContent = '5000+'\r\n this.el.querySelector('.emp-count').textContent = '5000+'\r\n } else {\r\n this.slider.value = value\r\n this.tooltip.textContent = value\r\n this.el.querySelector('.emp-count').textContent = value\r\n }\r\n\r\n this.textInput.value = value\r\n }\r\n\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n })\r\n }\r\n\r\n updateTooltip() {\r\n const val = +this.slider.value\r\n const min = +this.slider.min\r\n const max = +this.slider.max\r\n const percent = (val - min) / (max - min)\r\n this.tooltip.style.left = `calc(${percent * 100}% + 10px)`\r\n this.tooltip.textContent = val >= 5000 ? '5000+' : val\r\n }\r\n\r\n updateTooltipPopsition() {\r\n const content = this.tooltip.textContent.trim()\r\n const stringLength = content.length\r\n console.log('digitCount', stringLength)\r\n const computedLeft = window.getComputedStyle(tooltip).left\r\n const currentLeft = parseFloat(computedLeft)\r\n if (stringLength == 4) {\r\n let newLeft = currentLeft - 10\r\n this.tooltip.style.left = newLeft + 'px'\r\n } else if (stringLength == 5) {\r\n let newLeft = currentLeft - 20\r\n this.tooltip.style.left = newLeft + 'px'\r\n }\r\n }\r\n\r\n updateSliderBackground() {\r\n const percent =\r\n ((this.slider.value - this.slider.min) /\r\n (this.slider.max - this.slider.min)) *\r\n 100\r\n this.slider.style.background = `linear-gradient(to right, rgb(11, 92, 255) 0%, rgb(11, 92, 255) ${percent}%, rgb(224, 224, 230) ${percent}%, rgb(224, 224, 230) 100%)`\r\n this.updateTooltipPopsition()\r\n }\r\n\r\n bindEvents() {\r\n this.el.querySelectorAll(this.cardSelector).forEach((card) => {\r\n card.addEventListener('click', () => {\r\n this.onCardClick(card)\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n })\r\n })\r\n }\r\n\r\n onCardClick(card) {\r\n let isSelected = card.getAttribute('data-selected') === 'true'\r\n if (isSelected) {\r\n card.removeAttribute('data-selected')\r\n card.classList.remove('selected')\r\n } else {\r\n card.setAttribute('data-selected', 'true')\r\n card.classList.add('selected')\r\n }\r\n this.updateSelectedApps()\r\n }\r\n\r\n updateSelectedApps() {\r\n let appsCount = this.el.querySelectorAll(\r\n `${this.cardSelector}[data-selected=\"true\"]`\r\n ).length\r\n let appsHighlight = this.el.querySelector(this.appsHighlightSelector)\r\n let appsLabel = this.el.querySelector(\r\n '.resulted-apps .description-highlight'\r\n )\r\n\r\n if (appsHighlight) {\r\n appsHighlight.textContent = appsCount || 'X'\r\n if (appsLabel) {\r\n appsLabel.textContent = appsCount === 1 ? 'app' : 'apps'\r\n }\r\n }\r\n }\r\n\r\n // bindRangeSteppers() {\r\n // this.el.querySelectorAll(this.rangeStepSelector).forEach((ctrl) => {\r\n // let slider = ctrl.querySelector('input[type=\"range\"]')\r\n // let options = Array.from(ctrl.querySelectorAll('option'))\r\n\r\n // let updateSliderUI = () => {\r\n // options.forEach(\r\n // (opt) =>\r\n // (opt.style.backgroundColor =\r\n // opt.valueAsNumber <= slider.valueAsNumber ? '#0B5CFF' : '')\r\n // )\r\n // let pct =\r\n // (slider.valueAsNumber - +slider.min) / (+slider.max - +slider.min)\r\n // slider.style.backgroundImage = `-webkit-gradient(linear,0% 0%,100% 0%,color-stop(${pct},#0B5CFF),color-stop(${pct},#E0E0E6))`\r\n // let mapped = this.mapping[slider.valueAsNumber] || slider.value\r\n // options.forEach((opt) =>\r\n // opt.classList.toggle('active', opt.value === mapped)\r\n // )\r\n // }\r\n\r\n // let onSliderInput = () => {\r\n // updateSliderUI()\r\n // let mapped = this.mapping[slider.valueAsNumber] || slider.value\r\n // if (this.showValueInput) {\r\n // this.showValueInput.value = mapped.replace(/\\+/, '')\r\n // }\r\n // this.updateMonthlyCost()\r\n // this.updateTotalEstimatedCost()\r\n // }\r\n\r\n // slider.addEventListener('input', onSliderInput)\r\n // onSliderInput()\r\n // if (this.showValueInput) {\r\n // this.showValueInput.addEventListener('input', () => {\r\n // let raw = this.showValueInput.value.replace(/\\D/g, '')\r\n // let v = parseInt(raw, 10) || 0\r\n\r\n // let nearestStep = Object.entries(this.mapping).reduce(\r\n // (best, [step, val]) => {\r\n // let curr = parseInt(val.replace('+', ''), 10)\r\n // let bestVal = parseInt(this.mapping[best].replace('+', ''), 10)\r\n // return Math.abs(curr - v) < Math.abs(bestVal - v) ? step : best\r\n // },\r\n // Object.entries(this.mapping)[0][0]\r\n // )\r\n\r\n // slider.value = nearestStep\r\n\r\n // updateSliderUI()\r\n // this.updateMonthlyCost()\r\n // this.updateTotalEstimatedCost()\r\n // })\r\n // }\r\n\r\n // window.addEventListener('resize', () =>\r\n // this.el\r\n // .querySelectorAll(`${this.rangeStepSelector} input[type=\"range\"]`)\r\n // .forEach((i) => i.dispatchEvent(new Event('input')))\r\n // )\r\n // })\r\n // }\r\n\r\n updateMonthlyCost() {\r\n let highlightEl = this.el.querySelector(this.monthlyUsageHighlightSelector)\r\n if (!highlightEl) return\r\n\r\n let total = Array.from(\r\n this.el.querySelectorAll(`${this.cardSelector}.selected`)\r\n ).reduce(\r\n (sum, card) =>\r\n sum +\r\n (parseFloat(card.querySelector(this.appCostSelector)?.value) || 0),\r\n 0\r\n )\r\n\r\n highlightEl.textContent = total ? `$${total}` : '$XXX'\r\n }\r\n\r\n updateTotalEstimatedCost() {\r\n let highlight = this.el.querySelector(this.totalEstimatedHighlightSelector)\r\n let peopleInput = this.el.querySelector('.bandwidth-calculator__ShowValue')\r\n if (!highlight || !peopleInput) return\r\n\r\n let people = parseInt(peopleInput.value.replace('+', ''), 10) || 0\r\n\r\n let empCountEl = this.el.querySelector('.emp-count')\r\n if (empCountEl) empCountEl.textContent = peopleInput.value\r\n\r\n let planCta = this.el.querySelector('.fdn-button-plan-cta')\r\n let salesCta = this.el.querySelector('.fdn-button-pricing-cta')\r\n if (planCta && salesCta) {\r\n if (people >= 100) {\r\n planCta.classList.add('hidden')\r\n salesCta.classList.remove('hidden')\r\n } else {\r\n planCta.classList.remove('hidden')\r\n salesCta.classList.add('hidden')\r\n }\r\n }\r\n\r\n let sum = Array.from(\r\n this.el.querySelectorAll(`${this.cardSelector}.selected`)\r\n ).reduce(\r\n (acc, card) =>\r\n acc +\r\n (parseFloat(card.querySelector(this.appCostSelector)?.value) || 0),\r\n 0\r\n )\r\n let total = sum * people\r\n highlight.textContent = total ? `$${total.toLocaleString()}` : '$X,XXX'\r\n }\r\n}\r\n\r\nexport default BandwidthCalculator\r\n"],"names":["BandwidthCalculator","el","_this","_classCallCheck","this","showValueInput","querySelector","mapping","reverseMap","Object","entries","forEach","_ref","_ref2","_slicedToArray","step","val","endsWith","slice","cardSelector","rangeStepSelector","appsHighlightSelector","monthlyUsageHighlightSelector","totalEstimatedHighlightSelector","appCostSelector","slider","tooltip","textInput","init","bindEvents","updateSelectedApps","updateMonthlyCost","updateTotalEstimatedCost","window","addEventListener","updateTooltip","updateSliderBackground","key","value","_this2","setAttribute","raw","trim","replace","min","textContent","removeAttribute","parseInt","isNaN","max","percent","style","left","concat","stringLength","length","console","log","computedLeft","getComputedStyle","currentLeft","parseFloat","newLeft","background","updateTooltipPopsition","_this3","querySelectorAll","card","onCardClick","getAttribute","classList","remove","add","appsCount","appsHighlight","appsLabel","_this4","highlightEl","total","Array","from","reduce","sum","_card$querySelector","_this5","highlight","peopleInput","people","empCountEl","planCta","salesCta","acc","_card$querySelector2","toLocaleString"],"sourceRoot":""}