ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
31 lines • 11.2 kB
JavaScript
import { isArrayState, isFormState, isGroupState, } from '../state';
import { updateArray } from './update-array';
import { updateGroup } from './update-group';
import { ensureState } from './util';
function updateRecursiveSingle(parent, updateFn) {
return (state) => {
if (isGroupState(state)) {
const updateFunctions = Object.keys(state.controls).reduce((agg, key) => Object.assign(agg, {
[key]: (s, p) => updateRecursiveSingle(p, updateFn)(s),
}), {});
state = updateGroup(updateFunctions)(state);
return updateFn(state, parent);
}
if (isArrayState(state)) {
state = updateArray((s, p) => updateRecursiveSingle(p, updateFn)(s))(state);
return updateFn(state, parent);
}
return updateFn(state, parent);
};
}
export function updateRecursive(stateOrFunctionOrFunctionArray, updateFnOrUpdateFnArr, ...rest) {
if (isFormState(stateOrFunctionOrFunctionArray)) {
const updateFnArr = Array.isArray(updateFnOrUpdateFnArr) ? updateFnOrUpdateFnArr : [updateFnOrUpdateFnArr];
return updateFnArr.concat(...rest)
.reduce((s, updateFn) => updateRecursiveSingle(stateOrFunctionOrFunctionArray, updateFn)(s), stateOrFunctionOrFunctionArray);
}
let updateFnArr = Array.isArray(stateOrFunctionOrFunctionArray) ? stateOrFunctionOrFunctionArray : [stateOrFunctionOrFunctionArray];
updateFnArr = updateFnOrUpdateFnArr === undefined ? updateFnArr : updateFnArr.concat(updateFnOrUpdateFnArr);
return (s) => updateRecursive(ensureState(s), updateFnArr.concat(rest));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXJlY3Vyc2l2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGRhdGUtZnVuY3Rpb24vdXBkYXRlLXJlY3Vyc2l2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUVqRCxTQUFTLHFCQUFxQixDQUFDLE1BQWlDLEVBQUUsUUFBMEU7SUFDMUksT0FBTyxDQUFDLEtBQWdDLEVBQTZCLEVBQUU7UUFDckUsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQzFGLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUE0QixFQUFFLENBQTRCLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0csQ0FBQyxFQUFFLEVBQXlCLENBQUMsQ0FBQztZQUMvQixLQUFLLEdBQUcsV0FBVyxDQUFNLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssR0FBRyxXQUFXLENBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRixPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDaEM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWdGRCxNQUFNLFVBQVUsZUFBZSxDQUM3Qiw4QkFHc0UsRUFDdEUscUJBQTZKLEVBQzdKLEdBQUcsSUFBd0U7SUFFM0UsSUFBSSxXQUFXLENBQUMsOEJBQThCLENBQUMsRUFBRTtRQUMvQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFzQixDQUFDLENBQUM7UUFDNUcsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLDhCQUE4QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLENBQUM7S0FDaEk7SUFFRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDcEksV0FBVyxHQUFHLHFCQUFxQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUcsT0FBTyxDQUFDLENBQStCLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBUyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbFN0YXRlLFxyXG4gIEZvcm1TdGF0ZSxcclxuICBpc0FycmF5U3RhdGUsXHJcbiAgaXNGb3JtU3RhdGUsXHJcbiAgaXNHcm91cFN0YXRlLFxyXG59IGZyb20gJy4uL3N0YXRlJztcclxuaW1wb3J0IHsgdXBkYXRlQXJyYXkgfSBmcm9tICcuL3VwZGF0ZS1hcnJheSc7XHJcbmltcG9ydCB7IFN0YXRlVXBkYXRlRm5zLCB1cGRhdGVHcm91cCB9IGZyb20gJy4vdXBkYXRlLWdyb3VwJztcclxuaW1wb3J0IHsgZW5zdXJlU3RhdGUsIFByb2plY3RGbjIgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlUmVjdXJzaXZlU2luZ2xlKHBhcmVudDogQWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgdXBkYXRlRm46IFByb2plY3RGbjI8QWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgQWJzdHJhY3RDb250cm9sU3RhdGU8YW55Pj4pIHtcclxuICByZXR1cm4gKHN0YXRlOiBBYnN0cmFjdENvbnRyb2xTdGF0ZTxhbnk+KTogQWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiA9PiB7XHJcbiAgICBpZiAoaXNHcm91cFN0YXRlKHN0YXRlKSkge1xyXG4gICAgICBjb25zdCB1cGRhdGVGdW5jdGlvbnMgPSBPYmplY3Qua2V5cyhzdGF0ZS5jb250cm9scykucmVkdWNlKChhZ2csIGtleSkgPT4gT2JqZWN0LmFzc2lnbihhZ2csIHtcclxuICAgICAgICBba2V5XTogKHM6IEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIHA6IEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4pID0+IHVwZGF0ZVJlY3Vyc2l2ZVNpbmdsZShwLCB1cGRhdGVGbikocyksXHJcbiAgICAgIH0pLCB7fSBhcyBTdGF0ZVVwZGF0ZUZuczxhbnk+KTtcclxuICAgICAgc3RhdGUgPSB1cGRhdGVHcm91cDxhbnk+KHVwZGF0ZUZ1bmN0aW9ucykoc3RhdGUpO1xyXG4gICAgICByZXR1cm4gdXBkYXRlRm4oc3RhdGUsIHBhcmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQXJyYXlTdGF0ZShzdGF0ZSkpIHtcclxuICAgICAgc3RhdGUgPSB1cGRhdGVBcnJheTxhbnk+KChzLCBwKSA9PiB1cGRhdGVSZWN1cnNpdmVTaW5nbGUocCwgdXBkYXRlRm4pKHMpKShzdGF0ZSk7XHJcbiAgICAgIHJldHVybiB1cGRhdGVGbihzdGF0ZSwgcGFyZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXBkYXRlRm4oc3RhdGUsIHBhcmVudCk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoaXMgdXBkYXRlIGZ1bmN0aW9uIHRha2VzIGEgZm9ybSBhcnJheSBzdGF0ZSBhbmQgb25lIG9yIG1vcmUgdXBkYXRlXHJcbiAqIGZ1bmN0aW9ucyBhcHBsaWVzIGFsbCB1cGRhdGUgZnVuY3Rpb25zIG9uZSBhZnRlciBhbm90aGVyIHRvIHRoZSBzdGF0ZVxyXG4gKiByZWN1cnNpdmVseSwgaS5lLiB0aGUgZnVuY3Rpb24gaXMgYXBwbGllZCB0byB0aGUgc3RhdGUncyBjaGlsZHJlbixcclxuICogdGhlaXIgY2hpbGRyZW4gZXRjLlxyXG4gKlxyXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFsbCBjb250cm9scyBpbiBhXHJcbiAqIGdyb3VwIG9yIGFycmF5IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gYGBgdHlwZXNjcmlwdFxyXG4gY29uc3QgdXBkYXRlZFN0YXRlID0gdXBkYXRlUmVjdXJzaXZlKFxyXG4gICBzdGF0ZSxcclxuICAgdmFsaWRhdGU8YW55PihyZXF1aXJlZCksXHJcbiApO1xyXG4gYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUmVjdXJzaXZlPFRWYWx1ZT4oXHJcbiAgc3RhdGU6IEFic3RyYWN0Q29udHJvbFN0YXRlPFRWYWx1ZT4sXHJcbiAgdXBkYXRlRm46IFByb2plY3RGbjI8QWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgQWJzdHJhY3RDb250cm9sU3RhdGU8YW55Pj4sXHJcbiAgLi4udXBkYXRlRm5BcnI6IFByb2plY3RGbjI8QWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgQWJzdHJhY3RDb250cm9sU3RhdGU8YW55Pj5bXVxyXG4pOiBGb3JtU3RhdGU8VFZhbHVlPjtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHVwZGF0ZSBmdW5jdGlvbiB0YWtlcyBhIGZvcm0gYXJyYXkgc3RhdGUgYW5kIGFuIGFycmF5IG9mXHJcbiAqIHVwZGF0ZSBmdW5jdGlvbnMgYXBwbGllcyBhbGwgdXBkYXRlIGZ1bmN0aW9ucyBvbmUgYWZ0ZXIgYW5vdGhlciB0byB0aGVcclxuICogc3RhdGUgcmVjdXJzaXZlbHksIGkuZS4gdGhlIGZ1bmN0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHN0YXRlJ3MgY2hpbGRyZW4sXHJcbiAqIHRoZWlyIGNoaWxkcmVuIGV0Yy5cclxuICpcclxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbGwgY29udHJvbHMgaW4gYVxyXG4gKiBncm91cCBvciBhcnJheSBhcyByZXF1aXJlZC5cclxuICpcclxuYGBgdHlwZXNjcmlwdFxyXG5jb25zdCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVSZWN1cnNpdmUoXHJcbiAgc3RhdGUsXHJcbiAgW3ZhbGlkYXRlPGFueT4ocmVxdWlyZWQpXSxcclxuKTtcclxuYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUmVjdXJzaXZlPFRWYWx1ZT4oXHJcbiAgc3RhdGU6IEFic3RyYWN0Q29udHJvbFN0YXRlPFRWYWx1ZT4sXHJcbiAgdXBkYXRlRm5BcnI6IFByb2plY3RGbjI8QWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgQWJzdHJhY3RDb250cm9sU3RhdGU8YW55Pj5bXSxcclxuKTogRm9ybVN0YXRlPFRWYWx1ZT47XHJcblxyXG4vKipcclxuICogVGhpcyB1cGRhdGUgZnVuY3Rpb24gdGFrZXMgb25lIG9yIG1vcmUgdXBkYXRlIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhXHJcbiAqIHByb2plY3Rpb24gZnVuY3Rpb24gdGhhdCBhcHBsaWVzIGFsbCB1cGRhdGUgZnVuY3Rpb25zIG9uZSBhZnRlciBhbm90aGVyIHRvXHJcbiAqIGEgZm9ybSBzdGF0ZS5cclxuICpcclxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbGwgY29udHJvbHMgaW4gYVxyXG4gKiBncm91cCBhcyByZXF1aXJlZC5cclxuICpcclxuYGBgdHlwZXNjcmlwdFxyXG5jb25zdCB1cGRhdGVGbiA9IHVwZGF0ZVJlY3Vyc2l2ZSh2YWxpZGF0ZTxhbnk+KHJlcXVpcmVkKSk7XHJcbmNvbnN0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUZuKHN0YXRlKTtcclxuYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUmVjdXJzaXZlKFxyXG4gIHVwZGF0ZUZuOiBQcm9qZWN0Rm4yPEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4+LFxyXG4gIC4uLnVwZGF0ZUZuQXJyOiBQcm9qZWN0Rm4yPEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4+W11cclxuKTogPFRWYWx1ZT4oc3RhdGU6IEFic3RyYWN0Q29udHJvbFN0YXRlPFRWYWx1ZT4pID0+IEZvcm1TdGF0ZTxUVmFsdWU+O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgdXBkYXRlIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIHVwZGF0ZSBmdW5jdGlvbnMgYW5kIHJldHVybnNcclxuICogYSBwcm9qZWN0aW9uIGZ1bmN0aW9uIHRoYXQgYXBwbGllcyBhbGwgdXBkYXRlIGZ1bmN0aW9ucyBvbmUgYWZ0ZXIgYW5vdGhlciB0b1xyXG4gKiBhIGZvcm0gc3RhdGUuXHJcbiAqXHJcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHRoaXMgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYWxsIGNvbnRyb2xzIGluIGFcclxuICogZ3JvdXAgYXMgcmVxdWlyZWQuXHJcbiAqXHJcbmBgYHR5cGVzY3JpcHRcclxuY29uc3QgdXBkYXRlRm4gPSB1cGRhdGVSZWN1cnNpdmUoW3ZhbGlkYXRlPGFueT4ocmVxdWlyZWQpXSk7XHJcbmNvbnN0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUZuKHN0YXRlKTtcclxuYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUmVjdXJzaXZlKFxyXG4gIHVwZGF0ZUZuQXJyOiBQcm9qZWN0Rm4yPEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4+W10sXHJcbik6IDxUVmFsdWU+KHN0YXRlOiBBYnN0cmFjdENvbnRyb2xTdGF0ZTxUVmFsdWU+KSA9PiBGb3JtU3RhdGU8VFZhbHVlPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVSZWN1cnNpdmU8VFZhbHVlPihcclxuICBzdGF0ZU9yRnVuY3Rpb25PckZ1bmN0aW9uQXJyYXk6XHJcbiAgICB8IEFic3RyYWN0Q29udHJvbFN0YXRlPFRWYWx1ZT5cclxuICAgIHwgUHJvamVjdEZuMjxBYnN0cmFjdENvbnRyb2xTdGF0ZTxhbnk+LCBBYnN0cmFjdENvbnRyb2xTdGF0ZTxhbnk+PlxyXG4gICAgfCBQcm9qZWN0Rm4yPEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4+W10sXHJcbiAgdXBkYXRlRm5PclVwZGF0ZUZuQXJyPzogUHJvamVjdEZuMjxBYnN0cmFjdENvbnRyb2xTdGF0ZTxhbnk+LCBBYnN0cmFjdENvbnRyb2xTdGF0ZTxhbnk+PiB8IFByb2plY3RGbjI8QWJzdHJhY3RDb250cm9sU3RhdGU8YW55PiwgQWJzdHJhY3RDb250cm9sU3RhdGU8YW55Pj5bXSxcclxuICAuLi5yZXN0OiBQcm9qZWN0Rm4yPEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4sIEFic3RyYWN0Q29udHJvbFN0YXRlPGFueT4+W11cclxuKSB7XHJcbiAgaWYgKGlzRm9ybVN0YXRlKHN0YXRlT3JGdW5jdGlvbk9yRnVuY3Rpb25BcnJheSkpIHtcclxuICAgIGNvbnN0IHVwZGF0ZUZuQXJyID0gQXJyYXkuaXNBcnJheSh1cGRhdGVGbk9yVXBkYXRlRm5BcnIpID8gdXBkYXRlRm5PclVwZGF0ZUZuQXJyIDogW3VwZGF0ZUZuT3JVcGRhdGVGbkFyciFdO1xyXG4gICAgcmV0dXJuIHVwZGF0ZUZuQXJyLmNvbmNhdCguLi5yZXN0KVxyXG4gICAgICAucmVkdWNlKChzLCB1cGRhdGVGbikgPT4gdXBkYXRlUmVjdXJzaXZlU2luZ2xlKHN0YXRlT3JGdW5jdGlvbk9yRnVuY3Rpb25BcnJheSwgdXBkYXRlRm4pKHMpLCBzdGF0ZU9yRnVuY3Rpb25PckZ1bmN0aW9uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgbGV0IHVwZGF0ZUZuQXJyID0gQXJyYXkuaXNBcnJheShzdGF0ZU9yRnVuY3Rpb25PckZ1bmN0aW9uQXJyYXkpID8gc3RhdGVPckZ1bmN0aW9uT3JGdW5jdGlvbkFycmF5IDogW3N0YXRlT3JGdW5jdGlvbk9yRnVuY3Rpb25BcnJheV07XHJcbiAgdXBkYXRlRm5BcnIgPSB1cGRhdGVGbk9yVXBkYXRlRm5BcnIgPT09IHVuZGVmaW5lZCA/IHVwZGF0ZUZuQXJyIDogdXBkYXRlRm5BcnIuY29uY2F0KHVwZGF0ZUZuT3JVcGRhdGVGbkFycik7XHJcbiAgcmV0dXJuIChzOiBBYnN0cmFjdENvbnRyb2xTdGF0ZTxUVmFsdWU+KSA9PiB1cGRhdGVSZWN1cnNpdmU8VFZhbHVlPihlbnN1cmVTdGF0ZShzKSwgdXBkYXRlRm5BcnIuY29uY2F0KHJlc3QpKTtcclxufVxyXG4iXX0=