import {Controller} from '@hotwired/stimulus' /* * Keeps buttons disabled until the given fields pass the browser's constraint validation * (required, min, max, step, …), which the form types render from the same rules the server * validates. A text field holding only whitespace counts as empty, as NotBlank does. * * Works on forms with novalidate too: that only stops the browser from blocking the submit. */ export default class extends Controller { static targets = ['field', 'button'] connect() { this.update() } update() { const invalid = this.fieldTargets.some(field => !field.checkValidity() || ('radio' !== field.type && 'checkbox' !== field.type && '' === field.value.trim())) this.buttonTargets.forEach(button => button.disabled = invalid) } }