UNPKG

@modular-forms/solid

Version:

The modular and type-safe form library for SolidJS

41 lines (40 loc) 2.09 kB
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' ? [] : {}); }