{"version":3,"sources":["webpack:///./app/javascript/controllers/contact-form_controller.js"],"names":["this","bindFormEvents","bindChangeEvents","formTarget","addEventListener","e","_validateForm","sendButtonTarget","disabled","preventDefault","bind","target","value","_removeFeedbackDivs","classList","remove","missingField","document","getElementById","id","invalidField","style","display","validFields","_checkValidFields","requiredFields","_checkRequiredFields","email","test","phone","isValid","querySelectorAll","forEach","field","trim","add","allValidFields","emailFields","phoneFields","_field_message","_validateEmail","push","_validatePhone","every","Boolean","element","isNotValid","length","Controller","targets"],"mappings":"okDAKIA,KAAKC,iBACLD,KAAKE,qB,uCAILF,KAAKG,WAAWC,iBAAiB,SAAU,SAAUC,GACrCL,KAAKM,kBAEjBN,KAAKO,iBAAiBC,UAAW,EACjCH,EAAEI,mBAEJC,KAAKV,S,yCAIPA,KAAKG,WAAWC,iBAAiB,QAAS,SAAUC,GAC5B,IAAlBA,EAAEM,OAAOC,OACXZ,KAAKa,oBAAoBR,IAE3BK,KAAKV,S,0CAGWK,GAClBA,EAAEM,OAAOG,UAAUC,OAAO,mBAC1Bf,KAAKO,iBAAiBC,UAAW,EACjC,IAAIQ,EAAeC,SAASC,eAAT,UAA2Bb,EAAEM,OAAOQ,GAApC,cACfC,EAAeH,SAASC,eAAT,UAA2Bb,EAAEM,OAAOQ,GAApC,aACfC,IAAeA,EAAaC,MAAMC,QAAU,QAC5CN,IAAcA,EAAaK,MAAMC,QAAU,U,sCAI/C,IAAIC,EAAcvB,KAAKwB,oBACnBC,EAAiBzB,KAAK0B,uBAC1B,OAAOH,GAAeE,I,qCAGTE,GAEb,MADW,gDACDC,KAAKD,EAAMf,S,qCAGRiB,GAEb,MADW,4BACDD,KAAKC,EAAMjB,S,6CAIrB,IAAIkB,GAAU,EAWd,OATqB9B,KAAKG,WAAW4B,iBADR,qCAEdC,SAAQ,SAACC,GACtB,IAAKA,EAAMzB,WAAayB,EAAMrB,MAAMsB,OAAQ,CAC1CD,EAAMnB,UAAUqB,IAAI,mBACpB,IAAInB,EAAeC,SAASC,eAAT,UAA2Be,EAAMd,GAAjC,cACfH,IAAcA,EAAaK,MAAMC,QAAU,SAC/CQ,GAAU,MAGPA,I,0CAGY,IAAD,OACdM,EAAiB,GACjBC,EAAcrC,KAAKG,WAAW4B,iBAAiB,uBAC/CO,EAActC,KAAKG,WAAW4B,iBAAiB,qBAWnD,OAVAM,EAAYL,SAAQ,SAACC,GAChB,EAAKM,eAAeN,GAAQ,EAAKO,eAAeP,KACjDG,EAAeK,MAAK,MAGxBH,EAAYN,SAAQ,SAACC,GAChB,EAAKM,eAAeN,GAAQ,EAAKS,eAAeT,KACjDG,EAAeK,MAAK,MAGjBL,EAAeO,MAAMC,W,qCAGfC,EAASC,GACtB,IAAI1B,EAAeH,SAASC,eAAT,UAA2B2B,EAAQ1B,GAAnC,aACnB,GAAIC,KAAgByB,EAAQjC,MAAMmC,OAAS,GAI3C,OAFA3B,EAAaC,MAAMC,QAAU,OAC7BuB,EAAQ/B,UAAUC,OAAO,mBACrB+B,GACFD,EAAQ/B,UAAUqB,IAAI,mBACtBf,EAAaC,MAAMC,QAAU,SACtB,QAHT,O,mCAxFyB0B,G,EACpBC,QAAU,CAAE,OAAQ","file":"js/26-08e906d06ea5537c9dac.chunk.js","sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"form\", \"sendButton\"];\n connect() {\n this.bindFormEvents();\n this.bindChangeEvents();\n }\n\n bindFormEvents () {\n this.formTarget.addEventListener('submit', function (e) {\n let isValid = this._validateForm();\n if (!isValid) {\n this.sendButtonTarget.disabled = true\n e.preventDefault();\n }\n }.bind(this))\n }\n\n bindChangeEvents() {\n this.formTarget.addEventListener('input', function (e) {\n if (e.target.value != \"\") {\n this._removeFeedbackDivs(e);\n }\n }.bind(this))\n }\n\n _removeFeedbackDivs(e) {\n e.target.classList.remove('is-invalid-file')\n this.sendButtonTarget.disabled = false\n let missingField = document.getElementById(`${e.target.id}_required`);\n let invalidField = document.getElementById(`${e.target.id}_invalid`);\n if (invalidField) invalidField.style.display = 'none';\n if (missingField) missingField.style.display = 'none';\n }\n\n _validateForm() {\n let validFields = this._checkValidFields();\n let requiredFields = this._checkRequiredFields();\n return validFields && requiredFields;\n }\n\n _validateEmail(email) {\n const re = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,8})+$/;\n return re.test(email.value);\n }\n\n _validatePhone(phone) {\n const re = /^[\\d]{3}-[\\d]{3}-[\\d]{4}$/;\n return re.test(phone.value);\n }\n\n _checkRequiredFields() {\n let isValid = true\n let requiredFieldSelectors = 'textarea:required, input:required'\n let requiredFields = this.formTarget.querySelectorAll(requiredFieldSelectors)\n requiredFields.forEach((field) => {\n if (!field.disabled && !field.value.trim()) {\n field.classList.add('is-invalid-file');\n let missingField = document.getElementById(`${field.id}_required`);\n if (missingField) missingField.style.display = 'block';\n isValid = false;\n }\n });\n return isValid;\n }\n\n _checkValidFields() {\n let allValidFields = []\n let emailFields = this.formTarget.querySelectorAll('input[type=\"email\"]')\n let phoneFields = this.formTarget.querySelectorAll('input[type=\"tel\"]')\n emailFields.forEach((field) => {\n if(this._field_message(field, !this._validateEmail(field))) {\n allValidFields.push(false)\n }\n })\n phoneFields.forEach((field) => {\n if(this._field_message(field, !this._validatePhone(field))) {\n allValidFields.push(false)\n }\n })\n return allValidFields.every(Boolean);\n }\n\n _field_message(element, isNotValid){\n let invalidField = document.getElementById(`${element.id}_invalid`)\n if(!invalidField || element.value.length < 1) return\n\n invalidField.style.display = 'none'\n element.classList.remove('is-invalid-file')\n if (isNotValid) {\n element.classList.add('is-invalid-file')\n invalidField.style.display = 'block'\n return true\n }\n }\n}\n"],"sourceRoot":""}