@schoolbelle/common
Version:
67 lines • 6.99 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { FormArray } from '@angular/forms';
import { values, isEmpty } from 'lodash-es';
/**
* @param {?} targetCtrl
* @return {?}
*/
export function NoDuplicateValidatorFn(targetCtrl) {
/** @type {?} */
const targetCtrlValue = targetCtrl.value;
/** @type {?} */
const parent = targetCtrl.parent;
if (!parent)
return;
/** @type {?} */
const siblingCtrlList = (parent instanceof FormArray
? parent.controls
: values(parent.controls)).filter((/**
* @param {?} siblingCtrl
* @return {?}
*/
siblingCtrl => siblingCtrl !== targetCtrl));
/** @type {?} */
const siblingCtrlsWithSameValue = siblingCtrlList.filter((/**
* @param {?} siblingCtrl
* @return {?}
*/
siblingCtrl => siblingCtrl.value && siblingCtrl.value === targetCtrl.value));
/** @type {?} */
let error = null;
if (siblingCtrlsWithSameValue.length !== 0) {
siblingCtrlsWithSameValue.forEach((/**
* @param {?} c
* @return {?}
*/
c => c.setErrors(Object.assign({}, c.errors, { duplicate: targetCtrlValue }))));
error = {
duplicate: targetCtrlValue
};
}
if (targetCtrl.errors &&
targetCtrl.errors.duplicate &&
targetCtrl.errors.duplicate !== targetCtrlValue // had duplicate errors before and receives a different value now
) {
// clear siblings old errors
/** @type {?} */
const sameValueSiblingCtrlList = siblingCtrlList.filter((/**
* @param {?} siblingCtrl
* @return {?}
*/
siblingCtrl => siblingCtrl.errors && siblingCtrl.errors.duplicate === targetCtrl.errors.duplicate));
if (sameValueSiblingCtrlList.length === 1) {
/** @type {?} */
const siblingCtrl = sameValueSiblingCtrlList[0];
delete siblingCtrl.errors['duplicate'];
siblingCtrl.setErrors(isEmpty(siblingCtrl.errors) ? null : siblingCtrl.errors);
}
// clear old errors
delete targetCtrl.errors['duplicate'];
targetCtrl.setErrors(isEmpty(targetCtrl.errors) ? null : targetCtrl.errors);
}
return error;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZHVwbGljYXRlLXZhbGlkYXRvci5mbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vbm8tZHVwbGljYXRlLyIsInNvdXJjZXMiOlsibGliL25vLWR1cGxpY2F0ZS12YWxpZGF0b3IuZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBOEIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBRTVDLE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsVUFBMkI7O1VBRXJCLGVBQWUsR0FBRyxVQUFVLENBQUMsS0FBSzs7VUFDbEMsTUFBTSxHQUEwQixVQUFVLENBQUMsTUFBTTtJQUN2RCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87O1VBRWQsZUFBZSxHQUFzQixDQUFDLE1BQU0sWUFBWSxTQUFTO1FBQ3JFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDMUIsQ0FBQyxNQUFNOzs7O0lBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFDOztVQUM3Qyx5QkFBeUIsR0FBRyxlQUFlLENBQUMsTUFBTTs7OztJQUN0RCxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsS0FBSyxFQUMzRTs7UUFFRyxLQUFLLEdBQUcsSUFBSTtJQUNoQixJQUFJLHlCQUF5QixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDMUMseUJBQXlCLENBQUMsT0FBTzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BDLENBQUMsQ0FBQyxTQUFTLG1CQUFNLENBQUMsQ0FBQyxNQUFNLElBQUUsU0FBUyxFQUFFLGVBQWUsSUFBRyxFQUN6RCxDQUFDO1FBQ0YsS0FBSyxHQUFHO1lBQ04sU0FBUyxFQUFFLGVBQWU7U0FDM0IsQ0FBQztLQUNIO0lBRUQsSUFDRSxVQUFVLENBQUMsTUFBTTtRQUNqQixVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLGlFQUFpRTtNQUNqSDs7O2NBR00sd0JBQXdCLEdBQUcsZUFBZSxDQUFDLE1BQU07Ozs7UUFBQyxXQUFXLENBQUEsRUFBRSxDQUFBLFdBQVcsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7UUFDeEosSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztrQkFDbkMsV0FBVyxHQUFHLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUMvQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRjtRQUVELG1CQUFtQjtRQUNuQixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUU3RTtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB2YWx1ZXMsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gTm9EdXBsaWNhdGVWYWxpZGF0b3JGbihcbiAgdGFyZ2V0Q3RybDogQWJzdHJhY3RDb250cm9sXG4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgY29uc3QgdGFyZ2V0Q3RybFZhbHVlID0gdGFyZ2V0Q3RybC52YWx1ZTtcbiAgY29uc3QgcGFyZW50OiBGb3JtR3JvdXAgfCBGb3JtQXJyYXkgPSB0YXJnZXRDdHJsLnBhcmVudDtcbiAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICBjb25zdCBzaWJsaW5nQ3RybExpc3Q6IEFic3RyYWN0Q29udHJvbFtdID0gKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheVxuICAgID8gcGFyZW50LmNvbnRyb2xzXG4gICAgOiB2YWx1ZXMocGFyZW50LmNvbnRyb2xzKVxuICApLmZpbHRlcihzaWJsaW5nQ3RybCA9PiBzaWJsaW5nQ3RybCAhPT0gdGFyZ2V0Q3RybCk7XG4gIGNvbnN0IHNpYmxpbmdDdHJsc1dpdGhTYW1lVmFsdWUgPSBzaWJsaW5nQ3RybExpc3QuZmlsdGVyKFxuICAgIHNpYmxpbmdDdHJsID0+IHNpYmxpbmdDdHJsLnZhbHVlICYmIHNpYmxpbmdDdHJsLnZhbHVlID09PSB0YXJnZXRDdHJsLnZhbHVlXG4gICk7XG5cbiAgbGV0IGVycm9yID0gbnVsbDtcbiAgaWYgKHNpYmxpbmdDdHJsc1dpdGhTYW1lVmFsdWUubGVuZ3RoICE9PSAwKSB7XG4gICAgc2libGluZ0N0cmxzV2l0aFNhbWVWYWx1ZS5mb3JFYWNoKGMgPT5cbiAgICAgIGMuc2V0RXJyb3JzKHsgLi4uYy5lcnJvcnMsIGR1cGxpY2F0ZTogdGFyZ2V0Q3RybFZhbHVlIH0pXG4gICAgKTtcbiAgICBlcnJvciA9IHtcbiAgICAgIGR1cGxpY2F0ZTogdGFyZ2V0Q3RybFZhbHVlXG4gICAgfTtcbiAgfSBcbiAgXG4gIGlmIChcbiAgICB0YXJnZXRDdHJsLmVycm9ycyAmJlxuICAgIHRhcmdldEN0cmwuZXJyb3JzLmR1cGxpY2F0ZSAmJlxuICAgIHRhcmdldEN0cmwuZXJyb3JzLmR1cGxpY2F0ZSAhPT0gdGFyZ2V0Q3RybFZhbHVlIC8vIGhhZCBkdXBsaWNhdGUgZXJyb3JzIGJlZm9yZSBhbmQgcmVjZWl2ZXMgYSBkaWZmZXJlbnQgdmFsdWUgbm93XG4gICkge1xuXG4gICAgLy8gY2xlYXIgc2libGluZ3Mgb2xkIGVycm9yc1xuICAgIGNvbnN0IHNhbWVWYWx1ZVNpYmxpbmdDdHJsTGlzdCA9IHNpYmxpbmdDdHJsTGlzdC5maWx0ZXIoc2libGluZ0N0cmw9PnNpYmxpbmdDdHJsLmVycm9ycyAmJiBzaWJsaW5nQ3RybC5lcnJvcnMuZHVwbGljYXRlID09PSB0YXJnZXRDdHJsLmVycm9ycy5kdXBsaWNhdGUpXG4gICAgaWYgKHNhbWVWYWx1ZVNpYmxpbmdDdHJsTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHNpYmxpbmdDdHJsID0gc2FtZVZhbHVlU2libGluZ0N0cmxMaXN0WzBdO1xuICAgICAgZGVsZXRlIHNpYmxpbmdDdHJsLmVycm9yc1snZHVwbGljYXRlJ107XG4gICAgICBzaWJsaW5nQ3RybC5zZXRFcnJvcnMoaXNFbXB0eShzaWJsaW5nQ3RybC5lcnJvcnMpID8gbnVsbCA6IHNpYmxpbmdDdHJsLmVycm9ycyk7XG4gICAgfVxuXG4gICAgLy8gY2xlYXIgb2xkIGVycm9yc1xuICAgIGRlbGV0ZSB0YXJnZXRDdHJsLmVycm9yc1snZHVwbGljYXRlJ107XG4gICAgdGFyZ2V0Q3RybC5zZXRFcnJvcnMoaXNFbXB0eSh0YXJnZXRDdHJsLmVycm9ycykgPyBudWxsIDogdGFyZ2V0Q3RybC5lcnJvcnMpO1xuXG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufVxuIl19