5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-26 07:06:22 +00:00
panel/app/javascript/controllers/required_checkbox_controller.js

54 lines
1.3 KiB
JavaScript
Raw Normal View History

2024-07-20 18:21:03 +00:00
import { Controller } from "@hotwired/stimulus";
/*
* Para poder indicar que al menos uno del grupo de checkboxes es
* obligatorio, marcamos uno como `required` (que es el que mostraría el
* error) y se lo quitamos cuando detectamos que alguno cambió.
*/
export default class extends Controller {
static targets = ["required", "checkbox"];
connect() {
}
checkboxTargetConnected(checkboxTarget) {
if (checkboxTarget.checked) {
this.requiredTarget.required = false;
this.revalid();
}
}
/*
* El grupo deja de ser obligatorio cuando al menos uno está activo.
*/
change(event = undefined) {
if (event.target.checked) {
this.requiredTarget.required = false;
} else {
this.requiredTarget.required = !Array.from(this.checkboxTargets).some(x => x.checked);
}
2024-06-19 16:13:30 +00:00
for (const checkbox of this.checkboxTargets) {
if (checkbox === event.target) continue;
checkbox.required = !event.target.checked;
}
}
/*
* Si el checkbox es considerado inválido, transmitir todos los
* estados a los checkboxes.
2024-06-19 16:13:30 +00:00
*/
invalid(event = undefined) {
2024-06-19 16:13:30 +00:00
for (const checkbox of this.checkboxTargets) {
checkbox.required = true;
}
}
revalid(event = undefined) {
for (const checkbox of this.checkboxTargets) {
checkbox.required = false;
}
}
}