Skip to content

Commit

Permalink
fix: allow to pass options to updateValueAndValidity method
Browse files Browse the repository at this point in the history
  • Loading branch information
va-stefanek committed Jan 14, 2021
1 parent 2db58bc commit 3edb8ae
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 31 deletions.
10 changes: 6 additions & 4 deletions projects/ngneat/reactive-forms/src/lib/control-actions.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ValidationErrors, FormArray as NgFormArray } from '@angular/forms';
import { defer, merge, Observable, of, Subscription } from 'rxjs';
import { distinctUntilChanged, map, tap, debounceTime, switchMap } from 'rxjs/operators';
import { distinctUntilChanged, map, debounceTime, switchMap } from 'rxjs/operators';
import { FormArray } from './formArray';
import { FormControl } from './formControl';
import { FormGroup } from './formGroup';
Expand All @@ -11,7 +11,8 @@ import {
ValidatorFn,
ControlPath,
PersistOptions,
ControlFactoryMap
ControlFactoryMap,
UpdateValueAndValidityOptions
} from './types';
import { coerceArray, isNil, wrapIntoObservable } from './utils';

Expand Down Expand Up @@ -110,10 +111,11 @@ export function controlEnabledWhile<T>(

export function mergeControlValidators<T, Control extends AbstractControl<T>>(
control: Control,
validators: ValidatorFn<T> | ValidatorFn<T>[]
validators: ValidatorFn<T> | ValidatorFn<T>[],
options?: UpdateValueAndValidityOptions
): void {
control.setValidators([control.validator, ...coerceArray(validators)]);
control.updateValueAndValidity();
control.updateValueAndValidity(options);
}

export function validateControlOn<T>(control: AbstractControl<T>, validation: Observable<null | object>): Subscription {
Expand Down
20 changes: 10 additions & 10 deletions projects/ngneat/reactive-forms/src/lib/formArray.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ import {
ControlValue,
AbstractControlOf,
ValidatorFn,
DeepPartial
DeepPartial,
UpdateValueAndValidityOptions
} from './types';
import { coerceArray, mergeErrors, removeError } from './utils';

Expand Down Expand Up @@ -135,13 +136,13 @@ export class FormArray<T = any, E extends object = any> extends NgFormArray {
return controlEnabledWhile(this, observable, options);
}

mergeValidators(validators: Validator) {
mergeControlValidators(this, validators);
mergeValidators(validators: Validator, options?: UpdateValueAndValidityOptions) {
mergeControlValidators(this, validators, options);
}

mergeAsyncValidators(validators: AsyncValidator) {
mergeAsyncValidators(validators: AsyncValidator, options?: UpdateValueAndValidityOptions) {
this.setAsyncValidators([this.asyncValidator, ...coerceArray(validators)]);
this.updateValueAndValidity();
this.updateValueAndValidity(options);
}

markAsTouched(opts?: OnlySelf): void {
Expand Down Expand Up @@ -172,14 +173,14 @@ export class FormArray<T = any, E extends object = any> extends NgFormArray {
super.reset(value, options);
}

setValidators(newValidator: Validator): void {
setValidators(newValidator: Validator, options?: UpdateValueAndValidityOptions): void {
super.setValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

setAsyncValidators(newValidator: AsyncValidator): void {
setAsyncValidators(newValidator: AsyncValidator, options?: UpdateValueAndValidityOptions): void {
super.setAsyncValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

validateOn(observableValidation: Observable<null | object>) {
Expand Down Expand Up @@ -230,7 +231,6 @@ export class FormArray<T = any, E extends object = any> extends NgFormArray {
}

removeWhen(predicate: (element: AbstractControlOf<T>) => boolean): void {
const toRemove: number[] = [];
for (let i = this.length - 1; i >= 0; --i) {
if (predicate(this.at(i))) {
this.removeAt(i);
Expand Down
17 changes: 9 additions & 8 deletions projects/ngneat/reactive-forms/src/lib/formControl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
ExtractStrings,
OnlySelf,
OrBoxedValue,
UpdateValueAndValidityOptions,
Validator,
ValidatorFn,
ValidatorOrOpts
Expand Down Expand Up @@ -98,13 +99,13 @@ export class FormControl<T = any, E extends object = any> extends NgFormControl
return controlEnabledWhile(this, observable, options);
}

mergeValidators(validators: Validator) {
mergeControlValidators(this, validators);
mergeValidators(validators: Validator, options?: UpdateValueAndValidityOptions) {
mergeControlValidators(this, validators, options);
}

mergeAsyncValidators(validators: AsyncValidator) {
mergeAsyncValidators(validators: AsyncValidator, options?: UpdateValueAndValidityOptions) {
this.setAsyncValidators([this.asyncValidator, ...coerceArray(validators)]);
this.updateValueAndValidity();
this.updateValueAndValidity(options);
}

markAsTouched(opts?: OnlySelf): void {
Expand Down Expand Up @@ -135,14 +136,14 @@ export class FormControl<T = any, E extends object = any> extends NgFormControl
super.reset(formState, options);
}

setValidators(newValidator: Validator): void {
setValidators(newValidator: Validator, options?: UpdateValueAndValidityOptions): void {
super.setValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

setAsyncValidators(newValidator: AsyncValidator): void {
setAsyncValidators(newValidator: AsyncValidator, options?: UpdateValueAndValidityOptions): void {
super.setAsyncValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

validateOn(observableValidation: Observable<null | object>) {
Expand Down
19 changes: 10 additions & 9 deletions projects/ngneat/reactive-forms/src/lib/formGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ import {
AbstractControlsOf,
PersistOptions,
ValidatorFn,
DeepPartial
DeepPartial,
UpdateValueAndValidityOptions
} from './types';
import { coerceArray, mergeErrors, removeError, wrapIntoObservable } from './utils';
import { FormArray } from './formArray';
Expand Down Expand Up @@ -185,13 +186,13 @@ export class FormGroup<T extends Obj = any, E extends object = any> extends NgFo
return controlEnabledWhile(this, observable, options);
}

mergeValidators(validators: Validator) {
mergeControlValidators(this, validators);
mergeValidators(validators: Validator, options?: UpdateValueAndValidityOptions) {
mergeControlValidators(this, validators, options);
}

mergeAsyncValidators(validators: AsyncValidator) {
mergeAsyncValidators(validators: AsyncValidator, options?: UpdateValueAndValidityOptions) {
this.setAsyncValidators([this.asyncValidator, ...coerceArray(validators)]);
this.updateValueAndValidity();
this.updateValueAndValidity(options);
}

markAsTouched(opts?: OnlySelf): void {
Expand Down Expand Up @@ -222,14 +223,14 @@ export class FormGroup<T extends Obj = any, E extends object = any> extends NgFo
super.reset(formState, options);
}

setValidators(newValidator: Validator): void {
setValidators(newValidator: Validator, options?: UpdateValueAndValidityOptions): void {
super.setValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

setAsyncValidators(newValidator: AsyncValidator): void {
setAsyncValidators(newValidator: AsyncValidator, options?: UpdateValueAndValidityOptions): void {
super.setAsyncValidators(newValidator);
super.updateValueAndValidity();
super.updateValueAndValidity(options);
}

validateOn(observableValidation: Observable<null | object>) {
Expand Down
2 changes: 2 additions & 0 deletions projects/ngneat/reactive-forms/src/lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,5 @@ export interface PersistOptions<T> {
manager?: PersistManager<T>;
arrControlFactory?: ControlFactoryMap<T>;
}

export type UpdateValueAndValidityOptions = Pick<ControlOptions, 'onlySelf' | 'emitEvent'>;

0 comments on commit 3edb8ae

Please sign in to comment.