UNPKG

ngrx-forms

Version:

Proper integration of forms in Angular 4 applications using ngrx

58 lines 9.82 kB
import { formStateReducer } from '../../reducer'; import { computeArrayState, isArrayState, isGroupState } from '../../state'; export function dispatchActionPerChild(controls, actionCreator) { let hasChanged = false; const newControls = controls .map(state => { const newState = formStateReducer(state, actionCreator(state.id)); hasChanged = hasChanged || state !== newState; return newState; }); return hasChanged ? newControls : controls; } function callChildReducers(controls, action) { let hasChanged = false; const newControls = controls .map(state => { const newState = formStateReducer(state, action); hasChanged = hasChanged || state !== newState; return newState; }); return hasChanged ? newControls : controls; } export function childReducer(state, action) { const controls = callChildReducers(state.controls, action); if (state.controls === controls) { return state; } return computeArrayState(state.id, controls, state.value, state.errors, state.pendingValidations, state.userDefinedProperties, { wasOrShouldBeDirty: state.isDirty, wasOrShouldBeEnabled: state.isEnabled, wasOrShouldBeTouched: state.isTouched, wasOrShouldBeSubmitted: state.isSubmitted, }); } export function updateIdRecursiveForGroup(state, newId) { const controls = Object.keys(state.controls) .reduce((agg, key) => Object.assign(agg, { [key]: updateIdRecursive(state.controls[key], `${newId}.${key}`), }), {}); return Object.assign(Object.assign({}, state), { id: newId, controls }); } export function updateIdRecursiveForArray(state, newId) { const controls = state.controls.map((c, i) => updateIdRecursive(c, `${newId}.${i}`)); return Object.assign(Object.assign({}, state), { id: newId, controls }); } export function updateIdRecursive(state, newId) { if (state.id === newId) { return state; } if (isGroupState(state)) { return updateIdRecursiveForGroup(state, newId); } if (isArrayState(state)) { return updateIdRecursiveForArray(state, newId); } return Object.assign(Object.assign({}, state), { id: newId }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcnJheS9yZWR1Y2VyL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBZ0UsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxSSxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFFBQXNDLEVBQ3RDLGFBQXFEO0lBRXJELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixNQUFNLFdBQVcsR0FBRyxRQUFRO1NBQ3pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFTLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsVUFBVSxHQUFHLFVBQVUsSUFBSSxLQUFLLEtBQUssUUFBUSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixRQUFzQyxFQUN0QyxNQUF5QjtJQUV6QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxXQUFXLEdBQUcsUUFBUTtTQUN6QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDWCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBUyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsVUFBVSxHQUFHLFVBQVUsSUFBSSxLQUFLLEtBQUssUUFBUSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFTLEtBQTZCLEVBQUUsTUFBeUI7SUFDM0YsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLGlCQUFpQixDQUN0QixLQUFLLENBQUMsRUFBRSxFQUNSLFFBQVEsRUFDUixLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLGtCQUFrQixFQUN4QixLQUFLLENBQUMscUJBQXFCLEVBQzNCO1FBQ0Usa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDakMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLFdBQVc7S0FDMUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBUyxLQUE2QixFQUFFLEtBQWE7SUFDNUYsTUFBTSxRQUFRLEdBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQ3hCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3ZDLENBQUMsR0FBRyxDQUFDLEVBQUUsaUJBQWlCLENBQXVCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBbUIsQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQ3ZHLENBQUMsRUFBRSxFQUErQixDQUFDLENBQUM7SUFFekMsdUNBQ0ssS0FBSyxLQUNSLEVBQUUsRUFBRSxLQUFLLEVBQ1QsUUFBUSxJQUNSO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBUyxLQUE2QixFQUFFLEtBQWE7SUFDNUYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJGLHVDQUNLLEtBQUssS0FDUixFQUFFLEVBQUUsS0FBSyxFQUNULFFBQVEsSUFDUjtBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQVMsS0FBd0IsRUFBRSxLQUFhO0lBQy9FLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksWUFBWSxDQUFTLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE9BQU8seUJBQXlCLENBQVMsS0FBSyxFQUFFLEtBQUssQ0FBc0IsQ0FBQztLQUM3RTtJQUVELElBQUksWUFBWSxDQUFTLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE9BQU8seUJBQXlCLENBQVMsS0FBSyxFQUFFLEtBQUssQ0FBUSxDQUFDO0tBQy9EO0lBRUQsdUNBQ00sS0FBYSxLQUNqQixFQUFFLEVBQUUsS0FBSyxJQUNUO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbnMgfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcclxuaW1wb3J0IHsgZm9ybVN0YXRlUmVkdWNlciB9IGZyb20gJy4uLy4uL3JlZHVjZXInO1xyXG5pbXBvcnQgeyBjb21wdXRlQXJyYXlTdGF0ZSwgRm9ybUFycmF5U3RhdGUsIEZvcm1Hcm91cENvbnRyb2xzLCBGb3JtR3JvdXBTdGF0ZSwgRm9ybVN0YXRlLCBpc0FycmF5U3RhdGUsIGlzR3JvdXBTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEFjdGlvblBlckNoaWxkPFRWYWx1ZT4oXHJcbiAgY29udHJvbHM6IHJlYWRvbmx5IEZvcm1TdGF0ZTxUVmFsdWU+W10sXHJcbiAgYWN0aW9uQ3JlYXRvcjogKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBBY3Rpb25zPFRWYWx1ZT4sXHJcbik6IHJlYWRvbmx5IEZvcm1TdGF0ZTxUVmFsdWU+W10ge1xyXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgY29uc3QgbmV3Q29udHJvbHMgPSBjb250cm9sc1xyXG4gICAgLm1hcChzdGF0ZSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gZm9ybVN0YXRlUmVkdWNlcjxUVmFsdWU+KHN0YXRlLCBhY3Rpb25DcmVhdG9yKHN0YXRlLmlkKSk7XHJcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IHN0YXRlICE9PSBuZXdTdGF0ZTtcclxuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiBoYXNDaGFuZ2VkID8gbmV3Q29udHJvbHMgOiBjb250cm9scztcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsbENoaWxkUmVkdWNlcnM8VFZhbHVlPihcclxuICBjb250cm9sczogcmVhZG9ubHkgRm9ybVN0YXRlPFRWYWx1ZT5bXSxcclxuICBhY3Rpb246IEFjdGlvbnM8VFZhbHVlW10+LFxyXG4pOiByZWFkb25seSBGb3JtU3RhdGU8VFZhbHVlPltdIHtcclxuICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIGNvbnN0IG5ld0NvbnRyb2xzID0gY29udHJvbHNcclxuICAgIC5tYXAoc3RhdGUgPT4ge1xyXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IGZvcm1TdGF0ZVJlZHVjZXI8VFZhbHVlPihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgc3RhdGUgIT09IG5ld1N0YXRlO1xyXG4gICAgICByZXR1cm4gbmV3U3RhdGU7XHJcbiAgICB9KTtcclxuXHJcbiAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXdDb250cm9scyA6IGNvbnRyb2xzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRSZWR1Y2VyPFRWYWx1ZT4oc3RhdGU6IEZvcm1BcnJheVN0YXRlPFRWYWx1ZT4sIGFjdGlvbjogQWN0aW9uczxUVmFsdWVbXT4pIHtcclxuICBjb25zdCBjb250cm9scyA9IGNhbGxDaGlsZFJlZHVjZXJzKHN0YXRlLmNvbnRyb2xzLCBhY3Rpb24pO1xyXG5cclxuICBpZiAoc3RhdGUuY29udHJvbHMgPT09IGNvbnRyb2xzKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29tcHV0ZUFycmF5U3RhdGUoXHJcbiAgICBzdGF0ZS5pZCxcclxuICAgIGNvbnRyb2xzLFxyXG4gICAgc3RhdGUudmFsdWUsXHJcbiAgICBzdGF0ZS5lcnJvcnMsXHJcbiAgICBzdGF0ZS5wZW5kaW5nVmFsaWRhdGlvbnMsXHJcbiAgICBzdGF0ZS51c2VyRGVmaW5lZFByb3BlcnRpZXMsXHJcbiAgICB7XHJcbiAgICAgIHdhc09yU2hvdWxkQmVEaXJ0eTogc3RhdGUuaXNEaXJ0eSxcclxuICAgICAgd2FzT3JTaG91bGRCZUVuYWJsZWQ6IHN0YXRlLmlzRW5hYmxlZCxcclxuICAgICAgd2FzT3JTaG91bGRCZVRvdWNoZWQ6IHN0YXRlLmlzVG91Y2hlZCxcclxuICAgICAgd2FzT3JTaG91bGRCZVN1Ym1pdHRlZDogc3RhdGUuaXNTdWJtaXR0ZWQsXHJcbiAgICB9LFxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJZFJlY3Vyc2l2ZUZvckdyb3VwPFRWYWx1ZT4oc3RhdGU6IEZvcm1Hcm91cFN0YXRlPFRWYWx1ZT4sIG5ld0lkOiBzdHJpbmcpOiBGb3JtR3JvdXBTdGF0ZTxUVmFsdWU+IHtcclxuICBjb25zdCBjb250cm9sczogRm9ybUdyb3VwQ29udHJvbHM8VFZhbHVlPiA9XHJcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5jb250cm9scylcclxuICAgICAgLnJlZHVjZSgoYWdnLCBrZXkpID0+IE9iamVjdC5hc3NpZ24oYWdnLCB7XHJcbiAgICAgICAgW2tleV06IHVwZGF0ZUlkUmVjdXJzaXZlPFRWYWx1ZVtrZXlvZiBUVmFsdWVdPihzdGF0ZS5jb250cm9sc1trZXkgYXMga2V5b2YgVFZhbHVlXSwgYCR7bmV3SWR9LiR7a2V5fWApLFxyXG4gICAgICB9KSwge30gYXMgRm9ybUdyb3VwQ29udHJvbHM8VFZhbHVlPik7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGlkOiBuZXdJZCxcclxuICAgIGNvbnRyb2xzLFxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJZFJlY3Vyc2l2ZUZvckFycmF5PFRWYWx1ZT4oc3RhdGU6IEZvcm1BcnJheVN0YXRlPFRWYWx1ZT4sIG5ld0lkOiBzdHJpbmcpOiBGb3JtQXJyYXlTdGF0ZTxUVmFsdWU+IHtcclxuICBjb25zdCBjb250cm9scyA9IHN0YXRlLmNvbnRyb2xzLm1hcCgoYywgaSkgPT4gdXBkYXRlSWRSZWN1cnNpdmUoYywgYCR7bmV3SWR9LiR7aX1gKSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGlkOiBuZXdJZCxcclxuICAgIGNvbnRyb2xzLFxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJZFJlY3Vyc2l2ZTxUVmFsdWU+KHN0YXRlOiBGb3JtU3RhdGU8VFZhbHVlPiwgbmV3SWQ6IHN0cmluZyk6IEZvcm1TdGF0ZTxUVmFsdWU+IHtcclxuICBpZiAoc3RhdGUuaWQgPT09IG5ld0lkKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoaXNHcm91cFN0YXRlPFRWYWx1ZT4oc3RhdGUpKSB7XHJcbiAgICByZXR1cm4gdXBkYXRlSWRSZWN1cnNpdmVGb3JHcm91cDxUVmFsdWU+KHN0YXRlLCBuZXdJZCkgYXMgRm9ybVN0YXRlPFRWYWx1ZT47XHJcbiAgfVxyXG5cclxuICBpZiAoaXNBcnJheVN0YXRlPFRWYWx1ZT4oc3RhdGUpKSB7XHJcbiAgICByZXR1cm4gdXBkYXRlSWRSZWN1cnNpdmVGb3JBcnJheTxUVmFsdWU+KHN0YXRlLCBuZXdJZCkgYXMgYW55O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLihzdGF0ZSBhcyBhbnkpLFxyXG4gICAgaWQ6IG5ld0lkLFxyXG4gIH07XHJcbn1cclxuIl19