UNPKG

ngx-input-errors

Version:

The ngx-input-errors library provides dynamic error messages for Angular Forms validations and automatic error extraction for displaying error messages.

1 lines 8.54 kB
{"version":3,"file":"ngx-input-errors.mjs","sources":["../../../projects/ngx-input-errors/src/provider.ts","../../../projects/ngx-input-errors/src/input-errors.directive.ts","../../../projects/ngx-input-errors/src/public-api.ts","../../../projects/ngx-input-errors/src/ngx-input-errors.ts"],"sourcesContent":["import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\n\r\nexport class ErrorMessages {\r\n defaultLanguage!: string\r\n errorMessages!: {\r\n [language: string]: {\r\n [error: string]: any\r\n }\r\n }\r\n}\r\n\r\nexport function provideNgxInputErrorMessages(config: ErrorMessages): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: ErrorMessages, useValue: config }\r\n ])\r\n}","import { Directive, ElementRef, HostBinding, Input, Optional } from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { ErrorMessages } from './provider';\r\n\r\n@Directive({\r\n selector: '[ngxInputErrors]',\r\n standalone: true\r\n})\r\nexport class NgxInputErrors {\r\n\r\n message = '';\r\n private errorMessages!: { [key: string]: any };\r\n\r\n @Input() controlName!: string;\r\n @Input() displayName = '';\r\n @Input() language!: string;\r\n\r\n @Input('form') set form(form: FormGroup) {\r\n const formControl = form.get(this.controlName);\r\n\r\n if (formControl) {\r\n /**\r\n * check first validation when form control initialize\r\n */\r\n this.checkFormControlValidation(formControl);\r\n\r\n formControl.statusChanges.subscribe(value => {\r\n this.checkFormControlValidation(formControl);\r\n });\r\n } else {\r\n throw new Error(`couldn\\'t find form control name ${this.controlName}`);\r\n }\r\n }\r\n\r\n @HostBinding('class.invalid') inValid!: boolean;\r\n\r\n constructor(@Optional() private readonly config: ErrorMessages, private el: ElementRef<HTMLParagraphElement>) {\r\n this.initializeErrorMessageFromConfigFile();\r\n console.log('lib config:');\r\n console.log({ config });\r\n }\r\n\r\n /**\r\n * set error message language and\r\n * get error messages from config file\r\n */\r\n initializeErrorMessageFromConfigFile() {\r\n this.setErrorMessageLanguage();\r\n this.getErrorMessagesFromConfigFile();\r\n }\r\n\r\n /**\r\n * set error message language to display\r\n */\r\n setErrorMessageLanguage() {\r\n // if user didn't set language, we use default language in config file\r\n if (!this.language) {\r\n if (!this.config.defaultLanguage) {\r\n throw new Error('you didn\\'t set default language for error messages in config file!');\r\n }\r\n this.language = this.config.defaultLanguage;\r\n }\r\n }\r\n\r\n getErrorMessagesFromConfigFile() {\r\n if (this.config.errorMessages) {\r\n this.errorMessages = this.config.errorMessages;\r\n } else {\r\n throw new Error('error messages is not set in config file');\r\n }\r\n }\r\n\r\n /**\r\n * check the form control state\r\n * @param formControl reactive form formControl\r\n */\r\n checkFormControlValidation(formControl: AbstractControl): void {\r\n if (formControl.invalid && formControl.errors) {\r\n let message = '';\r\n const errors = formControl.errors;\r\n message = this.extractError(this.errorMessages, errors, this.language, this.displayName);\r\n this.message = message;\r\n this.el.nativeElement.innerText = message;\r\n this.inValid = true;\r\n } else {\r\n this.el.nativeElement.innerText = '';\r\n this.message = '';\r\n this.inValid = false;\r\n }\r\n }\r\n\r\n /**\r\n * this function extract the reactive form validation errors from our custom error message with different languages\r\n * @param errorMessages the error messages object is for define our showing user input error\r\n * @param errors the value of errors in input object that define in form\r\n * @param language the language of the error that we want to extract\r\n * @param displayName the display input name for user\r\n */\r\n extractError(errorMessages: { [language: string]: { [error: string]: any } }, errors: any, language: string, displayName: string): any {\r\n const messages = errorMessages[language];\r\n let error;\r\n if (!messages) {\r\n throw new Error(`unable to find language of ${language} in error messages`);\r\n }\r\n if (!messages['defaultMessage']) {\r\n throw new Error(`default message property in ${language} is missing`);\r\n }\r\n /**\r\n * for example the key of errors is required\r\n * I get the required function from error message\r\n * and the pass display name and errors to required function\r\n * finally extract the message\r\n */\r\n Object.keys(errors).forEach(key => {\r\n const errorMessage: Function = messages[key];\r\n error = errorMessage ? errorMessage(displayName, errors) : messages['defaultMessage'](displayName);\r\n });\r\n return error;\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ngx-input-errors\r\n */\r\n\r\nexport * from './provider';\r\nexport * from './input-errors.directive'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ErrorMessages"],"mappings":"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"}