ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
33 lines • 5.22 kB
JavaScript
import { SetValueAction } from '../../actions';
import { formStateReducer } from '../../reducer';
import { computeArrayState, createChildState } from '../../state';
import { childReducer } from './util';
export function setValueReducer(state, action) {
if (action.type !== SetValueAction.TYPE) {
return state;
}
if (action.controlId !== state.id) {
return childReducer(state, action);
}
if (state.value === action.value) {
return state;
}
if (action.value instanceof Date) {
throw new Error('Date values are not supported. Please used serialized strings instead.');
}
const value = action.value;
const controls = value
.map((v, i) => {
if (!state.controls[i]) {
return createChildState(`${state.id}.${i}`, v);
}
return formStateReducer(state.controls[i], new SetValueAction(state.controls[i].id, v));
});
return computeArrayState(state.id, controls, value, state.errors, state.pendingValidations, state.userDefinedProperties, {
wasOrShouldBeDirty: state.isDirty,
wasOrShouldBeEnabled: state.isEnabled,
wasOrShouldBeTouched: state.isTouched,
wasOrShouldBeSubmitted: state.isSubmitted,
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FycmF5L3JlZHVjZXIvc2V0LXZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSxhQUFhLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUE2QixFQUM3QixNQUF5QjtJQUV6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtRQUN2QyxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDakMsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDaEMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksTUFBTSxDQUFDLEtBQUssWUFBWSxJQUFJLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO0tBQzNGO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUUzQixNQUFNLFFBQVEsR0FBRyxLQUFLO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBUyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLGlCQUFpQixDQUN0QixLQUFLLENBQUMsRUFBRSxFQUNSLFFBQVEsRUFDUixLQUFLLEVBQ0wsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyxxQkFBcUIsRUFDM0I7UUFDRSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsT0FBTztRQUNqQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUztRQUNyQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUztRQUNyQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsV0FBVztLQUMxQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9ucywgU2V0VmFsdWVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcclxuaW1wb3J0IHsgZm9ybVN0YXRlUmVkdWNlciB9IGZyb20gJy4uLy4uL3JlZHVjZXInO1xyXG5pbXBvcnQgeyBjb21wdXRlQXJyYXlTdGF0ZSwgY3JlYXRlQ2hpbGRTdGF0ZSwgRm9ybUFycmF5U3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XHJcbmltcG9ydCB7IGNoaWxkUmVkdWNlciB9IGZyb20gJy4vdXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsdWVSZWR1Y2VyPFRWYWx1ZT4oXHJcbiAgc3RhdGU6IEZvcm1BcnJheVN0YXRlPFRWYWx1ZT4sXHJcbiAgYWN0aW9uOiBBY3Rpb25zPFRWYWx1ZVtdPixcclxuKTogRm9ybUFycmF5U3RhdGU8VFZhbHVlPiB7XHJcbiAgaWYgKGFjdGlvbi50eXBlICE9PSBTZXRWYWx1ZUFjdGlvbi5UWVBFKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoYWN0aW9uLmNvbnRyb2xJZCAhPT0gc3RhdGUuaWQpIHtcclxuICAgIHJldHVybiBjaGlsZFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUudmFsdWUgPT09IGFjdGlvbi52YWx1ZSkge1xyXG4gICAgcmV0dXJuIHN0YXRlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGFjdGlvbi52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignRGF0ZSB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2VkIHNlcmlhbGl6ZWQgc3RyaW5ncyBpbnN0ZWFkLicpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdmFsdWUgPSBhY3Rpb24udmFsdWU7XHJcblxyXG4gIGNvbnN0IGNvbnRyb2xzID0gdmFsdWVcclxuICAgIC5tYXAoKHYsIGkpID0+IHtcclxuICAgICAgaWYgKCFzdGF0ZS5jb250cm9sc1tpXSkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVDaGlsZFN0YXRlKGAke3N0YXRlLmlkfS4ke2l9YCwgdik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmb3JtU3RhdGVSZWR1Y2VyPFRWYWx1ZT4oc3RhdGUuY29udHJvbHNbaV0sIG5ldyBTZXRWYWx1ZUFjdGlvbihzdGF0ZS5jb250cm9sc1tpXS5pZCwgdikpO1xyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiBjb21wdXRlQXJyYXlTdGF0ZShcclxuICAgIHN0YXRlLmlkLFxyXG4gICAgY29udHJvbHMsXHJcbiAgICB2YWx1ZSxcclxuICAgIHN0YXRlLmVycm9ycyxcclxuICAgIHN0YXRlLnBlbmRpbmdWYWxpZGF0aW9ucyxcclxuICAgIHN0YXRlLnVzZXJEZWZpbmVkUHJvcGVydGllcyxcclxuICAgIHtcclxuICAgICAgd2FzT3JTaG91bGRCZURpcnR5OiBzdGF0ZS5pc0RpcnR5LFxyXG4gICAgICB3YXNPclNob3VsZEJlRW5hYmxlZDogc3RhdGUuaXNFbmFibGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlVG91Y2hlZDogc3RhdGUuaXNUb3VjaGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlU3VibWl0dGVkOiBzdGF0ZS5pc1N1Ym1pdHRlZCxcclxuICAgIH0sXHJcbiAgKTtcclxufVxyXG4iXX0=