Files
docuseal/app/javascript/elements/disable_hidden.js
T
2026-09-23 11:00:18 +03:00

51 lines
1.1 KiB
JavaScript

export default class extends HTMLElement {
static observedAttributes = ['class']
connectedCallback () {
this.addEventListener('turbo:morph-element', this.onMorph)
this.trigger()
}
disconnectedCallback () {
this.removeEventListener('turbo:morph-element', this.onMorph)
}
onMorph = (event) => {
if (event.target !== this) return
this.trigger()
}
attributeChangedCallback (attributeName, oldValue, newValue) {
if (attributeName === 'class' && oldValue !== newValue) {
this.trigger()
}
}
trigger () {
const hasHiddenClass = this.classList.contains('hidden')
const elements = this.querySelectorAll('input, textarea, select')
elements.forEach((element) => {
if (hasHiddenClass) {
element.disabled = true
if (!element.dataset.wasRequired) {
element.dataset.wasRequired = element.required
}
element.required = false
} else {
element.disabled = false
if (element.dataset.wasRequired) {
element.required = element.dataset.wasRequired === 'true'
delete element.dataset.wasRequired
}
}
})
}
}