ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
35 lines • 6.7 kB
JavaScript
import { formStateReducer } from '../../reducer';
import { computeGroupState } from '../../state';
export function dispatchActionPerChild(controls, actionCreator) {
let hasChanged = false;
const newControls = Object.keys(controls)
.reduce((c, key) => {
Object.assign(c, { [key]: formStateReducer(controls[key], actionCreator(controls[key].id)) });
hasChanged = hasChanged || c[key] !== controls[key];
return c;
}, {});
return hasChanged ? newControls : controls;
}
function callChildReducers(controls, action) {
let hasChanged = false;
const newControls = Object.keys(controls)
.map(key => [key, formStateReducer(controls[key], action)])
.reduce((res, [key, state]) => {
hasChanged = hasChanged || state !== controls[key];
return Object.assign(res, { [key]: state });
}, {});
return hasChanged ? newControls : controls;
}
export function childReducer(state, action) {
const controls = callChildReducers(state.controls, action);
if (state.controls === controls) {
return state;
}
return computeGroupState(state.id, controls, state.value, state.errors, state.pendingValidations, state.userDefinedProperties, {
wasOrShouldBeDirty: state.isDirty,
wasOrShouldBeEnabled: state.isEnabled,
wasOrShouldBeTouched: state.isTouched,
wasOrShouldBeSubmitted: state.isSubmitted,
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncm91cC9yZWR1Y2VyL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBd0IsaUJBQWlCLEVBQTBELE1BQU0sYUFBYSxDQUFDO0FBRTlILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsUUFBbUMsRUFDbkMsYUFBcUQ7SUFFckQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBRSxRQUFRLENBQUMsR0FBRyxDQUFtQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pJLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsRUFBRSxFQUErQixDQUFDLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixRQUFtQyxFQUNuQyxNQUF1QjtJQUV2QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUE2QixDQUFDO1NBQ3RGLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzVCLFVBQVUsR0FBRyxVQUFVLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsRUFBRSxFQUErQixDQUFDLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUEwQixLQUE2QixFQUFFLE1BQXVCO0lBQzFHLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxpQkFBaUIsQ0FDdEIsS0FBSyxDQUFDLEVBQUUsRUFDUixRQUFRLEVBQ1IsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLHFCQUFxQixFQUMzQjtRQUNFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ2pDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQ3JDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQ3JDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxXQUFXO0tBQzFDLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XHJcbmltcG9ydCB7IGZvcm1TdGF0ZVJlZHVjZXIgfSBmcm9tICcuLi8uLi9yZWR1Y2VyJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sU3RhdGUsIGNvbXB1dGVHcm91cFN0YXRlLCBGb3JtR3JvdXBDb250cm9scywgRm9ybUdyb3VwU3RhdGUsIEZvcm1TdGF0ZSwgS2V5VmFsdWUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb25QZXJDaGlsZDxUVmFsdWUgZXh0ZW5kcyBLZXlWYWx1ZT4oXHJcbiAgY29udHJvbHM6IEZvcm1Hcm91cENvbnRyb2xzPFRWYWx1ZT4sXHJcbiAgYWN0aW9uQ3JlYXRvcjogKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBBY3Rpb25zPFRWYWx1ZT4sXHJcbikge1xyXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgY29uc3QgbmV3Q29udHJvbHMgPSBPYmplY3Qua2V5cyhjb250cm9scylcclxuICAgIC5yZWR1Y2UoKGMsIGtleSkgPT4ge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGMsIHsgW2tleV06IGZvcm1TdGF0ZVJlZHVjZXIoY29udHJvbHNba2V5XSwgYWN0aW9uQ3JlYXRvcigoY29udHJvbHNba2V5XSBhcyBBYnN0cmFjdENvbnRyb2xTdGF0ZTx1bmtub3duPikuaWQpKSB9KTtcclxuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgY1trZXldICE9PSBjb250cm9sc1trZXldO1xyXG4gICAgICByZXR1cm4gYztcclxuICAgIH0sIHt9IGFzIEZvcm1Hcm91cENvbnRyb2xzPFRWYWx1ZT4pO1xyXG4gIHJldHVybiBoYXNDaGFuZ2VkID8gbmV3Q29udHJvbHMgOiBjb250cm9scztcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsbENoaWxkUmVkdWNlcnM8VFZhbHVlIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT4oXHJcbiAgY29udHJvbHM6IEZvcm1Hcm91cENvbnRyb2xzPFRWYWx1ZT4sXHJcbiAgYWN0aW9uOiBBY3Rpb25zPFRWYWx1ZT4sXHJcbik6IEZvcm1Hcm91cENvbnRyb2xzPFRWYWx1ZT4ge1xyXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgY29uc3QgbmV3Q29udHJvbHMgPSBPYmplY3Qua2V5cyhjb250cm9scylcclxuICAgIC5tYXAoa2V5ID0+IFtrZXksIGZvcm1TdGF0ZVJlZHVjZXIoY29udHJvbHNba2V5XSwgYWN0aW9uKV0gYXMgW3N0cmluZywgRm9ybVN0YXRlPGFueT5dKVxyXG4gICAgLnJlZHVjZSgocmVzLCBba2V5LCBzdGF0ZV0pID0+IHtcclxuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgc3RhdGUgIT09IGNvbnRyb2xzW2tleV07XHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlcywgeyBba2V5XTogc3RhdGUgfSk7XHJcbiAgICB9LCB7fSBhcyBGb3JtR3JvdXBDb250cm9sczxUVmFsdWU+KTtcclxuICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5ld0NvbnRyb2xzIDogY29udHJvbHM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGlsZFJlZHVjZXI8VFZhbHVlIGV4dGVuZHMgS2V5VmFsdWU+KHN0YXRlOiBGb3JtR3JvdXBTdGF0ZTxUVmFsdWU+LCBhY3Rpb246IEFjdGlvbnM8VFZhbHVlPikge1xyXG4gIGNvbnN0IGNvbnRyb2xzID0gY2FsbENoaWxkUmVkdWNlcnMoc3RhdGUuY29udHJvbHMsIGFjdGlvbik7XHJcblxyXG4gIGlmIChzdGF0ZS5jb250cm9scyA9PT0gY29udHJvbHMpIHtcclxuICAgIHJldHVybiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb21wdXRlR3JvdXBTdGF0ZShcclxuICAgIHN0YXRlLmlkLFxyXG4gICAgY29udHJvbHMsXHJcbiAgICBzdGF0ZS52YWx1ZSxcclxuICAgIHN0YXRlLmVycm9ycyxcclxuICAgIHN0YXRlLnBlbmRpbmdWYWxpZGF0aW9ucyxcclxuICAgIHN0YXRlLnVzZXJEZWZpbmVkUHJvcGVydGllcyxcclxuICAgIHtcclxuICAgICAgd2FzT3JTaG91bGRCZURpcnR5OiBzdGF0ZS5pc0RpcnR5LFxyXG4gICAgICB3YXNPclNob3VsZEJlRW5hYmxlZDogc3RhdGUuaXNFbmFibGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlVG91Y2hlZDogc3RhdGUuaXNUb3VjaGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlU3VibWl0dGVkOiBzdGF0ZS5pc1N1Ym1pdHRlZCxcclxuICAgIH0sXHJcbiAgKTtcclxufVxyXG4iXX0=