File

src/lib/dynamic-form-validation/dynamic-form-validation.service.ts

Index

Properties
Methods

Constructor

constructor(libraryService: DynamicFormLibraryService, validationConfigs: DynamicFormValidationConfigs)
Parameters :
Name Type Optional
libraryService DynamicFormLibraryService No
validationConfigs DynamicFormValidationConfigs No

Methods

getErrorMessage
getErrorMessage(errors: DynamicFormValidationErrors)
Parameters :
Name Type Optional
errors DynamicFormValidationErrors No
Returns : string

Properties

Readonly validationConfig
Type : DynamicFormValidationConfig
import { Inject, Injectable, Optional } from '@angular/core';
import { DynamicFormLibraryService } from '../dynamic-form-library/dynamic-form-library.service';
import { DynamicFormValidationConfig, DynamicFormValidationConfigs,
  DYNAMIC_FORM_VALIDATION_CONFIGS } from './dynamic-form-validation-config';
import { DynamicFormValidationErrors } from './dynamic-form-validation-errors';

@Injectable()
export class DynamicFormValidationService {
  readonly validationConfig: DynamicFormValidationConfig;

  constructor(
    protected libraryService: DynamicFormLibraryService,
    @Optional() @Inject(DYNAMIC_FORM_VALIDATION_CONFIGS)
    private validationConfigs: DynamicFormValidationConfigs,
  ) {
    this.validationConfig = this.mergeValidationConfigs(this.validationConfigs);
  }

  getErrorMessage(errors: DynamicFormValidationErrors): string {
    if (!errors) {
      return null;
    }

    const keys = Object.keys(errors);
    if (!keys.length) {
      return this.getDefaultErrorMessage();
    }

    const errorKey = keys[0];
    const error = errors[errorKey];
    return error && error.message ? error.message : this.getErrorMessageFromConfig(errorKey);
  }

  private getErrorMessageFromConfig(errorKey: string): string {
    return this.validationConfig.messages[errorKey] || this.validationConfig.defaultMessage;
  }

  private getDefaultErrorMessage(): string {
    return this.validationConfig.defaultMessage;
  }

  private mergeValidationConfigs(configs: DynamicFormValidationConfigs): DynamicFormValidationConfig {
    const library = this.libraryService.library;
    const libraryName = library.name;
    const defaultConfig = { defaultMessage: undefined, messages: {}, libraryName };
    if (!configs || !configs.length) {
      return defaultConfig;
    }

    const libraryConfigs = this.getLibraryConfigs(configs);
    return libraryConfigs.reduce((result, config) => {
      return {
        ...result, ...config,
        messages: { ...result.messages, ...config.messages },
        libraryName,
      };
    }, defaultConfig);
  }

  private getLibraryConfigs(configs: DynamicFormValidationConfigs): DynamicFormValidationConfigs {
    return this.libraryService.libraryNamesReverse
      .map(name => configs.find(config => config.libraryName === name))
      .filter(config => !!config);
  }
}

results matching ""

    No results matching ""