ng-fveh
Version:
NG-FVEH - Some helpers to help you with form validation :)
94 lines (93 loc) • 7.38 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
/**
* @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(function (controlName) {
var /** @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(function (controlName) {
var /** @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) {
var _a = tslib_1.__read(Object.keys(controlValues)), firstField = _a[0], otherFields = _a.slice(1);
var /** @type {?} */ isValid = otherFields.every(function (currentValue) { return controlValues[firstField] === controlValues[currentValue]; });
return isValid;
}
/**
* @param {?} friendlyFieldNames
* @return {?}
*/
export function groupMatch(friendlyFieldNames) {
return function (_a) {
var value = _a.value, touched = _a.touched, pristine = _a.pristine, controls = _a.controls;
var /** @type {?} */ error = createGroupMatchError(friendlyFieldNames);
var /** @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtbWF0Y2gudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZnZlaC8iLCJzb3VyY2VzIjpbImxpYi92YWxpZGF0b3JzL2dyb3VwLW1hdGNoLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsbUJBQW1CLE1BQVcsRUFBRSxPQUFvQjtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFO1FBQzlCLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0I7U0FBTTtRQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7Q0FDRjs7Ozs7O0FBRUQsMEJBQTBCLEtBQWdCLEVBQUUsUUFBc0I7SUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxXQUFXO1FBQ3ZDLHFCQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0NBQ0o7Ozs7OztBQUVELDRCQUE0QixjQUFzQixFQUFFLFFBQXNCO0lBQ3hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsV0FBVztRQUN2QyxxQkFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDMUM7S0FDRixDQUFDLENBQUM7Q0FDSjs7Ozs7QUFFRCwrQkFBK0Isa0JBQTRCO0lBQ3pELE9BQU87UUFDTCxjQUFjLEVBQUU7WUFDZCxNQUFNLEVBQUUsa0JBQWtCO1NBQzNCO0tBQ0YsQ0FBQztDQUNIOzs7OztBQUVELCtCQUErQixhQUFrQjtJQUMvQyxxREFBTyxrQkFBVSxFQUFFLHlCQUFjLENBQStCO0lBQ2hFLHFCQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUMvQixVQUFBLFlBQVksSUFBSSxPQUFBLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQXpELENBQXlELENBQzFFLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQztDQUNoQjs7Ozs7QUFFRCxNQUFNLHFCQUFxQixrQkFBNEI7SUFDckQsT0FBTyxVQUFDLEVBQXNDO1lBQXBDLGdCQUFLLEVBQUUsb0JBQU8sRUFBRSxzQkFBUSxFQUFFLHNCQUFRO1FBQzFDLHFCQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hELHFCQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRCxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sSUFBSSxlQUFlLEVBQUU7WUFDOUIsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQztLQUNkLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW50ZXJmYWNlIEZvcm1Db250cm9scyB7XHJcbiAgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEVycm9ycyhlcnJvcnM6IGFueSwgY29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICBpZiAoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcclxuICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RXJyb3JPbkZpZWxkcyhlcnJvcjoge30gfCBudWxsLCBjb250cm9sczogRm9ybUNvbnRyb2xzKSB7XHJcbiAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgY29uc3QgZXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgY29udHJvbHNbY29udHJvbE5hbWVdLmVycm9ycywgZXJyb3IpO1xyXG4gICAgc2V0RXJyb3JzKGVycm9ycywgY29udHJvbHNbY29udHJvbE5hbWVdKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXJFcnJvck9uRmllbGRzKGZpZWxkRXJyb3JOYW1lOiBzdHJpbmcsIGNvbnRyb2xzOiBGb3JtQ29udHJvbHMpIHtcclxuICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sc1tjb250cm9sTmFtZV0uZXJyb3JzO1xyXG4gICAgaWYgKGVycm9ycykge1xyXG4gICAgICBkZWxldGUgZXJyb3JzW2ZpZWxkRXJyb3JOYW1lXTtcclxuICAgICAgc2V0RXJyb3JzKGVycm9ycywgY29udHJvbHNbY29udHJvbE5hbWVdKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlR3JvdXBNYXRjaEVycm9yKGZyaWVuZGx5RmllbGROYW1lczogc3RyaW5nW10pIHtcclxuICByZXR1cm4ge1xyXG4gICAgZnZlaEdyb3VwTWF0Y2g6IHtcclxuICAgICAgZmllbGRzOiBmcmllbmRseUZpZWxkTmFtZXMsXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlSWZWYWx1ZXNNYXRjaChjb250cm9sVmFsdWVzOiBhbnkpIHtcclxuICBjb25zdCBbZmlyc3RGaWVsZCwgLi4ub3RoZXJGaWVsZHNdID0gT2JqZWN0LmtleXMoY29udHJvbFZhbHVlcyk7XHJcbiAgY29uc3QgaXNWYWxpZCA9IG90aGVyRmllbGRzLmV2ZXJ5KFxyXG4gICAgY3VycmVudFZhbHVlID0+IGNvbnRyb2xWYWx1ZXNbZmlyc3RGaWVsZF0gPT09IGNvbnRyb2xWYWx1ZXNbY3VycmVudFZhbHVlXSxcclxuICApO1xyXG5cclxuICByZXR1cm4gaXNWYWxpZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwTWF0Y2goZnJpZW5kbHlGaWVsZE5hbWVzOiBzdHJpbmdbXSkge1xyXG4gIHJldHVybiAoeyB2YWx1ZSwgdG91Y2hlZCwgcHJpc3RpbmUsIGNvbnRyb2xzIH0pID0+IHtcclxuICAgIGNvbnN0IGVycm9yID0gY3JlYXRlR3JvdXBNYXRjaEVycm9yKGZyaWVuZGx5RmllbGROYW1lcyk7XHJcbiAgICBjb25zdCBpc0dyb3VwTWF0Y2hpbmcgPSB2YWxpZGF0ZUlmVmFsdWVzTWF0Y2godmFsdWUpO1xyXG5cclxuICAgIGlmIChwcmlzdGluZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG91Y2hlZCAmJiBpc0dyb3VwTWF0Y2hpbmcpIHtcclxuICAgICAgY2xlYXJFcnJvck9uRmllbGRzKCdmdmVoR3JvdXBNYXRjaCcsIGNvbnRyb2xzKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RXJyb3JPbkZpZWxkcyhlcnJvciwgY29udHJvbHMpO1xyXG4gICAgcmV0dXJuIGVycm9yO1xyXG4gIH07XHJcbn1cclxuIl19