@modular-forms/solid
Version:
The modular and type-safe form library for SolidJS
41 lines (40 loc) • 2.09 kB
JavaScript
import { getFieldArrayStore, getFieldStore, getFilteredNames, getOptions, } from '../utils';
export function getValues(form, arg2, arg3) {
// Get filtered field names to get value from
const [fieldNames, fieldArrayNames] = getFilteredNames(form, arg2);
// Destructure options and set default values
const { shouldActive = true, shouldTouched = false, shouldDirty = false, shouldValid = false, } = getOptions(arg2, arg3);
// If no field or field array name is specified, set listener to be notified
// when a new field is added
if (typeof arg2 !== 'string' && !Array.isArray(arg2)) {
form.internal.fieldNames.get();
// Otherwise if a field array is included, set listener to be notified when
// a new field array items is added
}
else {
fieldArrayNames.forEach((fieldArrayName) => getFieldArrayStore(form, fieldArrayName).items.get());
}
// Create and return values of form or field array
return fieldNames.reduce((values, name) => {
// Get store of specified field
const field = getFieldStore(form, name);
// Add value if field corresponds to filter options
if ((!shouldActive || field.active.get()) &&
(!shouldTouched || field.touched.get()) &&
(!shouldDirty || field.dirty.get()) &&
(!shouldValid || !field.error.get())) {
// Split name into keys to be able to add values of nested fields
(typeof arg2 === 'string' ? name.replace(`${arg2}.`, '') : name)
.split('.')
.reduce((object, key, index, keys) => (object[key] =
index === keys.length - 1
? // If it is last key, add value
field.value.get()
: // Otherwise return object or array
(typeof object[key] === 'object' && object[key]) ||
(isNaN(+keys[index + 1]) ? {} : [])), values);
}
// Return modified values object
return values;
}, typeof arg2 === 'string' ? [] : {});
}