UNPKG

ngrx-forms

Version:

Proper integration of forms in Angular 4 applications using ngrx

25 lines 5.16 kB
import { AddArrayControlAction } from '../../actions'; import { computeArrayState, createChildState } from '../../state'; import { childReducer, updateIdRecursive } from './util'; export function addControlReducer(state, action) { if (action.type !== AddArrayControlAction.TYPE) { return state; } if (action.controlId !== state.id) { return childReducer(state, action); } const index = action.index === undefined ? state.controls.length : action.index; if (index > state.controls.length || index < 0) { throw new Error(`Index ${index} is out of bounds for array '${state.id}' with length ${state.controls.length}!`); } let controls = [...state.controls]; controls.splice(index, 0, createChildState(`${state.id}.${index}`, action.value)); controls = controls.map((c, i) => updateIdRecursive(c, `${state.id}.${i}`)); return computeArrayState(state.id, controls, state.value, state.errors, state.pendingValidations, state.userDefinedProperties, { wasOrShouldBeDirty: true, wasOrShouldBeEnabled: state.isEnabled, wasOrShouldBeTouched: state.isTouched, wasOrShouldBeSubmitted: state.isSubmitted, }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXJyYXkvcmVkdWNlci9hZGQtY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUE2QixNQUFNLGFBQWEsQ0FBQztBQUM3RixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXpELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsS0FBNkIsRUFDN0IsTUFBeUI7SUFFekIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLElBQUksRUFBRTtRQUM5QyxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDakMsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWhGLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0NBQWdDLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDbEg7SUFFRCxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBc0IsQ0FBQyxDQUFDO0lBQ3ZHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUUsT0FBTyxpQkFBaUIsQ0FDdEIsS0FBSyxDQUFDLEVBQUUsRUFDUixRQUFRLEVBQ1IsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLHFCQUFxQixFQUMzQjtRQUNFLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLFdBQVc7S0FDMUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbnMsIEFkZEFycmF5Q29udHJvbEFjdGlvbiB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xyXG5pbXBvcnQgeyBjb21wdXRlQXJyYXlTdGF0ZSwgY3JlYXRlQ2hpbGRTdGF0ZSwgRm9ybUFycmF5U3RhdGUsIEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlJztcclxuaW1wb3J0IHsgY2hpbGRSZWR1Y2VyLCB1cGRhdGVJZFJlY3Vyc2l2ZSB9IGZyb20gJy4vdXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29udHJvbFJlZHVjZXI8VFZhbHVlPihcclxuICBzdGF0ZTogRm9ybUFycmF5U3RhdGU8VFZhbHVlPixcclxuICBhY3Rpb246IEFjdGlvbnM8VFZhbHVlW10+LFxyXG4pOiBGb3JtQXJyYXlTdGF0ZTxUVmFsdWU+IHtcclxuICBpZiAoYWN0aW9uLnR5cGUgIT09IEFkZEFycmF5Q29udHJvbEFjdGlvbi5UWVBFKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoYWN0aW9uLmNvbnRyb2xJZCAhPT0gc3RhdGUuaWQpIHtcclxuICAgIHJldHVybiBjaGlsZFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbmRleCA9IGFjdGlvbi5pbmRleCA9PT0gdW5kZWZpbmVkID8gc3RhdGUuY29udHJvbHMubGVuZ3RoIDogYWN0aW9uLmluZGV4O1xyXG5cclxuICBpZiAoaW5kZXggPiBzdGF0ZS5jb250cm9scy5sZW5ndGggfHwgaW5kZXggPCAwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGV4ICR7aW5kZXh9IGlzIG91dCBvZiBib3VuZHMgZm9yIGFycmF5ICcke3N0YXRlLmlkfScgd2l0aCBsZW5ndGggJHtzdGF0ZS5jb250cm9scy5sZW5ndGh9IWApO1xyXG4gIH1cclxuXHJcbiAgbGV0IGNvbnRyb2xzID0gWy4uLnN0YXRlLmNvbnRyb2xzXTtcclxuICBjb250cm9scy5zcGxpY2UoaW5kZXgsIDAsIGNyZWF0ZUNoaWxkU3RhdGUoYCR7c3RhdGUuaWR9LiR7aW5kZXh9YCwgYWN0aW9uLnZhbHVlKSBhcyBGb3JtU3RhdGU8VFZhbHVlPik7XHJcbiAgY29udHJvbHMgPSBjb250cm9scy5tYXAoKGMsIGkpID0+IHVwZGF0ZUlkUmVjdXJzaXZlKGMsIGAke3N0YXRlLmlkfS4ke2l9YCkpO1xyXG5cclxuICByZXR1cm4gY29tcHV0ZUFycmF5U3RhdGUoXHJcbiAgICBzdGF0ZS5pZCxcclxuICAgIGNvbnRyb2xzLFxyXG4gICAgc3RhdGUudmFsdWUsXHJcbiAgICBzdGF0ZS5lcnJvcnMsXHJcbiAgICBzdGF0ZS5wZW5kaW5nVmFsaWRhdGlvbnMsXHJcbiAgICBzdGF0ZS51c2VyRGVmaW5lZFByb3BlcnRpZXMsXHJcbiAgICB7XHJcbiAgICAgIHdhc09yU2hvdWxkQmVEaXJ0eTogdHJ1ZSxcclxuICAgICAgd2FzT3JTaG91bGRCZUVuYWJsZWQ6IHN0YXRlLmlzRW5hYmxlZCxcclxuICAgICAgd2FzT3JTaG91bGRCZVRvdWNoZWQ6IHN0YXRlLmlzVG91Y2hlZCxcclxuICAgICAgd2FzT3JTaG91bGRCZVN1Ym1pdHRlZDogc3RhdGUuaXNTdWJtaXR0ZWQsXHJcbiAgICB9LFxyXG4gICk7XHJcbn1cclxuIl19