@von-development-studio/primeng-form-validation
Version:
Angular + PrimeNG Form Validation directives.
1 lines • 23 kB
Source Map (JSON)
{"version":3,"file":"von-development-studio-primeng-form-validation.mjs","sources":["../../../projects/primeng-form-validation/src/lib/von-primeng-form-validation/von-primeng-validation.constant.ts","../../../projects/primeng-form-validation/src/lib/von-primeng-form-validation/von-primeng-validation.directive.ts","../../../projects/primeng-form-validation/src/lib/von-primeng-validate/von-primeng-validate.directive.ts","../../../projects/primeng-form-validation/src/lib/von-primeng-form.module.ts","../../../projects/primeng-form-validation/src/public-api.ts","../../../projects/primeng-form-validation/src/von-development-studio-primeng-form-validation.ts"],"sourcesContent":["import { ValidationMessagesLocalizationModel, ValidationMessagesModel } from './von-primeng-validation.model';\n\nconst VALIDATION_MESSAGES_EN: ValidationMessagesLocalizationModel = {\n requiredMessage: 'The field \\'${name}\\' is required',\n equalToMessage: 'The field \\'${name}\\' is not equal',\n manualValMessage: 'The field \\'${name}\\' is not valid'\n};\n\nconst VALIDATION_MESSAGES_ES: ValidationMessagesLocalizationModel = {\n requiredMessage: 'El campo \\'${name}\\' es requerido',\n equalToMessage: 'El campo \\'${name}\\' no es igual',\n manualValMessage: 'El campo \\'${name}\\' no es válido'\n};\n\nexport const VALIDATION_MESSAGES: ValidationMessagesModel = {\n ngModelRequired: 'You need to add [(ngModel)] into the element',\n EN: VALIDATION_MESSAGES_EN,\n ES: VALIDATION_MESSAGES_ES\n};\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport {\r\n FormControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { MessageService } from 'primeng/api';\r\nimport { VALIDATION_MESSAGES } from './von-primeng-validation.constant';\r\nimport { ValidationMessagesLocalizationModel } from './von-primeng-validation.model';\r\n\r\n@Directive({\r\n selector: '[validation]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: VonPrimengValidationDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: false,\r\n})\r\nexport class VonPrimengValidationDirective implements OnInit, Validator {\r\n @Input() ngModel?: any;\r\n @Output() ngModelChange = new EventEmitter<any>();\r\n @Input() name?: string;\r\n @Input() customName?: string;\r\n\r\n @Input() required?: boolean;\r\n @Input() requiredMessage?: string;\r\n @Input() equalTo?: any;\r\n @Input() equalIgnoreCase?: boolean;\r\n @Input() equalToMessage?: string;\r\n @Input() manualVal?: boolean;\r\n @Input() manualValMessage?: string;\r\n\r\n protected validator: ValidationErrors = {};\r\n protected message = '';\r\n protected messages: ValidationMessagesLocalizationModel = {\r\n requiredMessage: '',\r\n equalToMessage: '',\r\n manualValMessage: '',\r\n };\r\n protected $label?: HTMLElement;\r\n\r\n constructor(\r\n protected element: ElementRef,\r\n protected renderer: Renderer2,\r\n protected messageService: MessageService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n const $closestFormEl =\r\n this.element.nativeElement.form ||\r\n this.getClosestForm(this.element.nativeElement);\r\n const isValidationEn = !$closestFormEl.hasAttribute('validation-es');\r\n this.messages = isValidationEn\r\n ? VALIDATION_MESSAGES.EN\r\n : VALIDATION_MESSAGES.ES;\r\n\r\n this.$label = $closestFormEl.querySelector(`label[for='${this.name}']`);\r\n if (this.$label) {\r\n this.renderer.addClass(this.$label, 'field__label');\r\n if (this.required) {\r\n this.renderer.addClass(this.$label, 'field__label--required');\r\n }\r\n }\r\n this.renderer.setAttribute(\r\n this.element.nativeElement,\r\n 'validation',\r\n 'true'\r\n );\r\n this.renderer.addClass(\r\n this.element.nativeElement,\r\n this.verifyClassName(this.element.nativeElement)\r\n );\r\n }\r\n\r\n validate(formValue: FormControl): ValidationErrors {\r\n this.validator = this.getCustomValidators(formValue.value);\r\n this.runValidation();\r\n return this.validator;\r\n }\r\n\r\n @HostListener('ngModelChange', ['$event']) executeChangeEvent = (\r\n value: any\r\n ) => {\r\n if (this.manualVal != null) {\r\n setTimeout(() => {\r\n this.validator = this.getCustomValidators(value);\r\n if (!this.fieldNotValid()) {\r\n this.renderer.removeClass(this.element.nativeElement, 'field__error');\r\n this.renderer.removeClass(this.element.nativeElement, 'ng-invalid');\r\n this.renderer.addClass(this.element.nativeElement, 'ng-valid');\r\n }\r\n }, 10);\r\n }\r\n };\r\n\r\n @HostListener('executeValidation') executeValidationEvent = () => {\r\n this.validator = this.getCustomValidators(this.ngModel);\r\n const labelText = this.getLabelText();\r\n const { message, valid } = this.verifyValidationMessage();\r\n\r\n if (!valid) {\r\n this.renderer.addClass(this.element.nativeElement, 'field__error');\r\n this.messageService.add({\r\n severity: 'error',\r\n detail: message.replace('${name}', labelText),\r\n });\r\n } else {\r\n this.renderer.removeClass(this.element.nativeElement, 'field__error');\r\n this.renderer.removeClass(this.element.nativeElement, 'ng-invalid');\r\n this.renderer.addClass(this.element.nativeElement, 'ng-valid');\r\n }\r\n this.element.nativeElement.setAttribute('validation', valid);\r\n };\r\n\r\n @HostListener('cleanValidation') cleanValidationEvent = () => {\r\n this.renderer.removeClass(this.element.nativeElement, 'field__error');\r\n };\r\n\r\n protected getClosestForm = (element: HTMLElement): HTMLElement => {\r\n if (element.tagName === 'FORM' || element.tagName === 'BODY') {\r\n return element;\r\n }\r\n\r\n const parent = element.parentElement;\r\n if (parent) {\r\n return this.getClosestForm(parent);\r\n }\r\n return element;\r\n };\r\n\r\n protected getLabelText = (): string => {\r\n let labelText = this.name || '';\r\n if (this.customName) {\r\n labelText = this.customName;\r\n }\r\n if (this.$label && this.$label.innerText) {\r\n labelText = this.$label.innerText;\r\n }\r\n return labelText;\r\n };\r\n\r\n protected runValidation = (): void => {\r\n const isNotValid = this.fieldNotValid();\r\n if (isNotValid) {\r\n return;\r\n }\r\n this.renderer.removeClass(this.element.nativeElement, 'field__error');\r\n };\r\n\r\n protected verifyClassName = (element: HTMLElement): string => {\r\n switch (element.tagName) {\r\n case 'INPUT':\r\n return 'field__input';\r\n case 'TEXTAREA':\r\n return 'field__textarea';\r\n case 'P-DROPDOWN':\r\n return 'field__dropdown';\r\n case 'P-CALENDAR':\r\n return 'field__calendar';\r\n }\r\n return 'field__no-defined';\r\n };\r\n\r\n protected verifyValidationMessage = () => {\r\n let message = '';\r\n let valid = false;\r\n\r\n if (this.validator['isEmpty']) {\r\n message = this.requiredMessage || this.messages.requiredMessage;\r\n } else if (this.validator['isNotEqual']) {\r\n message = this.equalToMessage || this.messages.equalToMessage;\r\n } else if (this.validator['manualNotValid']) {\r\n message = this.manualValMessage || this.messages.manualValMessage;\r\n } else {\r\n valid = true;\r\n }\r\n return { message, valid };\r\n };\r\n\r\n protected getCustomValidators = (formValue: any): ValidationErrors => {\r\n return {\r\n ...this.validateRequired(formValue),\r\n ...this.validateEqualTo(formValue),\r\n ...this.validateManual(formValue),\r\n };\r\n };\r\n\r\n protected validateRequired: ValidatorFn = (\r\n value: any\r\n ): ValidationErrors | null => {\r\n let validation = {};\r\n if (!this.required) {\r\n return {};\r\n }\r\n\r\n if (this.required && (value == null || value === '')) {\r\n validation = { isEmpty: true };\r\n }\r\n return validation;\r\n };\r\n\r\n protected validateEqualTo: ValidatorFn = (\r\n value: any\r\n ): ValidationErrors | null => {\r\n if (!this.equalTo) {\r\n return {};\r\n }\r\n\r\n let validation = {};\r\n const isNotEqual = this.equalIgnoreCase\r\n ? `${value}`.toLowerCase() !== `${this.equalTo}`.toLowerCase()\r\n : value !== this.equalTo;\r\n if (isNotEqual) {\r\n validation = { isNotEqual: true };\r\n }\r\n return validation;\r\n };\r\n\r\n protected validateManual: ValidatorFn = (_: any): ValidationErrors | null => {\r\n if (this.manualVal == null || this.manualVal) {\r\n return {};\r\n }\r\n\r\n return { manualNotValid: true };\r\n };\r\n\r\n protected fieldNotValid = () => {\r\n return (\r\n this.validator['isEmpty'] ||\r\n this.validator['isNotEqual'] ||\r\n this.validator['manualNotValid']\r\n );\r\n };\r\n}\r\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Output,\n} from '@angular/core';\n\n@Directive({\n selector: '[validate]',\n standalone: false,\n})\nexport class VonPrimengValidateDirective {\n @Output('validate')\n customSubmit: EventEmitter<any> = new EventEmitter();\n\n protected isValid?: boolean;\n protected isFocused?: boolean;\n\n constructor(protected el: ElementRef) {}\n\n @HostListener('submit', ['$event'])\n onSubmitEvent = (e: any) => {\n e.preventDefault();\n const elements = this.el.nativeElement.querySelectorAll('[validation]');\n this.isValid = true;\n this.isFocused = false;\n\n elements.forEach((el: HTMLElement) => {\n el.dispatchEvent(new Event('executeValidation'));\n const elValid = el.getAttribute('validation') === 'true';\n if (this.isValid) {\n this.isValid = elValid;\n }\n\n const ignoreValidity = this.shouldIgnoreValidity(el.tagName);\n if (!ignoreValidity) {\n const inputEl = this.getInputElement(el);\n if (!elValid && !this.isFocused) {\n this.isFocused = true;\n inputEl.focus();\n }\n }\n });\n\n if (this.isValid) {\n this.customSubmit.emit(e);\n }\n };\n\n @HostListener('reset', ['$event'])\n onResetEvent = (e: any) => {\n const elements = this.el.nativeElement.querySelectorAll('[validation]');\n elements.forEach((el: HTMLElement) => {\n el.dispatchEvent(new Event('cleanValidation'));\n });\n };\n\n protected shouldIgnoreValidity = (tagName: string) => {\n // TODO: Add conditions to ignore validity focus state...\n // switch (tagName) {\n // case 'P-DROPDOWN':\n // case 'P-CALENDAR':\n // return true;\n // }\n return false;\n };\n\n protected getInputElement = (el: any) => {\n if (\n el.tagName === 'P-CALENDAR' ||\n el.tagName === 'P-AUTOCOMPLETE' ||\n el.tagName === 'P-DROPDOWN'\n ) {\n const inputEl = el.querySelector('input');\n return inputEl;\n }\n return el;\n };\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MessageService } from 'primeng/api';\nimport { VonPrimengValidationDirective } from './von-primeng-form-validation/von-primeng-validation.directive';\nimport { VonPrimengValidateDirective } from './von-primeng-validate/von-primeng-validate.directive';\n\n@NgModule({\n declarations: [VonPrimengValidateDirective, VonPrimengValidationDirective],\n imports: [FormsModule],\n exports: [\n FormsModule,\n VonPrimengValidateDirective,\n VonPrimengValidationDirective,\n ],\n providers: [MessageService],\n})\nexport class VonPrimengFormModule {}\n","/*\r\n * Public API Surface of angular-form-validation\r\n */\r\n\r\nexport * from './lib/von-primeng-form-validation/von-primeng-validation.constant';\r\nexport * from './lib/von-primeng-form-validation/von-primeng-validation.directive';\r\nexport * from './lib/von-primeng-form-validation/von-primeng-validation.model';\r\nexport * from './lib/von-primeng-form.module';\r\nexport * from './lib/von-primeng-validate/von-primeng-validate.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}