@modular-forms/solid
Version:
The modular and type-safe form library for SolidJS
38 lines (37 loc) • 1.24 kB
JavaScript
import { batch, untrack } from 'solid-js';
import { getFieldAndArrayStores } from './getFieldAndArrayStores';
/**
* Updates the touched, dirty and invalid state of the form.
*
* @param form The store of the form.
*/
export function updateFormState(form) {
// Create state variables
let touched = false, dirty = false, invalid = false;
// Check each field and field array and update state if necessary
untrack(() => {
for (const fieldOrFieldArray of getFieldAndArrayStores(form)) {
if (fieldOrFieldArray.active.get()) {
if (fieldOrFieldArray.touched.get()) {
touched = true;
}
if (fieldOrFieldArray.dirty.get()) {
dirty = true;
}
if (fieldOrFieldArray.error.get()) {
invalid = true;
}
}
// Break loop if all state values are "true"
if (touched && dirty && invalid) {
break;
}
}
});
// Update state of form
batch(() => {
form.internal.touched.set(touched);
form.internal.dirty.set(dirty);
form.internal.invalid.set(invalid);
});
}