UNPKG

@ngspot/ngx-errors

Version:

<p align="center"> <img width="20%" height="20%" src="https://github.com/DmitryEfimenko/ngspot/blob/main/packages/ngx-errors/package/assets/logo.png?raw=true"> </p>

32 lines 5.16 kB
import { isDevMode } from '@angular/core'; /** * Makes it easy to trigger validation on the control, that depends on * a value of a different control */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function dependentValidator(opts) { let subscribed = false; return (formControl) => { const form = formControl.root; const { watchControl, condition, validator } = opts; const controlToWatch = watchControl(form); if (!controlToWatch) { if (isDevMode()) { console.warn(`dependentValidator could not find specified watchControl`); } return null; } if (!subscribed) { subscribed = true; controlToWatch.valueChanges.subscribe(() => { formControl.updateValueAndValidity(); }); } if (condition === undefined || condition(controlToWatch.value)) { const validatorFn = validator(controlToWatch.value); return validatorFn(formControl); } return null; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25neC1lcnJvcnMvcGFja2FnZS9zcmMvbGliL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXNCMUM7OztHQUdHO0FBQ0gsOERBQThEO0FBQzlELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBa0M7SUFFbEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRXZCLE9BQU8sQ0FBQyxXQUE0QixFQUFFLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5QixNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsMERBQTBELENBQzNELENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFbEIsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN6QyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXBlbmRlbnRWYWxpZGF0b3JPcHRpb25zPFQ+IHtcclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgQWJzdHJhY3RDb250cm9sIHRvIHdhdGNoXHJcbiAgICogQHBhcmFtIGZvcm0gLSB0aGUgcm9vdCBGb3JtR3JvdXAgb2YgdGhlIGNvbnRyb2wgYmVpbmcgdmFsaWRhdGVkXHJcbiAgICovXHJcbiAgd2F0Y2hDb250cm9sOiAoZm9ybT86IEFic3RyYWN0Q29udHJvbCkgPT4gQWJzdHJhY3RDb250cm9sO1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB3YXRjaENvbnRyb2xWYWx1ZSAtIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBiZWluZyB3YXRjaGVkXHJcbiAgICogQHJldHVybnMgVmFsaWRhdG9yRm4uIEV4OiBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICovXHJcbiAgdmFsaWRhdG9yOiAod2F0Y2hDb250cm9sVmFsdWU/OiBUKSA9PiBWYWxpZGF0b3JGbjtcclxuICAvKipcclxuICAgKiBJZiB0aGUgY29uZGl0aW9uIGlzIHByb3ZpZGVkLCBpdCBtdXN0IHJldHVybiB0cnVlIGluIG9yZGVyIGZvciB0aGVcclxuICAgKiB2YWxpZGF0b3IgdG8gYmUgYXBwbGllZC5cclxuICAgKiBAcGFyYW0gd2F0Y2hDb250cm9sVmFsdWUgLSB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgYmVpbmcgd2F0Y2hlZFxyXG4gICAqL1xyXG4gIGNvbmRpdGlvbj86ICh3YXRjaENvbnRyb2xWYWx1ZT86IFQpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYWtlcyBpdCBlYXN5IHRvIHRyaWdnZXIgdmFsaWRhdGlvbiBvbiB0aGUgY29udHJvbCwgdGhhdCBkZXBlbmRzIG9uXHJcbiAqIGEgdmFsdWUgb2YgYSBkaWZmZXJlbnQgY29udHJvbFxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuZXhwb3J0IGZ1bmN0aW9uIGRlcGVuZGVudFZhbGlkYXRvcjxUID0gYW55PihcclxuICBvcHRzOiBEZXBlbmRlbnRWYWxpZGF0b3JPcHRpb25zPFQ+LFxyXG4pIHtcclxuICBsZXQgc3Vic2NyaWJlZCA9IGZhbHNlO1xyXG5cclxuICByZXR1cm4gKGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGNvbnN0IGZvcm0gPSBmb3JtQ29udHJvbC5yb290O1xyXG4gICAgY29uc3QgeyB3YXRjaENvbnRyb2wsIGNvbmRpdGlvbiwgdmFsaWRhdG9yIH0gPSBvcHRzO1xyXG4gICAgY29uc3QgY29udHJvbFRvV2F0Y2ggPSB3YXRjaENvbnRyb2woZm9ybSk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sVG9XYXRjaCkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgZGVwZW5kZW50VmFsaWRhdG9yIGNvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB3YXRjaENvbnRyb2xgLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzdWJzY3JpYmVkKSB7XHJcbiAgICAgIHN1YnNjcmliZWQgPSB0cnVlO1xyXG5cclxuICAgICAgY29udHJvbFRvV2F0Y2gudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHwgY29uZGl0aW9uKGNvbnRyb2xUb1dhdGNoLnZhbHVlKSkge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JGbiA9IHZhbGlkYXRvcihjb250cm9sVG9XYXRjaC52YWx1ZSk7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0b3JGbihmb3JtQ29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxufVxyXG4iXX0=