23 lines
823 B
JavaScript
23 lines
823 B
JavaScript
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)
|
|
}
|
|
}
|