@von-development-studio/primeng-form-validation
Version:
Angular + PrimeNG Form Validation directives.
78 lines • 9.03 kB
JavaScript
import { Directive, EventEmitter, HostListener, Output, } from '@angular/core';
import * as i0 from "@angular/core";
export class VonPrimengValidateDirective {
el;
customSubmit = new EventEmitter();
isValid;
isFocused;
constructor(el) {
this.el = el;
}
onSubmitEvent = (e) => {
e.preventDefault();
const elements = this.el.nativeElement.querySelectorAll('[validation]');
this.isValid = true;
this.isFocused = false;
elements.forEach((el) => {
el.dispatchEvent(new Event('executeValidation'));
const elValid = el.getAttribute('validation') === 'true';
if (this.isValid) {
this.isValid = elValid;
}
const ignoreValidity = this.shouldIgnoreValidity(el.tagName);
if (!ignoreValidity) {
const inputEl = this.getInputElement(el);
if (!elValid && !this.isFocused) {
this.isFocused = true;
inputEl.focus();
}
}
});
if (this.isValid) {
this.customSubmit.emit(e);
}
};
onResetEvent = (e) => {
const elements = this.el.nativeElement.querySelectorAll('[validation]');
elements.forEach((el) => {
el.dispatchEvent(new Event('cleanValidation'));
});
};
shouldIgnoreValidity = (tagName) => {
// TODO: Add conditions to ignore validity focus state...
// switch (tagName) {
// case 'P-DROPDOWN':
// case 'P-CALENDAR':
// return true;
// }
return false;
};
getInputElement = (el) => {
if (el.tagName === 'P-CALENDAR' ||
el.tagName === 'P-AUTOCOMPLETE' ||
el.tagName === 'P-DROPDOWN') {
const inputEl = el.querySelector('input');
return inputEl;
}
return el;
};
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VonPrimengValidateDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: VonPrimengValidateDirective, selector: "[validate]", outputs: { customSubmit: "validate" }, host: { listeners: { "submit": "onSubmitEvent($event)", "reset": "onResetEvent($event)" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VonPrimengValidateDirective, decorators: [{
type: Directive,
args: [{
selector: '[validate]',
standalone: false,
}]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { customSubmit: [{
type: Output,
args: ['validate']
}], onSubmitEvent: [{
type: HostListener,
args: ['submit', ['$event']]
}], onResetEvent: [{
type: HostListener,
args: ['reset', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9uLXByaW1lbmctdmFsaWRhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbWVuZy1mb3JtLXZhbGlkYXRpb24vc3JjL2xpYi92b24tcHJpbWVuZy12YWxpZGF0ZS92b24tcHJpbWVuZy12YWxpZGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7QUFNdkIsTUFBTSxPQUFPLDJCQUEyQjtJQU9oQjtJQUx0QixZQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0MsT0FBTyxDQUFXO0lBQ2xCLFNBQVMsQ0FBVztJQUU5QixZQUFzQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUFHLENBQUM7SUFHeEMsYUFBYSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDekIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRTtZQUNuQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUN6RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDekIsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDdEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUdGLFlBQVksR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRTtZQUNuQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVRLG9CQUFvQixHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7UUFDbkQseURBQXlEO1FBQ3pELHFCQUFxQjtRQUNyQix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixJQUFJO1FBQ0osT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFUSxlQUFlLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtRQUN0QyxJQUNFLEVBQUUsQ0FBQyxPQUFPLEtBQUssWUFBWTtZQUMzQixFQUFFLENBQUMsT0FBTyxLQUFLLGdCQUFnQjtZQUMvQixFQUFFLENBQUMsT0FBTyxLQUFLLFlBQVksRUFDM0IsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO3dHQWxFUywyQkFBMkI7NEZBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCOytFQUdDLFlBQVk7c0JBRFgsTUFBTTt1QkFBQyxVQUFVO2dCQVNsQixhQUFhO3NCQURaLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQThCbEMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t2YWxpZGF0ZV0nLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgVm9uUHJpbWVuZ1ZhbGlkYXRlRGlyZWN0aXZlIHtcbiAgQE91dHB1dCgndmFsaWRhdGUnKVxuICBjdXN0b21TdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByb3RlY3RlZCBpc1ZhbGlkPzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGlzRm9jdXNlZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3N1Ym1pdCcsIFsnJGV2ZW50J10pXG4gIG9uU3VibWl0RXZlbnQgPSAoZTogYW55KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t2YWxpZGF0aW9uXScpO1xuICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2V4ZWN1dGVWYWxpZGF0aW9uJykpO1xuICAgICAgY29uc3QgZWxWYWxpZCA9IGVsLmdldEF0dHJpYnV0ZSgndmFsaWRhdGlvbicpID09PSAndHJ1ZSc7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGVsVmFsaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlnbm9yZVZhbGlkaXR5ID0gdGhpcy5zaG91bGRJZ25vcmVWYWxpZGl0eShlbC50YWdOYW1lKTtcbiAgICAgIGlmICghaWdub3JlVmFsaWRpdHkpIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuZ2V0SW5wdXRFbGVtZW50KGVsKTtcbiAgICAgICAgaWYgKCFlbFZhbGlkICYmICF0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICBpbnB1dEVsLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tU3VibWl0LmVtaXQoZSk7XG4gICAgfVxuICB9O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3Jlc2V0JywgWyckZXZlbnQnXSlcbiAgb25SZXNldEV2ZW50ID0gKGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t2YWxpZGF0aW9uXScpO1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NsZWFuVmFsaWRhdGlvbicpKTtcbiAgICB9KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgc2hvdWxkSWdub3JlVmFsaWRpdHkgPSAodGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gVE9ETzogQWRkIGNvbmRpdGlvbnMgdG8gaWdub3JlIHZhbGlkaXR5IGZvY3VzIHN0YXRlLi4uXG4gICAgLy8gc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gICBjYXNlICdQLURST1BET1dOJzpcbiAgICAvLyAgIGNhc2UgJ1AtQ0FMRU5EQVInOlxuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRJbnB1dEVsZW1lbnQgPSAoZWw6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdQLUNBTEVOREFSJyB8fFxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1AtQVVUT0NPTVBMRVRFJyB8fFxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1AtRFJPUERPV04nXG4gICAgKSB7XG4gICAgICBjb25zdCBpbnB1dEVsID0gZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIHJldHVybiBpbnB1dEVsO1xuICAgIH1cbiAgICByZXR1cm4gZWw7XG4gIH07XG59XG4iXX0=