UNPKG

@von-development-studio/primeng-form-validation

Version:
78 lines 9.03 kB
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=