{"version":3,"file":"contact-CCmK7dLP.js","sources":["../../../app/frontend/entrypoints/javascript/shared/contact.js"],"sourcesContent":["import $ from 'jquery'\nimport { fillTrafficInfo } from './sourcebuster'\nimport { triggerAnalyticsEvent } from './analytics'\nimport { getQueryStringParam } from './queryStringParser'\n\nfillTrafficInfo()\n\nconst contactFormButton = $('[data-id=\"contact-form-button\"]')\nconst errorsList = $('[data-id=\"form-errors\"]')\nconst formFields = $('[data-field]')\nconst formInputs = $('[data-form]')\nconst contactForm = $('[data-id=\"contact-form\"]')\nconst formEmailInput = $('[data-email-field]')\nconst contactError = $('[data-id=\"contact-error-info\"]')\n\nconst withModifier = (modifier) => `contact__submit-button--${modifier}`\n\nconst addButtonModifier = (modifier) =>\n contactFormButton.addClass(withModifier(modifier))\n\nconst removeButtonModifier = (modifier) =>\n contactFormButton.removeClass(withModifier(modifier))\n\nexport const cleanErrors = () => {\n errorsList.html('')\n formFields.removeClass('contact--error')\n}\n\nconst cleanForm = () => {\n const inputs = contactForm.find('input')\n const textAreas = contactForm.find('textarea')\n const selects = contactForm.find('select')\n\n const files = inputs.filter((index, input) => input.type === 'file')\n\n files.each(function () {\n const previousData = $(this).data('previous')\n const previousDataIsDefined = Boolean(previousData)\n if (previousDataIsDefined) {\n $(this).attr('data-value', previousData)\n }\n })\n inputs.val('')\n textAreas.val('')\n selects.each(function () {\n this.selectedIndex = 0\n })\n}\n\nexport const addErrorList = (errors) => {\n const errorsString = errors.map(errorTemplate)\n\n errorsList.html(errorsString)\n}\n\nconst setInvalidFields = (fields) => {\n fields.forEach((field) => {\n $(`[data-field=\"${field}\"]`).addClass('contact--error')\n })\n}\n\nconst showErrors = (errors, invalidFields) => {\n addErrorList(errors)\n setInvalidFields(invalidFields)\n}\n\nconst errorTemplate = (error) => `
`\n\nconst handleSubmit = () => {\n cleanErrors()\n addButtonModifier('loading')\n\n const email = formEmailInput.val() \n const liFatId = getQueryStringParam(\"li_fat_id\") \n\n const userData = {}\n if (email && email.trim() !== '') { \n userData.email_address = email;\n }\n\n if (liFatId && liFatId.trim() !== '') { \n userData.linkedinFirstPartyId = liFatId;\n }\n\n triggerAnalyticsEvent(\n contactForm.attr(\"data-analytics-event\"),\n Object.keys(userData).length !== 0 ? { user_data: userData } : undefined\n );\n}\n\nconst disableInputs = () => formInputs.prop('disabled', true)\n\nexport const handleServerResponse = (event) => {\n const { responseJSON: response } = event\n\n removeButtonModifier('loading')\n\n if (event.status === 500 || !response) {\n const error = contactError.data('error')\n const errors = [error]\n\n return handleErrorsResponse(errors, [])\n }\n\n if (response.ok) {\n return handleSuccessResponse()\n }\n\n return handleErrorsResponse(response.errors, response.invalid_fields)\n}\n\nconst handleSuccessResponse = () => {\n addButtonModifier('success')\n cleanForm()\n disableInputs()\n}\n\nconst handleErrorsResponse = (errors, invalidFields) => {\n showErrors(errors, invalidFields)\n addButtonModifier('error')\n setTimeout(() => removeButtonModifier('error'), 1500)\n}\n\nconst handleFormInteraction = () => {\n $('.grecaptcha-badge').css('visibility', 'visible')\n}\n\n$('form input, form textarea, form select').on('focus', handleFormInteraction)\n\nconst getRecaptchaFunctionsForAction = (action) => {\n switch (action) {\n case 'contact':\n return {\n executeRecaptcha: executeRecaptchaForContactAsync,\n setInputWithRecaptchaResponseToken: setInputWithRecaptchaResponseTokenForContact,\n }\n case 'job-apply':\n return {\n executeRecaptcha: executeRecaptchaForJobApplyAsync,\n setInputWithRecaptchaResponseToken: setInputWithRecaptchaResponseTokenForJobApply,\n }\n }\n}\n\nconst revalidateRecaptchaToken = async (action) => {\n const {\n executeRecaptcha,\n setInputWithRecaptchaResponseToken,\n } = getRecaptchaFunctionsForAction(action)\n const token = await executeRecaptcha()\n setInputWithRecaptchaResponseToken(\n `g-recaptcha-response-data-${action}`,\n token,\n )\n}\n\ncontactForm.on('submit', async function (e) {\n e.preventDefault()\n\n const form = $(this)[0]\n const url = form.getAttribute('action')\n const action = form.getAttribute('data-action')\n await revalidateRecaptchaToken(action)\n const formData = new FormData(form)\n\n $.ajax({\n url,\n type: 'POST',\n data: formData,\n headers: {\n 'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n },\n processData: false,\n contentType: false,\n beforeSend: handleSubmit,\n complete: handleServerResponse,\n })\n})\n"],"names":["fillTrafficInfo","contactFormButton","$","errorsList","formFields","formInputs","contactForm","formEmailInput","contactError","withModifier","modifier","addButtonModifier","removeButtonModifier","cleanErrors","cleanForm","inputs","textAreas","selects","index","input","previousData","addErrorList","errors","errorsString","errorTemplate","setInvalidFields","fields","field","showErrors","invalidFields","error","handleSubmit","email","liFatId","getQueryStringParam","userData","triggerAnalyticsEvent","disableInputs","handleServerResponse","event","response","handleErrorsResponse","handleSuccessResponse","handleFormInteraction","getRecaptchaFunctionsForAction","action","revalidateRecaptchaToken","executeRecaptcha","setInputWithRecaptchaResponseToken","token","e","form","url","formData"],"mappings":"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"}