ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
37 lines • 6.18 kB
JavaScript
import { SetValueAction } from '../../actions';
import { formStateReducer } from '../../reducer';
import { computeGroupState, 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 = Object.keys(value)
.reduce((c, key) => {
// tslint:disable-next-line:prefer-conditional-expression
if (!state.controls[key]) {
Object.assign(c, { [key]: createChildState(`${state.id}.${key}`, value[key]) });
}
else {
Object.assign(c, { [key]: formStateReducer(state.controls[key], new SetValueAction(state.controls[key].id, value[key])) });
}
return c;
}, {});
return computeGroupState(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyb3VwL3JlZHVjZXIvc2V0LXZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQStDLE1BQU0sYUFBYSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFdEMsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBNkIsRUFDN0IsTUFBdUI7SUFFdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7UUFDdkMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2pDLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQztJQUVELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztLQUMzRjtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFFM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDaEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQWlCLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakc7YUFBTTtZQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksY0FBYyxDQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFtQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMvSjtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxFQUFFLEVBQStCLENBQUMsQ0FBQztJQUV0QyxPQUFPLGlCQUFpQixDQUN0QixLQUFLLENBQUMsRUFBRSxFQUNSLFFBQVEsRUFDUixLQUFLLEVBQ0wsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyxxQkFBcUIsRUFDM0I7UUFDRSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsT0FBTztRQUNqQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUztRQUNyQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUztRQUNyQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsV0FBVztLQUMxQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9ucywgU2V0VmFsdWVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcclxuaW1wb3J0IHsgZm9ybVN0YXRlUmVkdWNlciB9IGZyb20gJy4uLy4uL3JlZHVjZXInO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2xTdGF0ZSwgY29tcHV0ZUdyb3VwU3RhdGUsIGNyZWF0ZUNoaWxkU3RhdGUsIEZvcm1Hcm91cENvbnRyb2xzLCBGb3JtR3JvdXBTdGF0ZSwgS2V5VmFsdWUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XHJcbmltcG9ydCB7IGNoaWxkUmVkdWNlciB9IGZyb20gJy4vdXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsdWVSZWR1Y2VyPFRWYWx1ZSBleHRlbmRzIEtleVZhbHVlPihcclxuICBzdGF0ZTogRm9ybUdyb3VwU3RhdGU8VFZhbHVlPixcclxuICBhY3Rpb246IEFjdGlvbnM8VFZhbHVlPixcclxuKTogRm9ybUdyb3VwU3RhdGU8VFZhbHVlPiB7XHJcbiAgaWYgKGFjdGlvbi50eXBlICE9PSBTZXRWYWx1ZUFjdGlvbi5UWVBFKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoYWN0aW9uLmNvbnRyb2xJZCAhPT0gc3RhdGUuaWQpIHtcclxuICAgIHJldHVybiBjaGlsZFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUudmFsdWUgPT09IGFjdGlvbi52YWx1ZSkge1xyXG4gICAgcmV0dXJuIHN0YXRlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGFjdGlvbi52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignRGF0ZSB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2VkIHNlcmlhbGl6ZWQgc3RyaW5ncyBpbnN0ZWFkLicpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdmFsdWUgPSBhY3Rpb24udmFsdWU7XHJcblxyXG4gIGNvbnN0IGNvbnRyb2xzID0gT2JqZWN0LmtleXModmFsdWUpXHJcbiAgICAucmVkdWNlKChjLCBrZXkpID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1jb25kaXRpb25hbC1leHByZXNzaW9uXHJcbiAgICAgIGlmICghc3RhdGUuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYywgeyBba2V5XTogY3JlYXRlQ2hpbGRTdGF0ZTxUVmFsdWVbc3RyaW5nXT4oYCR7c3RhdGUuaWR9LiR7a2V5fWAsIHZhbHVlW2tleV0pIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYywgeyBba2V5XTogZm9ybVN0YXRlUmVkdWNlcihzdGF0ZS5jb250cm9sc1trZXldLCBuZXcgU2V0VmFsdWVBY3Rpb24oKHN0YXRlLmNvbnRyb2xzW2tleV0gYXMgQWJzdHJhY3RDb250cm9sU3RhdGU8dW5rbm93bj4pLmlkLCB2YWx1ZVtrZXldKSkgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGM7XHJcbiAgICB9LCB7fSBhcyBGb3JtR3JvdXBDb250cm9sczxUVmFsdWU+KTtcclxuXHJcbiAgcmV0dXJuIGNvbXB1dGVHcm91cFN0YXRlKFxyXG4gICAgc3RhdGUuaWQsXHJcbiAgICBjb250cm9scyxcclxuICAgIHZhbHVlLFxyXG4gICAgc3RhdGUuZXJyb3JzLFxyXG4gICAgc3RhdGUucGVuZGluZ1ZhbGlkYXRpb25zLFxyXG4gICAgc3RhdGUudXNlckRlZmluZWRQcm9wZXJ0aWVzLFxyXG4gICAge1xyXG4gICAgICB3YXNPclNob3VsZEJlRGlydHk6IHN0YXRlLmlzRGlydHksXHJcbiAgICAgIHdhc09yU2hvdWxkQmVFbmFibGVkOiBzdGF0ZS5pc0VuYWJsZWQsXHJcbiAgICAgIHdhc09yU2hvdWxkQmVUb3VjaGVkOiBzdGF0ZS5pc1RvdWNoZWQsXHJcbiAgICAgIHdhc09yU2hvdWxkQmVTdWJtaXR0ZWQ6IHN0YXRlLmlzU3VibWl0dGVkLFxyXG4gICAgfSxcclxuICApO1xyXG59XHJcbiJdfQ==