UNPKG

ngrx-forms

Version:

Proper integration of forms in Angular 4 applications using ngrx

41 lines 7.47 kB
import { SetErrorsAction } from '../../actions'; import { computeArrayState } from '../../state'; import { deepEquals } from '../../util'; import { childReducer } from './util'; export function setErrorsReducer(state, action) { if (action.type !== SetErrorsAction.TYPE) { return state; } if (action.controlId !== state.id) { return childReducer(state, action); } if (state.isDisabled) { return state; } if (state.errors === action.errors) { return state; } if (deepEquals(state.errors, action.errors)) { return state; } if (!action.errors || typeof action.errors !== 'object' || Array.isArray(action.errors)) { throw new Error(`Control errors must be an object; got ${action.errors}`); } if (Object.keys(action.errors).some(key => key.startsWith('_'))) { throw new Error(`Control errors must not use underscore as a prefix; got ${JSON.stringify(action.errors)}`); } if (Object.keys(action.errors).some(key => key.startsWith('$'))) { throw new Error(`Control errors must not use $ as a prefix; got ${JSON.stringify(action.errors)}`); } const childAndAsyncErrors = Object.keys(state.errors) .filter(key => key.startsWith('_') || key.startsWith('$')) .reduce((res, key) => Object.assign(res, { [key]: state.errors[key] }), {}); const newErrors = Object.assign(childAndAsyncErrors, action.errors); return computeArrayState(state.id, state.controls, state.value, newErrors, state.pendingValidations, state.userDefinedProperties, { wasOrShouldBeDirty: state.isDirty, wasOrShouldBeEnabled: state.isEnabled, wasOrShouldBeTouched: state.isTouched, wasOrShouldBeSubmitted: state.isSubmitted, }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcnJheS9yZWR1Y2VyL3NldC1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQW9DLE1BQU0sYUFBYSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEtBQTZCLEVBQzdCLE1BQXlCO0lBRXpCLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUNqQyxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDcEM7SUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFDcEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzQyxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksT0FBUSxNQUFNLENBQUMsTUFBYyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNoRyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUMzRTtJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM3RztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNwRztJQUVELE1BQU0sbUJBQW1CLEdBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQXNCLENBQUMsQ0FBQztJQUVwRyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRSxPQUFPLGlCQUFpQixDQUN0QixLQUFLLENBQUMsRUFBRSxFQUNSLEtBQUssQ0FBQyxRQUFRLEVBQ2QsS0FBSyxDQUFDLEtBQUssRUFDWCxTQUFTLEVBQ1QsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixLQUFLLENBQUMscUJBQXFCLEVBQzNCO1FBQ0Usa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDakMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDckMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLFdBQVc7S0FDMUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbnMsIFNldEVycm9yc0FjdGlvbiB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xyXG5pbXBvcnQgeyBjb21wdXRlQXJyYXlTdGF0ZSwgRm9ybUFycmF5U3RhdGUsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XHJcbmltcG9ydCB7IGRlZXBFcXVhbHMgfSBmcm9tICcuLi8uLi91dGlsJztcclxuaW1wb3J0IHsgY2hpbGRSZWR1Y2VyIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNSZWR1Y2VyPFRWYWx1ZT4oXHJcbiAgc3RhdGU6IEZvcm1BcnJheVN0YXRlPFRWYWx1ZT4sXHJcbiAgYWN0aW9uOiBBY3Rpb25zPFRWYWx1ZVtdPixcclxuKTogRm9ybUFycmF5U3RhdGU8VFZhbHVlPiB7XHJcbiAgaWYgKGFjdGlvbi50eXBlICE9PSBTZXRFcnJvcnNBY3Rpb24uVFlQRSkge1xyXG4gICAgcmV0dXJuIHN0YXRlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGFjdGlvbi5jb250cm9sSWQgIT09IHN0YXRlLmlkKSB7XHJcbiAgICByZXR1cm4gY2hpbGRSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLmlzRGlzYWJsZWQpIHtcclxuICAgIHJldHVybiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZS5lcnJvcnMgPT09IGFjdGlvbi5lcnJvcnMpIHtcclxuICAgIHJldHVybiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGlmIChkZWVwRXF1YWxzKHN0YXRlLmVycm9ycywgYWN0aW9uLmVycm9ycykpIHtcclxuICAgIHJldHVybiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGlmICghYWN0aW9uLmVycm9ycyB8fCB0eXBlb2YgKGFjdGlvbi5lcnJvcnMgYXMgYW55KSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24uZXJyb3JzKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb250cm9sIGVycm9ycyBtdXN0IGJlIGFuIG9iamVjdDsgZ290ICR7YWN0aW9uLmVycm9yc31gKTtcclxuICB9XHJcblxyXG4gIGlmIChPYmplY3Qua2V5cyhhY3Rpb24uZXJyb3JzKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnXycpKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb250cm9sIGVycm9ycyBtdXN0IG5vdCB1c2UgdW5kZXJzY29yZSBhcyBhIHByZWZpeDsgZ290ICR7SlNPTi5zdHJpbmdpZnkoYWN0aW9uLmVycm9ycyl9YCk7XHJcbiAgfVxyXG5cclxuICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uLmVycm9ycykuc29tZShrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJyQnKSkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgQ29udHJvbCBlcnJvcnMgbXVzdCBub3QgdXNlICQgYXMgYSBwcmVmaXg7IGdvdCAke0pTT04uc3RyaW5naWZ5KGFjdGlvbi5lcnJvcnMpfWApO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY2hpbGRBbmRBc3luY0Vycm9ycyA9XHJcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lcnJvcnMpXHJcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdfJykgfHwga2V5LnN0YXJ0c1dpdGgoJyQnKSlcclxuICAgICAgLnJlZHVjZSgocmVzLCBrZXkpID0+IE9iamVjdC5hc3NpZ24ocmVzLCB7IFtrZXldOiBzdGF0ZS5lcnJvcnNba2V5XSB9KSwge30gYXMgVmFsaWRhdGlvbkVycm9ycyk7XHJcblxyXG4gIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oY2hpbGRBbmRBc3luY0Vycm9ycywgYWN0aW9uLmVycm9ycyk7XHJcblxyXG4gIHJldHVybiBjb21wdXRlQXJyYXlTdGF0ZShcclxuICAgIHN0YXRlLmlkLFxyXG4gICAgc3RhdGUuY29udHJvbHMsXHJcbiAgICBzdGF0ZS52YWx1ZSxcclxuICAgIG5ld0Vycm9ycyxcclxuICAgIHN0YXRlLnBlbmRpbmdWYWxpZGF0aW9ucyxcclxuICAgIHN0YXRlLnVzZXJEZWZpbmVkUHJvcGVydGllcyxcclxuICAgIHtcclxuICAgICAgd2FzT3JTaG91bGRCZURpcnR5OiBzdGF0ZS5pc0RpcnR5LFxyXG4gICAgICB3YXNPclNob3VsZEJlRW5hYmxlZDogc3RhdGUuaXNFbmFibGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlVG91Y2hlZDogc3RhdGUuaXNUb3VjaGVkLFxyXG4gICAgICB3YXNPclNob3VsZEJlU3VibWl0dGVkOiBzdGF0ZS5pc1N1Ym1pdHRlZCxcclxuICAgIH0sXHJcbiAgKTtcclxufVxyXG4iXX0=