{ "version": 3, "sources": ["../../Features/Forms/forms.ts"], "sourcesContent": ["interface FormResponse {\r\n success: boolean\r\n redirect?: string\r\n formId?: string\r\n message?: string\r\n log?: string\r\n}\r\n\r\nconst repatchaField = \"g-recaptcha-response\";\r\nconst feedbackBoxQuery = \"[data-js-form-feedback]\";\r\nconst feedbackErrorBox = \"[data-js-form-feedback-error]\";\r\n\r\ndocument.querySelectorAll(\"[data-js-form]\").forEach(jsform => {\r\n if (jsform instanceof HTMLFormElement) {\r\n\r\n const submitButtons = jsform.querySelectorAll(\"button[type=submit], input[type=submit]\");\r\n const submitButton = submitButtons ? submitButtons[0] : undefined\r\n if (!submitButton) {\r\n console.warn(`Form missing submit button`);\r\n return null;\r\n }\r\n\r\n const feedbackBox = jsform.querySelector(feedbackBoxQuery)\r\n if (!feedbackBox) {\r\n console.warn(`Form missing submission feedback box`);\r\n }\r\n\r\n const errorFeedbackBox = jsform.querySelector(feedbackErrorBox)\r\n if (!errorFeedbackBox) {\r\n console.warn(`Form missing submission error feedback box`);\r\n }\r\n\r\n const toggleSubmitButton = (disabled: boolean) => {\r\n if (submitButton instanceof HTMLButtonElement || submitButton instanceof HTMLInputElement) {\r\n submitButton.disabled = disabled;\r\n }\r\n }\r\n\r\n const validateForm = () => {\r\n let valid = true;\r\n const invalidElements: HTMLElement[] = []\r\n\r\n const recaptchaField = jsform.querySelector(`#${repatchaField}`) as HTMLTextAreaElement\r\n const recaptchaLabel = jsform.querySelector(`.input-recaptcha label`)\r\n if (recaptchaField) {\r\n if (!recaptchaField.value || (recaptchaField.value && recaptchaField.value?.length <= 0)) {\r\n valid = false;\r\n if(recaptchaLabel) {\r\n recaptchaLabel.classList.remove(\"hidden\")\r\n }\r\n }\r\n else {\r\n if(recaptchaLabel) {\r\n recaptchaLabel.classList.add(\"hidden\")\r\n }\r\n }\r\n }\r\n\r\n // Validate fieldsets with required checkboxes since browser validation doesnt kick in\r\n const requiredFieldsets = jsform.querySelectorAll(\"[data-js-checkboxlist-input][required]\") as NodeListOf;\r\n if (requiredFieldsets) {\r\n requiredFieldsets.forEach((fieldset) => {\r\n const haschecked = fieldset.querySelectorAll(\"input:checked\")\r\n if (!haschecked || (haschecked && haschecked.length === 0)) {\r\n valid = false;\r\n fieldset.classList.add(\"invalid\")\r\n invalidElements.push(fieldset)\r\n fieldset.querySelectorAll(\"input\").forEach((input) => {\r\n input.classList.add(\"invalid\")\r\n })\r\n }\r\n else {\r\n fieldset.classList.remove(\"invalid\")\r\n }\r\n })\r\n }\r\n\r\n //Scroll first invalid element into view\r\n if (invalidElements && invalidElements.length > 0) {\r\n invalidElements[0].scrollIntoView()\r\n }\r\n\r\n return valid\r\n }\r\n\r\n const submitData = () => {\r\n\r\n if (!!feedbackBox) {\r\n feedbackBox.classList.add(\"hidden\")\r\n }\r\n\r\n if (!!errorFeedbackBox) {\r\n errorFeedbackBox.classList.add(\"hidden\")\r\n }\r\n\r\n if (!validateForm()) {\r\n if (!!errorFeedbackBox) {\r\n errorFeedbackBox.classList.remove(\"hidden\")\r\n }\r\n return false;\r\n }\r\n\r\n toggleSubmitButton(true)\r\n\r\n const formData = new FormData(jsform);\r\n\r\n try {\r\n fetch(`${window.location.origin}/formpost/json`, {\r\n method: \"POST\",\r\n body: formData,\r\n })\r\n .then((res: Response) => res.json() as Promise)\r\n .then((data: FormResponse) => {\r\n if (data.success) {\r\n if (data.redirect && data.redirect.length > 0) {\r\n window.location.href = data.redirect\r\n }\r\n else if (!!feedbackBox) {\r\n feedbackBox.classList.remove(\"hidden\")\r\n }\r\n }\r\n else if (!!errorFeedbackBox) {\r\n errorFeedbackBox.classList.remove(\"hidden\")\r\n if (data.message) {\r\n console.warn(data.message)\r\n }\r\n }\r\n toggleSubmitButton(false)\r\n }).catch(err => {\r\n console.error(err)\r\n toggleSubmitButton(false)\r\n })\r\n } catch (e) {\r\n console.error(e);\r\n toggleSubmitButton(false)\r\n }\r\n\r\n return false;\r\n }\r\n\r\n jsform.addEventListener(\"submit\", (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n submitData();\r\n });\r\n\r\n const selectDropdowns = jsform.querySelectorAll(\"[data-js-dropdown-input]\");\r\n if (selectDropdowns) {\r\n selectDropdowns.forEach((select) => {\r\n select.addEventListener(\"change\", (event: Event) => {\r\n const selectElement = event.target as HTMLSelectElement\r\n if (selectElement) {\r\n selectElement.blur()\r\n }\r\n })\r\n })\r\n }\r\n }\r\n else {\r\n console.warn(\"Element is not of type form element\");\r\n }\r\n\r\n})"], "mappings": "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", "names": ["repatchaField", "feedbackBoxQuery", "feedbackErrorBox", "jsform", "submitButtons", "submitButton", "feedbackBox", "errorFeedbackBox", "toggleSubmitButton", "disabled", "validateForm", "valid", "invalidElements", "recaptchaField", "recaptchaLabel", "requiredFieldsets", "fieldset", "haschecked", "input", "submitData", "formData", "res", "data", "err", "event", "selectDropdowns", "select", "selectElement"] }