Skip to content

Commit

Permalink
feat: rename customValidatorOptions to classValidatorOptions, add sup…
Browse files Browse the repository at this point in the history
…port change messages and titles on run time with set validatorOptions
  • Loading branch information
EndyKaufman committed Sep 13, 2020
1 parent 545deb0 commit aaf9c78
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ export interface DynamicFormGroupConfig {
validators?: ValidatorFn[] | undefined;
asyncValidators?: AsyncValidatorFn[] | undefined;
updateOn?: any | undefined;
customValidatorOptions?: ValidatorOptions | undefined;
classValidatorOptions?: ValidatorOptions | undefined;
}
export function isDynamicFormGroupConfig(options: AbstractControlOptions | DynamicFormGroupConfig) {
return options && !!options['customValidatorOptions'];
return options && !!options['classValidatorOptions'];
}
export function isLegacyOrOpts(options: AbstractControlOptions | DynamicFormGroupConfig) {
return options && (!!options['validator'] || !!options['asyncValidator']);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ export class DynamicFormBuilder extends FormBuilder {
asyncValidators.push(extra.asyncValidator);
}
}
// Set default customValidatorOptions
// Set default classValidatorOptions
if (!isDynamicFormGroupConfig(extra)) {
extra.customValidatorOptions = { validationError: { target: false } };
extra.classValidatorOptions = { validationError: { target: false } };
}
}

Expand All @@ -78,7 +78,7 @@ export class DynamicFormBuilder extends FormBuilder {
if (canCreateGroup() && newControlsConfig) {
// recursively create a dynamic group for the nested object
newControlsConfig[key] = this.group(newControlsConfig[key].constructor, undefined, {
...(extra.customValidatorOptions ? { customValidatorOptions: extra.customValidatorOptions } : {}),
...(extra.classValidatorOptions ? { classValidatorOptions: extra.classValidatorOptions } : {}),
asyncValidators,
updateOn,
validators,
Expand All @@ -90,7 +90,7 @@ export class DynamicFormBuilder extends FormBuilder {
newControlsConfig[key] = super.array(
newControlsConfig[key].map((newControlsConfigItem) =>
this.group(newControlsConfigItem.constructor, undefined, {
...(extra.customValidatorOptions ? { customValidatorOptions: extra.customValidatorOptions } : {}),
...(extra.classValidatorOptions ? { classValidatorOptions: extra.classValidatorOptions } : {}),
asyncValidators,
updateOn,
validators,
Expand Down Expand Up @@ -145,7 +145,7 @@ export class DynamicFormBuilder extends FormBuilder {
let classValidators: any = getClassValidators<TModel>(
factoryModel,
newControlsConfig,
extra && extra.customValidatorOptions
extra && extra.classValidatorOptions
);
let formGroup: any = super.group(classValidators, {
...(asyncValidators || {}),
Expand All @@ -166,7 +166,7 @@ export class DynamicFormBuilder extends FormBuilder {
});

// Add a listener to the dynamic group for value changes; on change, execute validation
dynamicFormGroup.subscribeToValueChanges(undefined, extra && extra.customValidatorOptions);
dynamicFormGroup.subscribeToValueChanges(undefined, extra && extra.classValidatorOptions);

classValidators = null;
formGroup = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,11 @@ export class DynamicFormGroup<TModel> extends FormGroup {
}

validateStream(externalErrors?: ShortValidationErrors, validatorOptions?: ValidatorOptions) {
const argumentValidatorOptions = validatorOptions ? cloneDeep(validatorOptions) : validatorOptions;
return combineLatest([getValidatorMessagesStorage(), getValidatorTitlesStorage()]).pipe(
tap(([messages, titles]) => {
validatorOptions = argumentValidatorOptions;

if (externalErrors === undefined) {
externalErrors = cloneDeep(this._externalErrors);
}
Expand All @@ -143,11 +146,11 @@ export class DynamicFormGroup<TModel> extends FormGroup {
}

if (messages) {
validatorOptions.messages = { ...validatorOptions.messages, ...messages };
validatorOptions.messages = { ...messages, ...validatorOptions.messages };
}

if (titles) {
validatorOptions.titles = { ...validatorOptions.titles, ...titles };
validatorOptions.titles = { ...titles, ...validatorOptions.titles };
}

const dataToValidate = this.object;
Expand Down Expand Up @@ -308,7 +311,7 @@ export class DynamicFormGroup<TModel> extends FormGroup {
}

/**
* @deprecated
* @deprecated please use sync method setExternalErrors(errors)
*/
setExternalErrorsAsync(externalErrors: ShortValidationErrors) {
this.setExternalErrors(externalErrors);
Expand All @@ -325,7 +328,7 @@ export class DynamicFormGroup<TModel> extends FormGroup {
}

/**
* @deprecated
* @deprecated please use sync method setExternalErrors({})
*/
clearExternalErrorsAsync() {
this.setExternalErrors({});
Expand Down

0 comments on commit aaf9c78

Please sign in to comment.