UNPKG

@schoolbelle/common

Version:

210 lines (202 loc) 7.55 kB
import { Directive, forwardRef, NgModule } from '@angular/core'; import { __assign } from 'tslib'; import { FormArray, NG_VALIDATORS, FormGroup } from '@angular/forms'; import { values, isEmpty, filter } from 'lodash-es'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} targetCtrl * @return {?} */ function NoDuplicateValidatorFn(targetCtrl) { /** @type {?} */ var targetCtrlValue = targetCtrl.value; /** @type {?} */ var parent = targetCtrl.parent; if (!parent) return; /** @type {?} */ var siblingCtrlList = (parent instanceof FormArray ? parent.controls : values(parent.controls)).filter((/** * @param {?} siblingCtrl * @return {?} */ function (siblingCtrl) { return siblingCtrl !== targetCtrl; })); /** @type {?} */ var siblingCtrlsWithSameValue = siblingCtrlList.filter((/** * @param {?} siblingCtrl * @return {?} */ function (siblingCtrl) { return siblingCtrl.value && siblingCtrl.value === targetCtrl.value; })); /** @type {?} */ var error = null; if (siblingCtrlsWithSameValue.length !== 0) { siblingCtrlsWithSameValue.forEach((/** * @param {?} c * @return {?} */ function (c) { return c.setErrors(__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 {?} */ var sameValueSiblingCtrlList = siblingCtrlList.filter((/** * @param {?} siblingCtrl * @return {?} */ function (siblingCtrl) { return siblingCtrl.errors && siblingCtrl.errors.duplicate === targetCtrl.errors.duplicate; })); if (sameValueSiblingCtrlList.length === 1) { /** @type {?} */ var 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; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NoDuplicateDirective = /** @class */ (function () { function NoDuplicateDirective() { this.validate = NoDuplicateValidatorFn; } NoDuplicateDirective.decorators = [ { type: Directive, args: [{ selector: '[no-duplicate][formControlName],[no-duplicate][formControl],[no-duplicate][ngModel]', providers: [ { provide: NG_VALIDATORS, useExisting: forwardRef((/** * @return {?} */ function () { return NoDuplicateDirective; })), multi: true } ] },] } ]; return NoDuplicateDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NoDuplicateModule = /** @class */ (function () { function NoDuplicateModule() { } NoDuplicateModule.decorators = [ { type: NgModule, args: [{ declarations: [NoDuplicateDirective], exports: [NoDuplicateDirective] },] } ]; return NoDuplicateModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} strOrRegexOrFn * @return {?} */ function NoDuplicateValidatorV2Fn(strOrRegexOrFn) { return (/** * @param {?} targetCtrl * @return {?} */ function (targetCtrl) { if (!targetCtrl.parent) return null; if (!(targetCtrl.parent instanceof FormGroup)) return null; /** @type {?} */ var parentCtrl = (/** @type {?} */ (targetCtrl.parent)); /** @type {?} */ var siblingCtrlList = filter(parentCtrl.controls, (/** * @param {?} ctrl * @param {?} key * @return {?} */ function (ctrl, key) { if (ctrl === targetCtrl) return false; if (typeof strOrRegexOrFn === 'function') return strOrRegexOrFn(key); else if (strOrRegexOrFn instanceof RegExp) return strOrRegexOrFn.test(key); else return key === strOrRegexOrFn; })); /** @type {?} */ var targetCtrlValue = targetCtrl.value; /** @type {?} */ var siblingCtrlsWithSameValue = siblingCtrlList.filter((/** * @param {?} siblingCtrl * @return {?} */ function (siblingCtrl) { return siblingCtrl.value && siblingCtrl.value === targetCtrl.value; })); /** @type {?} */ var error = null; if (siblingCtrlsWithSameValue.length !== 0) { siblingCtrlsWithSameValue.forEach((/** * @param {?} c * @return {?} */ function (c) { return c.setErrors(__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 {?} */ var sameValueSiblingCtrlList = siblingCtrlList.filter((/** * @param {?} siblingCtrl * @return {?} */ function (siblingCtrl) { return siblingCtrl.errors && siblingCtrl.errors.duplicate === targetCtrl.errors.duplicate; })); if (sameValueSiblingCtrlList.length === 1) { /** @type {?} */ var 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; }); } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { NoDuplicateModule, NoDuplicateDirective, NoDuplicateValidatorFn, NoDuplicateValidatorV2Fn }; //# sourceMappingURL=schoolbelle-common-no-duplicate.js.map