UNPKG

ngrx-forms

Version:

Proper integration of forms in Angular 4 applications using ngrx

29 lines 5.54 kB
import { SetErrorsAction } from '../../actions'; import { deepEquals, isEmpty } from '../../util'; export function setErrorsReducer(state, action) { if (action.type !== SetErrorsAction.TYPE) { return state; } 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 $ as a prefix; got ${JSON.stringify(action.errors)}`); // `; } const asyncErrors = Object.keys(state.errors) .filter(key => key.startsWith('$')) .reduce((res, key) => Object.assign(res, { [key]: state.errors[key] }), {}); const newErrors = isEmpty(asyncErrors) ? action.errors : Object.assign(asyncErrors, action.errors); const isValid = isEmpty(newErrors); return Object.assign(Object.assign({}, state), { isValid, isInvalid: !isValid, errors: newErrors }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb250cm9sL3JlZHVjZXIvc2V0LWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBK0IsRUFDL0IsTUFBdUI7SUFFdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7UUFDeEMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUNwQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDbEMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzNDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFRLE1BQU0sQ0FBQyxNQUFjLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2hHLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSztLQUNqRjtJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUs7S0FDMUc7SUFFRCxNQUFNLFdBQVcsR0FDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBc0IsQ0FBQyxDQUFDO0lBRXBHLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25HLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVuQyx1Q0FDSyxLQUFLLEtBQ1IsT0FBTyxFQUNQLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFDbkIsTUFBTSxFQUFFLFNBQVMsSUFDakI7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9ucywgU2V0RXJyb3JzQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdGUsIEZvcm1Db250cm9sVmFsdWVUeXBlcywgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4uLy4uL3N0YXRlJztcclxuaW1wb3J0IHsgZGVlcEVxdWFscywgaXNFbXB0eSB9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yc1JlZHVjZXI8VFZhbHVlIGV4dGVuZHMgRm9ybUNvbnRyb2xWYWx1ZVR5cGVzPihcclxuICBzdGF0ZTogRm9ybUNvbnRyb2xTdGF0ZTxUVmFsdWU+LFxyXG4gIGFjdGlvbjogQWN0aW9uczxUVmFsdWU+LFxyXG4pOiBGb3JtQ29udHJvbFN0YXRlPFRWYWx1ZT4ge1xyXG4gIGlmIChhY3Rpb24udHlwZSAhPT0gU2V0RXJyb3JzQWN0aW9uLlRZUEUpIHtcclxuICAgIHJldHVybiBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZS5pc0Rpc2FibGVkKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUuZXJyb3JzID09PSBhY3Rpb24uZXJyb3JzKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoZGVlcEVxdWFscyhzdGF0ZS5lcnJvcnMsIGFjdGlvbi5lcnJvcnMpKSB7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBpZiAoIWFjdGlvbi5lcnJvcnMgfHwgdHlwZW9mIChhY3Rpb24uZXJyb3JzIGFzIGFueSkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLmVycm9ycykpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgQ29udHJvbCBlcnJvcnMgbXVzdCBiZSBhbiBvYmplY3Q7IGdvdCAke2FjdGlvbi5lcnJvcnN9YCk7IC8vIGA7XHJcbiAgfVxyXG5cclxuICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uLmVycm9ycykuc29tZShrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJyQnKSkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgQ29udHJvbCBlcnJvcnMgbXVzdCBub3QgdXNlICQgYXMgYSBwcmVmaXg7IGdvdCAke0pTT04uc3RyaW5naWZ5KGFjdGlvbi5lcnJvcnMpfWApOyAvLyBgO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYXN5bmNFcnJvcnMgPVxyXG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZXJyb3JzKVxyXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnJCcpKVxyXG4gICAgICAucmVkdWNlKChyZXMsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihyZXMsIHsgW2tleV06IHN0YXRlLmVycm9yc1trZXldIH0pLCB7fSBhcyBWYWxpZGF0aW9uRXJyb3JzKTtcclxuXHJcbiAgY29uc3QgbmV3RXJyb3JzID0gaXNFbXB0eShhc3luY0Vycm9ycykgPyBhY3Rpb24uZXJyb3JzIDogT2JqZWN0LmFzc2lnbihhc3luY0Vycm9ycywgYWN0aW9uLmVycm9ycyk7XHJcbiAgY29uc3QgaXNWYWxpZCA9IGlzRW1wdHkobmV3RXJyb3JzKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgaXNWYWxpZCxcclxuICAgIGlzSW52YWxpZDogIWlzVmFsaWQsXHJcbiAgICBlcnJvcnM6IG5ld0Vycm9ycyxcclxuICB9O1xyXG59XHJcbiJdfQ==