ngx-control-operators
Version:
RxJS operators for Angular reactive form controls
28 lines • 3.8 kB
JavaScript
import { tap } from "rxjs/operators";
/**
* Applies validators to a control for each truthy emission, removes them otherwise.
*
* This operator works by reference. When targeting the same control in different pipes
* with identical validators, if one pipe is true and the other is false, then the
* operator functions will race, leading to unexpected behavior.
*
* This is mitigated by wrapping your validators in a {@link Validators.compose},
* with a drawback: {@link AbstractControl.hasValidator} won't work as expected.
*
* @param control - target to apply validators
* @param validators - the validator functions to apply/remove
* @returns operator function
*/
export function enforce(control, validators) {
return input => input.pipe(tap(active => active ? control.addValidators(validators) : control.removeValidators(validators)));
}
/**
* Applies validators to a control for each truthy emission, removes them otherwise.
*
* @see {@link enforce}
* @param control - target to apply validators
* @param validators - the validator functions to apply/remove
* @returns operator function
*/
export const applyValidators = enforce;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbnRyb2wtb3BlcmF0b3JzL3NyYy9saWIvZW5mb3JjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksT0FBd0IsRUFBRSxVQUF5QjtJQUMxRSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDbkcsQ0FBQTtBQUNMLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuLyoqXG4gKiBBcHBsaWVzIHZhbGlkYXRvcnMgdG8gYSBjb250cm9sIGZvciBlYWNoIHRydXRoeSBlbWlzc2lvbiwgcmVtb3ZlcyB0aGVtIG90aGVyd2lzZS5cbiAqIFxuICogVGhpcyBvcGVyYXRvciB3b3JrcyBieSByZWZlcmVuY2UuIFdoZW4gdGFyZ2V0aW5nIHRoZSBzYW1lIGNvbnRyb2wgaW4gZGlmZmVyZW50IHBpcGVzXG4gKiB3aXRoIGlkZW50aWNhbCB2YWxpZGF0b3JzLCBpZiBvbmUgcGlwZSBpcyB0cnVlIGFuZCB0aGUgb3RoZXIgaXMgZmFsc2UsIHRoZW4gdGhlXG4gKiBvcGVyYXRvciBmdW5jdGlvbnMgd2lsbCByYWNlLCBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gKiBcbiAqIFRoaXMgaXMgbWl0aWdhdGVkIGJ5IHdyYXBwaW5nIHlvdXIgdmFsaWRhdG9ycyBpbiBhIHtAbGluayBWYWxpZGF0b3JzLmNvbXBvc2V9LFxuICogd2l0aCBhIGRyYXdiYWNrOiB7QGxpbmsgQWJzdHJhY3RDb250cm9sLmhhc1ZhbGlkYXRvcn0gd29uJ3Qgd29yayBhcyBleHBlY3RlZC5cbiAqICBcbiAqIEBwYXJhbSBjb250cm9sIC0gdGFyZ2V0IHRvIGFwcGx5IHZhbGlkYXRvcnNcbiAqIEBwYXJhbSB2YWxpZGF0b3JzIC0gdGhlIHZhbGlkYXRvciBmdW5jdGlvbnMgdG8gYXBwbHkvcmVtb3ZlXG4gKiBAcmV0dXJucyBvcGVyYXRvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZTxUPihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiBpbnB1dCA9PiBpbnB1dC5waXBlKFxuICAgICAgICB0YXAoYWN0aXZlID0+IGFjdGl2ZSA/IGNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSA6IGNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSksXG4gICAgKVxufVxuXG4vKipcbiAqIEFwcGxpZXMgdmFsaWRhdG9ycyB0byBhIGNvbnRyb2wgZm9yIGVhY2ggdHJ1dGh5IGVtaXNzaW9uLCByZW1vdmVzIHRoZW0gb3RoZXJ3aXNlLlxuICogXG4gKiBAc2VlIHtAbGluayBlbmZvcmNlfVxuICogQHBhcmFtIGNvbnRyb2wgLSB0YXJnZXQgdG8gYXBwbHkgdmFsaWRhdG9yc1xuICogQHBhcmFtIHZhbGlkYXRvcnMgLSB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9ucyB0byBhcHBseS9yZW1vdmVcbiAqIEByZXR1cm5zIG9wZXJhdG9yIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVZhbGlkYXRvcnMgPSBlbmZvcmNlO1xuIl19