{"version":3,"file":"javascripts/chunks/e93351ed0b0c166c7a9d.form.js","mappings":"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","sources":["webpack:///./components/form/javascripts/form.js","webpack:///../.yarn/unplugged/core-js-npm-3.19.3-6f11d9f8bc/node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///../.yarn/unplugged/core-js-npm-3.19.3-6f11d9f8bc/node_modules/core-js/internals/is-regexp.js","webpack:///../.yarn/unplugged/core-js-npm-3.19.3-6f11d9f8bc/node_modules/core-js/internals/not-a-regexp.js","webpack:///../.yarn/unplugged/core-js-npm-3.19.3-6f11d9f8bc/node_modules/core-js/modules/es.array.join.js","webpack:///../.yarn/unplugged/core-js-npm-3.19.3-6f11d9f8bc/node_modules/core-js/modules/es.string.starts-with.js"],"sourcesContent":["import triggerCustom from '../../../javascripts/events/triggerCustom';\nimport BaseModule from '../../../javascripts/helpers/baseModule';\nimport select from '../../../javascripts/dom/select';\nimport forEach from '../../../javascripts/dom/forEach';\nimport removeClass from '../../../javascripts/dom/removeClass';\nimport addClass from '../../../javascripts/dom/addClass';\n\nconst classList = {\n formError: 'form--error',\n error: 'user-error'\n};\n\nexport default class Form extends BaseModule {\n constructor(element) {\n super(element, element.getAttribute('data-js-module'));\n this.getElements([{ id: 'error', selector: 'error' }]);\n this.formElements = select('input, select, textarea', element);\n this.formAction = this.elements.self.getAttribute('action');\n this.submitted = false;\n this.changed = false;\n this.initEventListeners();\n\n this.handleOnlineEventSwitch();\n }\n\n initEventListeners() {\n this.elements.self.addEventListener('submit', this.validate.bind(this));\n\n forEach(this.formElements, (index, element) => {\n element.addEventListener('focusin', () => {\n removeClass(element, classList.error);\n });\n\n element.addEventListener('change', () => {\n this.changed = true;\n });\n });\n\n if (this.elements.self.getAttribute('data-beforeunload') === 'true') {\n window.addEventListener('beforeunload', (event) =>\n this.beforeUnloadListener(event)\n );\n }\n }\n\n handleOnlineEventSwitch() {\n const onlineEventSwitch = this.elements.self.querySelector(\n '[id=\"fields[onlineEvent]\"]:not([type=\"hidden\"])'\n );\n const locationFields = this.elements.self.querySelectorAll(\n '[id=\"fields[locationName]\"], [id=\"fields[address][parts][address]\"], [id=\"fields[address][parts][number]\"], [id=\"fields[address][parts][postcode]\"], [id=\"fields[address][parts][city]\"], [id=\"fields[website]\"]'\n );\n\n if (onlineEventSwitch && locationFields) {\n onlineEventSwitch.addEventListener('change', (e) => {\n locationFields.forEach((item) => {\n const field = item;\n if (onlineEventSwitch.checked) {\n field.disabled = true;\n } else {\n field.disabled = false;\n }\n });\n });\n }\n }\n\n beforeUnloadListener(event) {\n if (!this.submitted && this.changed) {\n event.preventDefault();\n // eslint-disable-next-line no-param-reassign\n event.returnValue = '';\n }\n }\n\n /**\n * Post request to the BE form API.\n * @param {formData} formData Formdata\n * @returns {void}\n * @memberof Form\n */\n async postData(formData) {\n await fetch('/actions/blitz/csrf/json', {\n method: 'GET',\n headers: {\n Accept: 'text/html'\n }\n })\n .then((res) => res.json())\n .then((json) => {\n formData.append(json.param, json.token);\n });\n\n return fetch(this.formAction, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n },\n body: formData\n }).then((response) => response.json().then((data) => {\n data.status = response.status;\n return data;\n }));\n }\n\n /**\n * Processes the BE Response.\n * On success: Redirects to confirmation page\n * On error: Displays the hubspot errors\n * @param {object} data Response object from BE\n * @returns {void}\n * @memberof Form\n */\n processResponse(data) {\n const redirectInput = this.elements.self.querySelector(\n 'input[name=\"redirect\"]'\n );\n\n if (\n !(data.status && data.status >= 400) &&\n (!data.errors || data.errors.length === 0) &&\n (!data.formErrors || data.formErrors.length === 0) &&\n !data.error &&\n !data.errorCode &&\n !(data.message && data.message === 'InvalidVerificationCode')\n ) {\n if (data.redirect) {\n window.location = Form.handleRedirect(data.redirect);\n } else if (data.returnUrl) {\n window.location = data.returnUrl;\n } else if (redirectInput) {\n window.location = Form.handleRedirect(redirectInput.value);\n } else {\n window.location.reload();\n }\n } else {\n if (data.errors) {\n const formErrors = [];\n forEach(this.formElements, (index, element) => {\n Object.keys(data.errors).forEach((key, i) => {\n if (key === element.name || `fields[${key}]` === element.name) {\n let elementError = null;\n if (element.type === 'checkbox') {\n elementError =\n element.parentElement.parentElement.querySelector('.error');\n } else {\n elementError = element.parentElement.querySelector('.error');\n }\n elementError.innerHTML = data.errors[key];\n addClass(element, classList.error);\n formErrors.push(data.errors[key]);\n }\n });\n });\n\n this.elements.error.innerHTML = formErrors.join('
');\n addClass(this.elements.self, classList.formError);\n }\n\n if (data.error || data[\"0\"] || data.message) {\n this.elements.error.innerHTML = data.error || data[\"0\"] || data.message;\n addClass(this.elements.self, classList.formError);\n }\n\n if (data.formErrors) {\n this.elements.error.innerHTML = data.formErrors.join('
');\n addClass(this.elements.self, classList.formError);\n }\n }\n }\n\n /**\n * Custom form validation using constraint validation API.\n * https://caniuse.com/#feat=constraint-validation\n * Adds class .user-error to every input if invalid\n * Error handling is done in input atoms.\n * If all inputs are valid, submits form\n * @param {Object} event optional event\n * @param {Function} cb An optional callback that can be triggered instead of submitting the form if it's valid\n * @returns {void}\n * @memberof Form\n */\n validate(event, cb) {\n if (event) {\n event.preventDefault();\n }\n\n const isValid = this.formElements.reduce((acc, element) => {\n const valid = element.validity.valid || element.disabled;\n\n if (valid) {\n removeClass(element, classList.error);\n } else {\n addClass(element, classList.error);\n }\n return valid && acc;\n }, true);\n\n if (cb) {\n cb(isValid);\n } else if (isValid) {\n triggerCustom(this.elements.self, 'success', event);\n this.submitted = true;\n const formData = new FormData(this.elements.self);\n this.postData(formData)\n .then((response) => this.processResponse(response))\n .catch((error) => console.error(error));\n }\n }\n\n static handleRedirect(redirect) {\n if (redirect.startsWith('http')) {\n return redirect;\n }\n\n return `/${redirect.replace(/^\\/+/, '')}`;\n }\n}\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-startswith -- safe\nvar un$StartsWith = uncurryThis(''.startsWith);\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = toString(searchString);\n return un$StartsWith\n ? un$StartsWith(that, search, index)\n : stringSlice(that, index, index + search.length) === search;\n }\n});\n"],"names":["classList","Form","element","getAttribute","getElements","id","selector","formElements","select","formAction","elements","self","submitted","changed","initEventListeners","handleOnlineEventSwitch","this","addEventListener","validate","bind","forEach","index","removeClass","window","event","beforeUnloadListener","onlineEventSwitch","querySelector","locationFields","querySelectorAll","e","item","field","checked","disabled","preventDefault","returnValue","formData","fetch","method","headers","Accept","then","res","json","append","param","token","accept","body","response","data","status","redirectInput","errors","length","formErrors","error","errorCode","message","Object","keys","key","i","name","type","parentElement","innerHTML","addClass","push","join","redirect","location","handleRedirect","returnUrl","value","reload","cb","isValid","reduce","acc","valid","validity","triggerCustom","FormData","postData","processResponse","catch","console","startsWith","replace","BaseModule","MATCH","wellKnownSymbol","module","exports","METHOD_NAME","regexp","error1","error2","isObject","classof","it","isRegExp","undefined","global","TypeError","$","uncurryThis","IndexedObject","toIndexedObject","arrayMethodIsStrict","un$Join","ES3_STRINGS","STRICT_METHOD","target","proto","forced","separator","descriptor","getOwnPropertyDescriptor","toLength","toString","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","un$StartsWith","stringSlice","slice","min","Math","CORRECT_IS_REGEXP_LOGIC","String","prototype","writable","searchString","that","arguments","search"],"sourceRoot":""}