{"version":3,"file":"loan-calculator.js","sources":["../../FrontEnd/PDP-FE/src/scripts/modules/loan-calculator.ts"],"sourcesContent":["import { Component } from '@verndale/core';\n\ntype DataLayerObject = {\n event: string;\n down_payment: string;\n loan_duration: string;\n credit_rating: string;\n loan_amount: string;\n total_monthly_payment: string;\n api_flag: string;\n price: string;\n};\nclass LoanCalculator extends Component {\n private downPaymentPercentage: number;\n private loanCalculatorEndpoint: string;\n private msrpValue: number;\n private loanDuration: number;\n private defaultMonthly: string;\n private defaultLoanAmount: string;\n private totalMonthlyPayment: string;\n private resultCode: string;\n private isBoatDetailPage: boolean;\n\n constructor(el: HTMLElement) {\n super(el);\n this.loanCalculatorEndpoint = this.el.dataset.loanCalculatorEndpoint || '';\n this.downPaymentPercentage = 0;\n this.loanDuration = 0;\n this.defaultMonthly = this.el.dataset.defaultMonthly || '';\n this.defaultLoanAmount = this.el.dataset.defaultLoanAmount || '';\n this.msrpValue = Number(this.el.dataset.msrpValue);\n this.isBoatDetailPage = this.el.dataset.isBoatDetailPage === 'true';\n this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n this.totalMonthlyPayment = '0';\n this.resultCode = 'N/C';\n }\n\n setupDefaults() {\n this.dom = {\n el: this.el,\n sliderElements: this.el.querySelectorAll<HTMLElement>('.loan-calculator__slider'),\n tickmarksElementsDP: this.el.querySelectorAll<HTMLElement>(\n '.loan-calculator__tickmarks.down-payment option'\n ),\n tickmarksElementsLD: this.el.querySelectorAll<HTMLElement>(\n '.loan-calculator__tickmarks.loan-duration option'\n ),\n tickmarksRangeDP: this.el.querySelector<HTMLElement>(\n '.form-control-range.range-slider__range.down-payment'\n ),\n tickmarksRangeLD: this.el.querySelector<HTMLElement>(\n '.form-control-range.range-slider__range.loan-duration'\n ),\n creditScoreSelect: this.el.querySelector<HTMLElement>('.loan-calculator__credit-select'),\n downPaymentInput: this.el.querySelector<HTMLElement>('.loan-calculator__input.down-payment'),\n downPaymentDisplay: this.el.querySelector<HTMLElement>(\n '.loan-calculator__down-payment-display'\n ),\n loanDurationInput: this.el.querySelector<HTMLElement>(\n '.loan-calculator__input.loan-duration'\n ),\n form: this.el.querySelector<HTMLElement>('.loan-calculator__content-left'),\n msrpInput: this.el.querySelector<HTMLElement>('.loan-calculator__msrp-value'),\n errorDownPayment: this.el.querySelector<HTMLElement>(\n '.loan-calculator__error-container.down-payment'\n ),\n errorLoanDuration: this.el.querySelector<HTMLElement>(\n '.loan-calculator__error-container.loan-duration'\n ),\n getPrequalifiedBtn: this.el.querySelector<HTMLElement>('.loan-calculator__btn-cta'),\n loanCalculatorDialog: document.querySelector<HTMLElement>('.loan-calculator__dialog'),\n closeBtnLoanCalculatorDialog: document.querySelector<HTMLElement>(\n '.loan-calculator__dialog-close-btn'\n ),\n contactDialog: document.querySelector<HTMLElement>('.loan-calculator__contact-dialog'),\n closeBtnLoanCalculatorContactDialog: document.querySelector<HTMLElement>(\n '.loan-calculator__contact-dialog-close-btn'\n ),\n totalMonthlyPayment: this.el.querySelector<HTMLElement>('.loan-calculator__total-result'),\n loanAmountValue: this.el.querySelector<HTMLElement>(\n '.loan-calculator__loan-wrapper .loan-calculator__value'\n ),\n creditRatingLabels: this.el.querySelectorAll<HTMLElement>(\n '.loan-calculator__range-label-container .loan-calculator__range-label'\n ),\n creditRatingValue: this.el.querySelector<HTMLElement>(\n '.loan-calculator__credit-wrapper .loan-calculator__value'\n )\n };\n\n this.msrpValue = Number(this.el.dataset.msrpValue);\n this.isBoatDetailPage = this.el.dataset.isBoatDetailPage === 'true';\n this.loanCalculatorEndpoint = this.el.dataset.loanCalculatorEndpoint || '';\n this.totalMonthlyPayment = '0';\n this.resultCode = 'N/C';\n\n this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n this.initMSRP();\n }\n\n addListeners() {\n (this.dom.sliderElements as NodeList).forEach(slider => {\n slider.addEventListener('input', this.updateValue.bind(this));\n });\n (this.dom.tickmarksRangeDP as HTMLElement).addEventListener(\n 'input',\n this.updateTickmarks.bind(this)\n );\n (this.dom.tickmarksRangeLD as HTMLElement).addEventListener(\n 'input',\n this.updateTickmarks.bind(this)\n );\n (this.dom.form as HTMLElement).addEventListener('submit', this.handleSubmit.bind(this));\n (this.dom.form as HTMLElement).addEventListener('reset', this.handleReset.bind(this));\n (this.dom.getPrequalifiedBtn as HTMLElement).addEventListener(\n 'click',\n this.openDialog.bind(this)\n );\n (this.dom.msrpInput as HTMLInputElement).addEventListener('input', this.handleMsrpInput.bind(this));\n\n (this.dom.closeBtnLoanCalculatorDialog as HTMLElement).addEventListener('click', () => {\n (this.dom.loanCalculatorDialog as HTMLDialogElement).close();\n document.body.style.overflow = 'auto';\n });\n (this.dom.closeBtnLoanCalculatorContactDialog as HTMLElement).addEventListener('click', () => {\n document.body.style.overflow = 'auto';\n (this.dom.contactDialog as HTMLDialogElement).close();\n });\n }\n\n handleMsrpInput() {\n // this.msrpValue = Number((this.dom.msrpInput as HTMLInputElement).value);\n this.msrpValue = Number((this.dom.msrpInput as HTMLInputElement).value.replace(/[^0-9]/g, ''));\n this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n this.initMSRP();\n }\n\n openDialog(e: Event) {\n e.preventDefault();\n const _window = window as Window &\n typeof globalThis & {\n dataLayer: Array<DataLayerObject>;\n };\n const loanAmountCalc = (\n Number(this.msrpValue) -\n Number(this.msrpValue) * (this.downPaymentPercentage / 100)\n ).toFixed(2);\n const ficoScoreSelected = (this.dom.creditScoreSelect as HTMLSelectElement).selectedOptions[0]\n .text;\n (this.dom.loanCalculatorDialog as HTMLDialogElement).showModal();\n document.body.style.overflow = 'hidden';\n \n // datalayer push\n const event = this.isBoatDetailPage ? 'pdp_enhanced_loan_calculator_prequalified' : 'pcalculator_get_prequalified';\n _window.dataLayer = _window.dataLayer || [];\n _window.dataLayer.push({\n event: event,\n down_payment: `${this.downPaymentPercentage.toString()}`,\n loan_duration: `${this.loanDuration.toString()}`,\n credit_rating: ficoScoreSelected.toString().split(' (')[0],\n loan_amount: Number(loanAmountCalc).toString(),\n total_monthly_payment: this.totalMonthlyPayment,\n api_flag: this.resultCode,\n price: this.msrpValue.toString()\n });\n }\n\n initMSRP() {\n const msrpInput = this.dom.msrpInput as HTMLInputElement;\n const rawValue = msrpInput.value.replace(/[^0-9]/g, '');\n const numberValue = parseInt(rawValue, 10);\n\n const editableMsrp = !msrpInput.hasAttribute('disabled');\n\n if (editableMsrp) {\n msrpInput.classList.add('--editable');\n }\n\n if (isNaN(numberValue)) {\n msrpInput.value = '';\n } else {\n let formattedValue = numberValue.toString();\n formattedValue = formattedValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n msrpInput.value = `${formattedValue}`;\n }\n\n (this.dom.creditRatingValue as HTMLElement).innerHTML = (\n this.dom.creditScoreSelect as HTMLSelectElement\n ).selectedOptions[0].text\n .toString()\n .split(' (')[0];\n }\n\n handleReset() {\n setTimeout(() => {\n (this.dom.totalMonthlyPayment as HTMLElement).innerHTML = this.defaultMonthly;\n (this.dom.loanAmountValue as HTMLElement).innerHTML = this.defaultLoanAmount;\n (this.dom.creditRatingValue as HTMLElement).innerHTML = (\n this.dom.creditScoreSelect as HTMLSelectElement\n ).selectedOptions[0].text\n .toString()\n .split(' (')[0];\n this.initMSRP();\n this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n }, 10);\n }\n\n updateValue(event: Event | { target: HTMLElement | NodeListOf<HTMLElement> }) {\n const target = event.target as HTMLInputElement;\n const value = Number(target.value);\n const progress = (value / Number(target.max)) * 100;\n target.style.background = `linear-gradient(to right, #0c4787 0%, #0c4787 ${progress}%, #d1d3d4 ${progress}%, #d1d3d4 100%)`;\n }\n\n updateTickmarks(event: Event) {\n const target = event.target as HTMLInputElement;\n const selectedValue = Number(target.value);\n if (target.classList.contains('down-payment')) {\n (this.dom.tickmarksElementsDP as NodeList).forEach((tickmark, index) => {\n if (index === selectedValue - 1) {\n (tickmark as HTMLElement).classList.add('selected');\n this.downPaymentPercentage = Number((tickmark as HTMLInputElement).value);\n\n const downPaymentDisplay = this.dom.downPaymentDisplay as HTMLElement;\n const downPaymentValue = (this.msrpValue * (this.downPaymentPercentage / 100)).toFixed(0);\n const formattedValue = downPaymentValue.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n downPaymentDisplay.innerHTML = `$${formattedValue}`;\n } else {\n (tickmark as HTMLElement).classList.remove('selected');\n }\n });\n } else {\n (this.dom.tickmarksElementsLD as NodeList).forEach((tickmark, index) => {\n if (index === selectedValue - 1) {\n (tickmark as HTMLElement).classList.add('selected');\n this.loanDuration = Number((tickmark as HTMLInputElement).value);\n } else {\n (tickmark as HTMLElement).classList.remove('selected');\n }\n });\n }\n }\n\n async handleSubmit(e: Event) {\n e.preventDefault();\n const target = e.target as HTMLFormElement;\n const formData = new FormData(target);\n const ficoScoreSelected = (this.dom.creditScoreSelect as HTMLSelectElement).selectedOptions[0]\n .text;\n const _window = window as Window &\n typeof globalThis & {\n dataLayer: Array<DataLayerObject>;\n };\n\n const loanAmountCalc = (\n Number(this.msrpValue) -\n Number(this.msrpValue) * (this.downPaymentPercentage / 100)\n ).toFixed(2);\n\n formData.append('ficoScore', (this.dom.creditScoreSelect as HTMLInputElement).value);\n formData.delete('loan-duration');\n formData.delete('fico-score');\n formData.delete('down-payment');\n formData.set('percentDown', this.downPaymentPercentage.toString());\n formData.set('term', (Number(this.loanDuration) * 12).toString());\n formData.append('loanAmount', Math.round(Number(loanAmountCalc)).toString());\n\n try {\n const res = await fetch(this.loanCalculatorEndpoint, {\n method: 'POST',\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json;charset=utf-8'\n },\n body: JSON.stringify(Object.fromEntries(formData))\n });\n\n const resData = await res.json();\n this.resultCode = resData.ResultCode;\n if (resData.ResultCode.toString() === 'F') {\n (this.dom.totalMonthlyPayment as HTMLElement).innerHTML = resData.MonthlyPayment.toString();\n (this.dom.loanAmountValue as HTMLElement).innerHTML = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(Number(loanAmountCalc));\n\n this.totalMonthlyPayment = resData.MonthlyPayment.toString();\n\n (this.dom.creditRatingValue as HTMLElement).innerHTML = ficoScoreSelected\n .toString()\n .split(' (')[0];\n } else {\n (this.dom.contactDialog as HTMLDialogElement).showModal();\n document.body.style.overflow = 'hidden';\n }\n\n // datalayer push\n const event = this.isBoatDetailPage ? 'pdp_enhanced_loan_calculator_interactions' : 'pcalculator_calculate';\n\n _window.dataLayer = _window.dataLayer || [];\n _window.dataLayer.push({\n event,\n down_payment: `${formData.get('percentDown')}`,\n loan_duration: `${this.loanDuration.toString()}`,\n credit_rating: ficoScoreSelected.toString().split(' (')[0],\n loan_amount: Number(loanAmountCalc).toString(),\n total_monthly_payment: this.totalMonthlyPayment,\n api_flag: resData.ResultCode.toString(),\n price: this.msrpValue.toString()\n });\n } catch (error) {\n console.error('Error:', error);\n }\n }\n}\n\nexport default LoanCalculator;\n"],"names":["LoanCalculator","Component","el","__publicField","slider","e","_window","loanAmountCalc","ficoScoreSelected","event","msrpInput","rawValue","numberValue","formattedValue","target","progress","selectedValue","tickmark","index","downPaymentDisplay","formData","resData","error"],"mappings":"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"}