{"version":3,"sources":["webpack:///./src/feature/form-handler/form-handler.js","webpack:///./src/foundation/utilities/formIdParser.js"],"names":["FormHandler","element","setRequiredFields","bind","setNextButtons","setPreviousButtons","initDomCache","el","formSections","querySelectorAll","nextButtons","previousButton","fieldsWithDynamicValidation","dropdownContainers","currentSection","hideSections","initEvents","initDropdownEvents","simulateDropdownChange","storeOriginalDropdownValues","dropdown","document","querySelector","dispatchEvent","Event","bubbles","length","forEach","section","index","classList","toggle","setValidationListener","setFocusListener","container","firstDropdown","secondDropdown","thirdDropdownContainer","hiddenInput","listSeparator","getAttribute","multilistValueSeparator","contextItemId","console","error","addEventListener","newSecondValue","value","updateFirstDropdownValue","syncHiddenInput","loadThirdDropdown","e","baseValue","target","split","loadSecondDropdown","data","innerHTML","items","option","createElement","item","Id","textContent","DisplayName","appendChild","disabled","parentId","callback","templateId","pageItemId","warn","fetch","method","headers","body","JSON","stringify","templateId2","currentPageItemId","then","response","json","updateSecondDropdown","firstValue","secondValue","newValue","selectedOption","options","_updateSelectedOption","catch","thirdDropdownTemplateId","referringItemId","templateId3","updateThirdDropdown","style","display","gridTemplateColumns","gap","checkboxWrapper","add","alignItems","width","margin","checkbox","type","id","label","htmlFor","textAlign","IsSelected","checked","updateFirstDropdownWithMultiSelect","selectedThirdValues","map","dataset","originalValue","join","splitValues","selectedOptionFirstAndSecondDroplist","slice","selected","fields","Array","from","field","hasAttribute","setAttribute","next","preventDefault","isValid","validateSection","handleInvalidSection","remove","previous","errorMessage","validate","removeErrorField","parent","parentElement","parsedFormId","fieldError","contains","invalidFields","hasInvalidFields","input","filter","valid","errors","tagName","inlineError","errorInputId","errorInput","errorField","setErrorField","errorId","inputField","sibling","nextElementSibling","message","handleInvalidField","BaseFeature","formIdparser","parsed","replaceAll","Boolean","parsedString"],"mappings":"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","file":"13-d7d40c15.pkg.js","sourcesContent":["import $ from 'jquery';\r\nimport 'jquery-validation';\r\nimport BaseFeature from '../../foundation/base/base';\r\nimport { formIdparser } from '../../foundation/utilities/formIdParser';\r\n\r\n/**\r\n * This is a custom form handler that validates fields directly on user input in sitecore forms\r\n * It's a little bit 'hacky' due to how restricted we are in working with sitecore forms\r\n * as well as time-effort restrictions from Perstorp, and should be optimized if we get the time.\r\n *\r\n * It requires a specific form structure with correct use of classes by editors.\r\n *\r\n * - Every form step needs to be wrapped in a section with the class 'js-form-section'.\r\n * - Every input field within a form step needs to be wrapped in its own section, no class needed.\r\n * - Every input field needs to have the class 'js-validate-on-blur'.\r\n * - Every form navigation button needs to have one of the following classes:\r\n * 'js-next-section', 'js-previous-section'\r\n *\r\n * As of now, the validation supports regular inputs, selects, and textareas.\r\n * Checkboxes and radiobuttons have not been fully tested.\r\n *\r\n * Since the validation requires a mixture of client-side handling and the Sitecore forms session,\r\n * the solution can't be fully tested within the design system.\r\n *\r\n * - Erik Lundow 2024-07-25\r\n */\r\n\r\nexport default class FormHandler extends BaseFeature {\r\n constructor(element) {\r\n super(element);\r\n this.setRequiredFields = this.setRequiredFields.bind(this);\r\n this.setNextButtons = this.setNextButtons.bind(this);\r\n this.setPreviousButtons = this.setPreviousButtons.bind(this);\r\n this.initDomCache();\r\n this.el = element;\r\n this.formSections = this.el.querySelectorAll('.js-form-section');\r\n this.nextButtons = this.el.querySelectorAll('.js-next-section');\r\n this.previousButton = this.el.querySelectorAll('.js-previous-section');\r\n this.fieldsWithDynamicValidation = this.el.querySelectorAll('.js-validate-on-blur');\r\n this.dropdownContainers = this.el.querySelectorAll('.js-droplist-component');\r\n this.currentSection = 0;\r\n this.hideSections();\r\n this.initEvents();\r\n this.initDropdownEvents(); \r\n this.simulateDropdownChange();\r\n this.storeOriginalDropdownValues(); \r\n }\r\n\r\n simulateDropdownChange() {\r\n const dropdown = document.querySelector('#subject-dropdown-id');\r\n if (dropdown) {\r\n dropdown.dispatchEvent(new Event('change', { bubbles: true }));\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Hides all form sections except the first one.\r\n */\r\n hideSections() {\r\n if (this.formSections && this.formSections.length) {\r\n this.formSections.forEach((section, index) => {\r\n section.classList.toggle('u-hide', index !== 0);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes event listeners for form navigation and validation.\r\n */\r\n initEvents() {\r\n if (this.formSections && this.formSections.length) {\r\n this.setRequiredFields();\r\n }\r\n\r\n if (this.fieldsWithDynamicValidation && this.fieldsWithDynamicValidation.length) {\r\n this.setValidationListener();\r\n this.setFocusListener();\r\n }\r\n if (this.nextButtons && this.nextButtons.length) {\r\n this.setNextButtons();\r\n }\r\n\r\n if (this.previousButton && this.previousButton.length) {\r\n this.setPreviousButtons();\r\n }\r\n }\r\n\r\n /**\r\n * Initializes dropdown-related events for dependent dropdowns.\r\n */\r\n initDropdownEvents() {\r\n this.dropdownContainers.forEach((container) => {\r\n const firstDropdown = container.querySelector('.js-first-dropdown');\r\n const secondDropdown = container.querySelector('.js-second-dropdown');\r\n const thirdDropdownContainer = container.querySelector('.js-third-dropdown-checkboxes');\r\n const hiddenInput = container.querySelector('input[type=\"hidden\"]');\r\n const listSeparator = container.getAttribute('data-list-separator') || \"__\";\r\n const multilistValueSeparator = container.getAttribute('data-multilist-value-separator') || \"-\";\r\n const contextItemId = container.getAttribute('data-context-item-id');\r\n\r\n if (!firstDropdown || !secondDropdown || !thirdDropdownContainer || !hiddenInput || !contextItemId) {\r\n console.error('❌ Required elements not found in container:', { container });\r\n return;\r\n }\r\n\r\n secondDropdown.addEventListener('change', () => {\r\n const newSecondValue = secondDropdown.value;\r\n this.updateFirstDropdownValue(firstDropdown, newSecondValue, thirdDropdownContainer, listSeparator);\r\n this.syncHiddenInput(firstDropdown.value, hiddenInput);\r\n this.loadThirdDropdown(contextItemId, newSecondValue, thirdDropdownContainer, container, listSeparator, multilistValueSeparator);\r\n });\r\n\r\n firstDropdown.addEventListener('change', (e) => {\r\n const baseValue = e.target.value.split(listSeparator)[0];\r\n \r\n this.loadSecondDropdown(contextItemId, baseValue, secondDropdown, listSeparator, () => {\r\n const newSecondValue = secondDropdown.value;\r\n this.updateFirstDropdownValue(firstDropdown, newSecondValue, thirdDropdownContainer, listSeparator);\r\n this.loadThirdDropdown(contextItemId, newSecondValue, thirdDropdownContainer, container, listSeparator, multilistValueSeparator);\r\n });\r\n });\r\n\r\n this.loadSecondDropdown(contextItemId, firstDropdown.value.split(listSeparator)[0], secondDropdown, listSeparator, () => {\r\n const newSecondValue = secondDropdown.value;\r\n this.loadThirdDropdown(contextItemId, newSecondValue, thirdDropdownContainer, container, listSeparator, multilistValueSeparator);\r\n\r\n this.updateFirstDropdownValue(firstDropdown, newSecondValue, thirdDropdownContainer, listSeparator);\r\n this.syncHiddenInput(firstDropdown.value, hiddenInput);\r\n });\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Updates the options in the second dropdown based on fetched data.\r\n */\r\n updateSecondDropdown(secondDropdown, data) {\r\n secondDropdown.innerHTML = '';\r\n data.items.forEach(item => {\r\n const option = document.createElement('option');\r\n option.value = item.Id;\r\n option.textContent = item.DisplayName;\r\n secondDropdown.appendChild(option);\r\n });\r\n secondDropdown.disabled = data.items.length === 0;\r\n }\r\n\r\n /**\r\n * Fetches options for the second dropdown based on the selected value in the first dropdown.\r\n */\r\n loadSecondDropdown(contextItemId, parentId, secondDropdown, listSeparator, callback) {\r\n const templateId = secondDropdown.getAttribute('data-template-id');\r\n const pageItemId = secondDropdown.getAttribute('data-page-item-id');\r\n const firstDropdown = document.querySelector(\".js-first-dropdown\");\r\n\r\n if (!parentId || !templateId || !pageItemId || !contextItemId) {\r\n console.warn('Missing required attributes for loading second dropdown:', { parentId, templateId, pageItemId, contextItemId });\r\n\r\n if (typeof callback === \"function\") callback();\r\n return;\r\n }\r\n\r\n fetch('/api/Forms/GetSecondDropdownItems', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ parentId, templateId2: templateId, currentPageItemId: pageItemId, contextItemId })\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (!data || !data.items) {\r\n console.error('API returned invalid data:', data);\r\n return;\r\n }\r\n\r\n this.updateSecondDropdown(secondDropdown, data);\r\n\r\n if (firstDropdown) {\r\n let firstValue = firstDropdown.value.split(listSeparator)[0] || \"\";\r\n let secondValue = secondDropdown.value || \"\";\r\n let newValue = `${firstValue}${listSeparator}${secondValue}`;\r\n\r\n let selectedOption = firstDropdown.querySelector(\"option:checked\") || firstDropdown.options[0];\r\n\r\n this._updateSelectedOption(firstDropdown, selectedOption, newValue);\r\n }\r\n\r\n if (typeof callback === \"function\") {\r\n callback();\r\n } else {\r\n console.warn(\"❗ Callback is not a function:\", callback);\r\n }\r\n })\r\n .catch(error => {\r\n console.error('Error loading second dropdown:', error);\r\n \r\n if (typeof callback === \"function\") {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n\r\n loadThirdDropdown(contextItemId, parentId, thirdDropdownContainer, container, listSeparator, multilistValueSeparator) {\r\n\r\n let templateId = thirdDropdownContainer.getAttribute('data-template-id');\r\n const pageItemId = thirdDropdownContainer.getAttribute('data-page-item-id');\r\n\r\n if (!templateId) {\r\n console.warn(\"templateId missing on thirdDropdownContainer\", thirdDropdownContainer);\r\n }\r\n if (!pageItemId) {\r\n console.warn(\"pageItemId missing on thirdDropdownContainer\", thirdDropdownContainer);\r\n }\r\n \r\n if (!templateId && this.thirdDropdownTemplateId) {\r\n templateId = this.thirdDropdownTemplateId;\r\n } else if (templateId) {\r\n this.thirdDropdownTemplateId = templateId;\r\n }\r\n\r\n if (!parentId || !contextItemId) {\r\n console.warn('Missing required attributes for loading third dropdown:', { parentId, contextItemId });\r\n return;\r\n }\r\n\r\n fetch('/api/Forms/GetThirdDropdownItems', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ referringItemId: parentId, templateId3: templateId, currentPageItemId: pageItemId, contextItemId })\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (!data || !data.items) {\r\n console.error('API returned invalid data:', data);\r\n return;\r\n }\r\n this.updateThirdDropdown(thirdDropdownContainer, data, container, listSeparator, multilistValueSeparator);\r\n })\r\n .catch(error => {\r\n console.error('Error loading third dropdown:', error);\r\n });\r\n }\r\n\r\n\r\n updateThirdDropdown(thirdDropdownContainer, data, container, listSeparator, multilistValueSeparator) {\r\n thirdDropdownContainer.innerHTML = '';\r\n\r\n if (!data.items.length) {\r\n return;\r\n }\r\n\r\n thirdDropdownContainer.style.display = 'grid';\r\n thirdDropdownContainer.style.gridTemplateColumns = 'repeat(2, 1fr)';\r\n thirdDropdownContainer.style.gap = '8px 16px';\r\n\r\n data.items.forEach(item => {\r\n const checkboxWrapper = document.createElement('div');\r\n checkboxWrapper.classList.add('form-check');\r\n\r\n checkboxWrapper.style.display = 'flex';\r\n checkboxWrapper.style.alignItems = 'baseline';\r\n checkboxWrapper.style.gap = '8px';\r\n checkboxWrapper.style.width = '100%';\r\n checkboxWrapper.style.margin = '0';\r\n\r\n const checkbox = document.createElement('input');\r\n checkbox.type = 'checkbox';\r\n checkbox.value = item.Id;\r\n checkbox.id = `checkbox_${item.Id}`;\r\n checkbox.classList.add('js-third-checkbox', 'form-check-input');\r\n\r\n const label = document.createElement('label');\r\n label.htmlFor = checkbox.id;\r\n label.textContent = item.DisplayName;\r\n label.classList.add('form-check-label');\r\n\r\n label.style.display = 'inline';\r\n label.style.textAlign = 'left';\r\n\r\n checkboxWrapper.appendChild(checkbox);\r\n checkboxWrapper.appendChild(label);\r\n thirdDropdownContainer.appendChild(checkboxWrapper);\r\n\r\n if (item.IsSelected) {\r\n checkbox.checked = true;\r\n }\r\n\r\n checkbox.addEventListener('change', () => {\r\n const firstDropdown = container.querySelector('.js-first-dropdown');\r\n if (!firstDropdown) {\r\n console.error(\"firstDropdown är null vid checkboxändring\");\r\n return;\r\n }\r\n this.updateFirstDropdownWithMultiSelect(firstDropdown, thirdDropdownContainer, listSeparator, multilistValueSeparator);\r\n this.syncHiddenInput(firstDropdown.value, container.querySelector('input[type=\"hidden\"]'));\r\n });\r\n });\r\n }\r\n\r\n\r\n updateFirstDropdownValue(firstDropdown, newSecondValue, thirdDropdownContainer, listSeparator) {\r\n const selectedOption = firstDropdown.querySelector(\"option:checked\");\r\n\r\n if (!selectedOption) {\r\n console.warn(\"❗ No option marked in firstDropdown\");\r\n return;\r\n }\r\n\r\n const selectedThirdValues = [...thirdDropdownContainer.querySelectorAll('.js-third-checkbox:checked')]\r\n .map(checkbox => checkbox.value);\r\n\r\n const newValue = [selectedOption.dataset.originalValue, newSecondValue || \"\", ...selectedThirdValues].join(listSeparator);\r\n\r\n this._updateSelectedOption(firstDropdown, selectedOption, newValue);\r\n }\r\n\r\n updateFirstDropdownWithMultiSelect(firstDropdown, thirdDropdownContainer, listSeparator, multilistValueSeparator) {\r\n const selectedOption = firstDropdown.querySelector(\"option:checked\");\r\n\r\n if (!selectedOption) {\r\n console.warn(\"❗ No selected option found in firstDropdown!\");\r\n return;\r\n }\r\n\r\n const splitValues = selectedOption.value.split(listSeparator);\r\n const selectedOptionFirstAndSecondDroplist = splitValues.slice(0, 2).join(listSeparator);\r\n\r\n const selectedThirdValues = [...thirdDropdownContainer.querySelectorAll('.js-third-checkbox:checked')]\r\n .map(checkbox => checkbox.value)\r\n .join(multilistValueSeparator);\r\n\r\n const newValue = selectedThirdValues \r\n ? `${selectedOptionFirstAndSecondDroplist}${listSeparator}${selectedThirdValues}${multilistValueSeparator}` \r\n : selectedOptionFirstAndSecondDroplist;\r\n\r\n this._updateSelectedOption(firstDropdown, selectedOption, newValue);\r\n }\r\n\r\n storeOriginalDropdownValues() {\r\n this.el.querySelectorAll('.js-first-dropdown option').forEach(option => {\r\n option.dataset.originalValue = option.value;\r\n });\r\n }\r\n\r\n _updateSelectedOption(firstDropdown, selectedOption, newValue) {\r\n selectedOption.value = newValue;\r\n firstDropdown.value = newValue;\r\n\r\n firstDropdown.querySelectorAll(\"option\").forEach(option => {\r\n option.selected = option === selectedOption;\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Synchronizes the hidden input field with the current dropdown values.\r\n */\r\n syncHiddenInput(value, hiddenInput) {\r\n hiddenInput.value = value;\r\n hiddenInput.dispatchEvent(new Event('change'));\r\n }\r\n\r\n /**\r\n * Sitecore forms handles required fields separately from the input.\r\n * We need to set the input itself to be required if we want to validate\r\n * on user input.\r\n */\r\n setRequiredFields() {\r\n this.formSections.forEach((section) => {\r\n const fields = Array.from(\r\n section.querySelectorAll('input, select, textarea')\r\n );\r\n fields.forEach((field) => {\r\n if (field.hasAttribute('data-val-required')) {\r\n field.setAttribute('required', '');\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Validates a section.\r\n * If all fields are valid the current section is hidden and the next set to visible.\r\n */\r\n setNextButtons() {\r\n this.nextButtons.forEach((next) => {\r\n next.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n if (typeof this.currentSection === 'undefined') {\r\n console.error('this.currentSection is undefined');\r\n return;\r\n }\r\n\r\n const isValid = FormHandler.validateSection(this.formSections[this.currentSection]);\r\n if (!isValid) {\r\n FormHandler.handleInvalidSection(this.formSections[this.currentSection]);\r\n return;\r\n }\r\n\r\n this.currentSection += 1;\r\n\r\n this.formSections.forEach((section, index) => {\r\n if (index !== this.currentSection) {\r\n section.classList.add('u-hide');\r\n } else {\r\n section.classList.remove('u-hide');\r\n }\r\n });\r\n });\r\n });\r\n}\r\n\r\n\r\n /**\r\n * Hides the current section and sets the previous to visible,\r\n * no validation required.\r\n */\r\n setPreviousButtons() {\r\n this.previousButton.forEach((previous) => {\r\n this.addEventListener(previous, 'click', (e) => {\r\n e.preventDefault();\r\n this.currentSection = this.currentSection - 1;\r\n this.formSections.forEach((section, index) => {\r\n if (index !== this.currentSection) {\r\n section.classList.add('u-hide');\r\n } else {\r\n section.classList.remove('u-hide');\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Initiates the client-side validation.\r\n */\r\n setValidationListener() {\r\n this.fieldsWithDynamicValidation.forEach((field) => {\r\n const errorMessage = field.getAttribute('data-val-required');\r\n field.setAttribute('data-msg-required', errorMessage);\r\n\r\n this.addEventListener(field, 'blur', (e) => {\r\n FormHandler.validate(e.target);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Validation is a mixture of client-side and Sitecore forms.\r\n * We need to reset all errors on input focus.\r\n */\r\n setFocusListener() {\r\n this.fieldsWithDynamicValidation.forEach((field) => {\r\n const errorMessage = field.getAttribute('data-val-required');\r\n field.setAttribute('data-msg-required', errorMessage);\r\n this.addEventListener(field, 'focus', (e) => {\r\n e.target.classList.remove('input-validation-error', 'error');\r\n FormHandler.removeErrorField(e.target);\r\n const parent = e.target.parentElement;\r\n const parsedFormId = formIdparser(e.target.id);\r\n const fieldError = parent.querySelector(\r\n `[data-valmsg-for=\"${parsedFormId}\"]`\r\n );\r\n if (\r\n fieldError &&\r\n fieldError.classList.contains('field-validation-error')\r\n ) {\r\n fieldError.innerHTML = '';\r\n fieldError.classList.add('field-validation-valid');\r\n fieldError.classList.remove('field-validation-error');\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Validates a section on the client side.\r\n * If errors are identified through Sitecore forms,\r\n * client validation is skipped, and the section is returned as invalid.\r\n */\r\n static validateSection(section) {\r\n const invalidFields = Array.from(\r\n section.querySelectorAll('.field-validation-error, .error')\r\n );\r\n let hasInvalidFields = false;\r\n invalidFields.forEach((field) => {\r\n const parent = field.parentElement;\r\n const input = parent.querySelector('.js-validate-on-blur');\r\n if (input.disabled) {\r\n hasInvalidFields = false;\r\n } else if (!field.classList.contains('u-hide')) {\r\n hasInvalidFields = true;\r\n }\r\n });\r\n\r\n if (hasInvalidFields) return false;\r\n const fields = Array.from(\r\n section.querySelectorAll('input, select, textarea')\r\n ).filter(field => field.type !== 'hidden');\r\n let isValid = true;\r\n fields.forEach((field) => {\r\n if (!$(field).valid()) {\r\n isValid = false;\r\n } else {\r\n field.classList.remove('input-validation-error', 'error');\r\n FormHandler.removeErrorField(field);\r\n }\r\n });\r\n\r\n return isValid;\r\n }\r\n\r\n /**\r\n * Handles invalid sections by showing the correct error messages.\r\n */\r\n static handleInvalidSection(section) {\r\n const errors = Array.from(section.querySelectorAll('.error'));\r\n errors.forEach((error) => {\r\n if (error.tagName === 'LABEL') {\r\n const inlineError = error;\r\n if (!inlineError.classList.contains('u-hide')) {\r\n inlineError.classList.add('u-hide');\r\n }\r\n const parent = error.parentElement;\r\n const errorInputId = error.getAttribute('for');\r\n const errorInput = parent.querySelector(`#${errorInputId}`);\r\n const errorMessage = errorInput.getAttribute('data-val-required');\r\n const parsedFormId = formIdparser(errorInputId);\r\n const errorField = parent.querySelector(\r\n `[data-valmsg-for=\"${parsedFormId}\"]`\r\n );\r\n FormHandler.setErrorField(errorField, errorMessage);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles invalid fields by setting error messages.\r\n */\r\n static handleInvalidField(field) {\r\n const parent = field.parentElement;\r\n const errorId = field.id;\r\n const error = parent.querySelector(`[id=\"${errorId}-error\"]`);\r\n if (!error.classList.contains('u-hide')) {\r\n error.classList.add('u-hide');\r\n }\r\n const errorMessage = field.getAttribute('data-val-required');\r\n\r\n const parsedFormId = formIdparser(errorId);\r\n const errorField = parent.querySelector(\r\n `[data-valmsg-for=\"${parsedFormId}\"]`\r\n );\r\n FormHandler.setErrorField(errorField, errorMessage);\r\n }\r\n\r\n /**\r\n * Removes error messages from input fields.\r\n */\r\n static removeErrorField(inputField) {\r\n const sibling = inputField.nextElementSibling;\r\n if (sibling.classList.contains('error')) {\r\n sibling.remove();\r\n }\r\n }\r\n\r\n /**\r\n * Sets error messages in Sitecore form error fields.\r\n */\r\n static setErrorField(field, message) {\r\n const errorField = field;\r\n if (errorField && errorField.classList.contains('field-validation-valid')) {\r\n errorField.classList.remove('field-validation-valid');\r\n errorField.classList.add('field-validation-error');\r\n errorField.innerHTML = message;\r\n }\r\n }\r\n\r\n /**\r\n * Validates a single field on the client side.\r\n */\r\n static validate(field) {\r\n if (!$(field).valid()) {\r\n FormHandler.handleInvalidField(field);\r\n } else {\r\n FormHandler.removeErrorField(field);\r\n const parent = field.parentElement;\r\n const errorInputId = field.id;\r\n const parsedFormId = formIdparser(errorInputId);\r\n const errorField = parent.querySelector(\r\n `[data-valmsg-for=\"${parsedFormId}\"]`\r\n );\r\n if (errorField.classList.contains('field-validation-error')) {\r\n field.classList.remove('valid');\r\n field.classList.add('input-validation-error', 'error');\r\n } else {\r\n field.classList.remove('input-validation-error', 'error');\r\n }\r\n }\r\n }\r\n}\r\n","export function formIdparser(id) {\r\n\tconst parsed = id.replaceAll('_', '.');\r\n\tconst split = parsed.split('.').filter(Boolean);\r\n\tif (split.length !== 5) {\r\n\t\treturn null;\r\n\t}\r\n\tconst parsedString = `${split[0]}.${split[1]}.${split[2]}[${split[3]}].${split[4]}`;\r\n\treturn parsedString;\r\n}\r\n"],"sourceRoot":""}
皇冠体育博彩
国泰君安上海证券公司
Crown-Sports-customerservice@jyycl.com
新浪乐居楼盘电子地图
欧洲杯竞猜官网
安科运达
中国永修
博彩平台
博彩平台
太阳城网址
中国银联开放平台
鸡泽信息网
皇冠博彩
体育博彩
看福清
澳门银河
六个核桃
皇冠体育投注
New-Portuguese-gambling-admin@castingmoldingmachine.com
法易网
uber中国官网
衡阳百姓网
厦门天气预报
观致汽车
圣伊依批发网
杭州整形医院
驴妈妈度假旅游
联合创业
超凡中国商标网
老古影院
电影天堂影视大全
站点地图