ng-fveh
Version:
NG-FVEH - Some helpers to help you with form validation :)
92 lines (91 loc) • 7.28 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @record
*/
function FormControls() { }
function FormControls_tsickle_Closure_declarations() {
/* TODO: handle strange member:
[key: string]: FormControl;
*/
}
/**
* @param {?} errors
* @param {?} control
* @return {?}
*/
function setErrors(errors, control) {
if (Object.keys(errors).length) {
control.setErrors(errors);
}
else {
control.setErrors(null);
}
}
/**
* @param {?} error
* @param {?} controls
* @return {?}
*/
function setErrorOnFields(error, controls) {
Object.keys(controls).forEach(controlName => {
const /** @type {?} */ errors = Object.assign({}, controls[controlName].errors, error);
setErrors(errors, controls[controlName]);
});
}
/**
* @param {?} fieldErrorName
* @param {?} controls
* @return {?}
*/
function clearErrorOnFields(fieldErrorName, controls) {
Object.keys(controls).forEach(controlName => {
const /** @type {?} */ errors = controls[controlName].errors;
if (errors) {
delete errors[fieldErrorName];
setErrors(errors, controls[controlName]);
}
});
}
/**
* @param {?} friendlyFieldNames
* @return {?}
*/
function createGroupMatchError(friendlyFieldNames) {
return {
fvehGroupMatch: {
fields: friendlyFieldNames,
},
};
}
/**
* @param {?} controlValues
* @return {?}
*/
function validateIfValuesMatch(controlValues) {
const [firstField, ...otherFields] = Object.keys(controlValues);
const /** @type {?} */ isValid = otherFields.every(currentValue => controlValues[firstField] === controlValues[currentValue]);
return isValid;
}
/**
* @param {?} friendlyFieldNames
* @return {?}
*/
export function groupMatch(friendlyFieldNames) {
return ({ value, touched, pristine, controls }) => {
const /** @type {?} */ error = createGroupMatchError(friendlyFieldNames);
const /** @type {?} */ isGroupMatching = validateIfValuesMatch(value);
if (pristine) {
return null;
}
if (touched && isGroupMatching) {
clearErrorOnFields('fvehGroupMatch', controls);
return null;
}
setErrorOnFields(error, controls);
return error;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtbWF0Y2gudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZnZlaC8iLCJzb3VyY2VzIjpbImxpYi92YWxpZGF0b3JzL2dyb3VwLW1hdGNoLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxtQkFBbUIsTUFBVyxFQUFFLE9BQW9CO0lBQ2xELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQjtTQUFNO1FBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QjtDQUNGOzs7Ozs7QUFFRCwwQkFBMEIsS0FBZ0IsRUFBRSxRQUFzQjtJQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMxQyx1QkFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQzFDLENBQUMsQ0FBQztDQUNKOzs7Ozs7QUFFRCw0QkFBNEIsY0FBc0IsRUFBRSxRQUFzQjtJQUN4RSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUMxQyx1QkFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDMUM7S0FDRixDQUFDLENBQUM7Q0FDSjs7Ozs7QUFFRCwrQkFBK0Isa0JBQTRCO0lBQ3pELE9BQU87UUFDTCxjQUFjLEVBQUU7WUFDZCxNQUFNLEVBQUUsa0JBQWtCO1NBQzNCO0tBQ0YsQ0FBQztDQUNIOzs7OztBQUVELCtCQUErQixhQUFrQjtJQUMvQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRSx1QkFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDL0IsWUFBWSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUMxRSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7Q0FDaEI7Ozs7O0FBRUQsTUFBTSxxQkFBcUIsa0JBQTRCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDaEQsdUJBQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEQsdUJBQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksT0FBTyxJQUFJLGVBQWUsRUFBRTtZQUM5QixrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0tBQ2QsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbnRlcmZhY2UgRm9ybUNvbnRyb2xzIHtcclxuICBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RXJyb3JzKGVycm9yczogYW55LCBjb250cm9sOiBGb3JtQ29udHJvbCkge1xyXG4gIGlmIChPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xyXG4gICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRFcnJvck9uRmllbGRzKGVycm9yOiB7fSB8IG51bGwsIGNvbnRyb2xzOiBGb3JtQ29udHJvbHMpIHtcclxuICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICBjb25zdCBlcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBjb250cm9sc1tjb250cm9sTmFtZV0uZXJyb3JzLCBlcnJvcik7XHJcbiAgICBzZXRFcnJvcnMoZXJyb3JzLCBjb250cm9sc1tjb250cm9sTmFtZV0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhckVycm9yT25GaWVsZHMoZmllbGRFcnJvck5hbWU6IHN0cmluZywgY29udHJvbHM6IEZvcm1Db250cm9scykge1xyXG4gIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2xzW2NvbnRyb2xOYW1lXS5lcnJvcnM7XHJcbiAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgIGRlbGV0ZSBlcnJvcnNbZmllbGRFcnJvck5hbWVdO1xyXG4gICAgICBzZXRFcnJvcnMoZXJyb3JzLCBjb250cm9sc1tjb250cm9sTmFtZV0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVHcm91cE1hdGNoRXJyb3IoZnJpZW5kbHlGaWVsZE5hbWVzOiBzdHJpbmdbXSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBmdmVoR3JvdXBNYXRjaDoge1xyXG4gICAgICBmaWVsZHM6IGZyaWVuZGx5RmllbGROYW1lcyxcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVJZlZhbHVlc01hdGNoKGNvbnRyb2xWYWx1ZXM6IGFueSkge1xyXG4gIGNvbnN0IFtmaXJzdEZpZWxkLCAuLi5vdGhlckZpZWxkc10gPSBPYmplY3Qua2V5cyhjb250cm9sVmFsdWVzKTtcclxuICBjb25zdCBpc1ZhbGlkID0gb3RoZXJGaWVsZHMuZXZlcnkoXHJcbiAgICBjdXJyZW50VmFsdWUgPT4gY29udHJvbFZhbHVlc1tmaXJzdEZpZWxkXSA9PT0gY29udHJvbFZhbHVlc1tjdXJyZW50VmFsdWVdLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiBpc1ZhbGlkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBNYXRjaChmcmllbmRseUZpZWxkTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgcmV0dXJuICh7IHZhbHVlLCB0b3VjaGVkLCBwcmlzdGluZSwgY29udHJvbHMgfSkgPT4ge1xyXG4gICAgY29uc3QgZXJyb3IgPSBjcmVhdGVHcm91cE1hdGNoRXJyb3IoZnJpZW5kbHlGaWVsZE5hbWVzKTtcclxuICAgIGNvbnN0IGlzR3JvdXBNYXRjaGluZyA9IHZhbGlkYXRlSWZWYWx1ZXNNYXRjaCh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKHByaXN0aW5lKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b3VjaGVkICYmIGlzR3JvdXBNYXRjaGluZykge1xyXG4gICAgICBjbGVhckVycm9yT25GaWVsZHMoJ2Z2ZWhHcm91cE1hdGNoJywgY29udHJvbHMpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFcnJvck9uRmllbGRzKGVycm9yLCBjb250cm9scyk7XHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfTtcclxufVxyXG4iXX0=