UNPKG

@schoolbelle/common

Version:

67 lines 6.99 kB
/** * @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