{"version":3,"sources":["webpack:///./src/js/modules/genericForm.js"],"names":["Module","this","dom","formInputs","el","querySelectorAll","form","querySelector","submit","clickable","submitWrapper","spinner","isMobile","window","matchMedia","matches","waitForElm","then","elm","closest","style","display","classList","add","disabled","checkValue","MutationObserver","mutations","forEach","attributeName","handleFormChange","observe","attributes","element","addEventListener","handleFocus","handleBlur","handleFormClick","handleSubmit","showSpinner","contains","remove","e","hasAttribute","sendValuesToZaiusAndBoxever","event","Event","dispatchEvent","valid","requiredFields","emailFields","normalFields","emailField","wrapper","from","value","email","push","requiredField","normalField","length","every","bool","undefined","dataset","captcha","isTrusted","removeProperty","jQuery","id","srcElement","Component"],"mappings":"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","file":"51.8fcb9eb4449794756ac5.js","sourcesContent":["import { Component } from '@verndale/core';\nimport debounce from 'lodash/debounce';\nimport { sendValuesToZaiusAndBoxever } from '../helpers/ZaiusBoxeverEvents';\nimport validate from 'validate.js';\nimport { waitForElm } from '../helpers';\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n formInputs: [...this.el.querySelectorAll('.generic-form__input')],\n form: this.el.querySelector('form'),\n submit: this.el.querySelector('[type=submit]'),\n clickable: this.el.querySelector('.form__submit-wrapper-clickable'),\n submitWrapper: this.el.querySelector('.form__submit-wrapper'),\n spinner: this.el.querySelector('.form__spinner')\n };\n\n this.isMobile = window.matchMedia('(max-width: 677px)').matches;\n\n waitForElm('.footer-v2 .fxt-captcha-enterprise').then(elm => {\n if (this.isMobile) {\n elm.closest('div').style.display = 'none';\n }\n });\n\n if (this.dom.form) {\n this.dom.form.classList.add('active');\n this.dom.submit.disabled = true;\n\n if (this.dom.submitWrapper) {\n this.dom.submitWrapper.classList.add('form__submit-wrapper--disabled');\n }\n this.checkValue();\n\n const observer = new window.MutationObserver(mutations => {\n mutations.forEach(({ attributeName }) => {\n if (attributeName === 'data-captcha') {\n this.handleFormChange();\n }\n });\n });\n observer.observe(this.dom.form, { attributes: true });\n\n this.handleFormChange();\n }\n }\n\n addListeners() {\n this.dom.formInputs.forEach(element => {\n element.addEventListener('focus', ::this.handleFocus);\n element.addEventListener('blur', ::this.handleBlur);\n element.addEventListener(\n 'blur, input',\n debounce(::this.handleFormChange, 100)\n );\n element.addEventListener('paste', debounce(::this.handleFormChange, 300));\n });\n if (this.dom.form) {\n this.dom.form.addEventListener(\n 'change',\n debounce(::this.handleFormChange, 100)\n );\n this.dom.form.addEventListener(\n 'input',\n debounce(::this.handleFormChange, 100)\n );\n\n if (this.dom.clickable)\n this.dom.clickable.addEventListener('click', ::this.handleFormClick);\n this.dom.form.addEventListener('submit', ::this.handleSubmit);\n if (this.dom.submit)\n this.dom.submit.addEventListener('click', ::this.showSpinner);\n }\n\n if (this.dom.form.classList.contains('footer-form')) {\n this.dom.submit.disabled = false;\n this.dom.submitWrapper.classList.remove('form__submit-wrapper--disabled');\n }\n }\n\n handleSubmit(e) {\n const { submit, form } = this.dom;\n if (submit.hasAttribute('disabled')) return;\n sendValuesToZaiusAndBoxever(\n form.querySelectorAll(\n 'input:not([type=hidden]):not([submit]):not([type=submit]), select'\n )\n );\n }\n\n handleFormClick(e) {\n const event = new window.Event('submit');\n this.dom.form.dispatchEvent(event);\n }\n\n handleFormChange() {\n const valid = [];\n const { form } = this.dom;\n const requiredFields = form.querySelectorAll('input[required]');\n const emailFields = form.querySelectorAll('input[type=\"email\"]');\n const normalFields = form.querySelectorAll(\n 'input:not([type=hidden]):not([required]):not([submit])'\n );\n\n emailFields.forEach(emailField => {\n const wrapper = emailField.closest('.form__field-wrapper');\n\n if (wrapper) {\n const error = wrapper.querySelector('.field-validation-error');\n\n const constraints = {\n from: {\n email: true\n }\n };\n\n if (!error && !validate({ from: emailField.value }, constraints)) {\n valid.push(true);\n } else {\n valid.push(false);\n }\n }\n });\n\n requiredFields.forEach(requiredField => {\n const wrapper = requiredField.closest('.form__field-wrapper');\n\n if (wrapper) {\n const error = wrapper.querySelector('.field-validation-error');\n if (!error && requiredField.value) {\n valid.push(true);\n } else {\n valid.push(false);\n }\n }\n });\n\n normalFields.forEach(normalField => {\n const wrapper = normalField.closest('.form__field-wrapper');\n\n if (wrapper) {\n const error = wrapper.querySelector('.field-validation-error');\n\n if (!error) {\n valid.push(true);\n } else {\n valid.push(false);\n }\n }\n });\n\n if (\n valid.length &&\n valid.every(bool => bool) &&\n // eslint-disable-next-line no-undefined\n (form.dataset.captcha === undefined || form.dataset.captcha === 'ok')\n ) {\n this.dom.submit.disabled = false;\n this.dom.submitWrapper.classList.remove('form__submit-wrapper--disabled');\n } else {\n this.dom.submit.disabled = true;\n this.dom.submitWrapper.classList.add('form__submit-wrapper--disabled');\n }\n\n return valid;\n }\n\n showSpinner(e) {\n if (this.dom.spinner && e.isTrusted) {\n this.dom.spinner.style.display = 'block';\n }\n\n if (!this.handleFormChange().every(bool => bool)) {\n this.dom.spinner.style.removeProperty('display');\n }\n\n jQuery(`#${this.dom.form.id}`).valid();\n }\n\n handleFocus(e) {\n e.srcElement.classList.add('generic-form__input--with-focus');\n }\n\n handleBlur(e) {\n if (!e.srcElement.value) {\n e.srcElement.classList.remove('generic-form__input--with-focus');\n }\n }\n\n checkValue() {\n this.dom.formInputs.forEach(element => {\n if (element.value) {\n element.classList.add('generic-form__input--with-focus');\n }\n });\n }\n}\n\nexport default Module;\n"],"sourceRoot":""}