UNPKG

@js-sugar/angular

Version:

JS-Sugar core package (Angular)

66 lines 8.12 kB
import { Directive, Input, Optional } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; export class ErrorDirective { constructor(_templateRef, _viewContainer, _form) { this._templateRef = _templateRef; this._viewContainer = _viewContainer; this._form = _form; this._errors = null; if (!_form) { throw Error('ErrorDirective must be used in a form element.'); } } ngOnInit() { this._formStatusChangeSubscription = this._form.statusChanges.subscribe(x => { const control = this._form.controls[this._fieldName]; this._errors = control.errors; if (control.invalid && (control.dirty || control.touched)) { this._show(true); } else { this._show(false); } }); this._formSubmitSubscription = this._form.ngSubmit.subscribe(s => { this._show(true); }); } set fieldName(value) { this._fieldName = value; } get fieldName() { return this._fieldName; } get errors() { return this._errors; } ngOnDestroy() { this._formStatusChangeSubscription.unsubscribe(); this._formSubmitSubscription.unsubscribe(); } _show(show) { if (show && !this._embededViewRef) { this._embededViewRef = this._viewContainer.createEmbeddedView(this._templateRef); } else if (!show && this._embededViewRef) { this._embededViewRef.destroy(); this._embededViewRef = undefined; } } } ErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.NgForm, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); ErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: ErrorDirective, selector: "[jssError]", inputs: { fieldName: ["jssError", "fieldName"] }, exportAs: ["jssError"], ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ErrorDirective, decorators: [{ type: Directive, args: [{ selector: '[jssError]', exportAs: 'jssError', }] }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.NgForm, decorators: [{ type: Optional }] }]; }, propDecorators: { fieldName: [{ type: Input, args: ['jssError'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2Zvcm0vdmFsaWRhdGlvbi9lcnJvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUMsS0FBSyxFQUFFLFFBQVEsRUFBc0MsTUFBTSxlQUFlLENBQUM7OztBQVE5SCxNQUFNLE9BQU8sY0FBYztJQU96QixZQUNVLFlBQThCLEVBQzlCLGNBQWdDLEVBQ3BCLEtBQWE7UUFGekIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBTDNCLFlBQU8sR0FBNEIsSUFBSSxDQUFDO1FBTzlDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDOUIsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQXVCLFNBQVMsQ0FBQyxLQUFhO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFhO1FBQ3pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xGO2FBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7U0FDbEM7SUFDSCxDQUFDOzsyR0F6RFUsY0FBYzsrRkFBZCxjQUFjOzJGQUFkLGNBQWM7a0JBSjFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxVQUFVO2lCQUNyQjs7MEJBV0ksUUFBUTs0Q0F1QlksU0FBUztzQkFBL0IsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgSW5wdXQsIE9wdGlvbmFsLCBPbkluaXQsIE9uRGVzdHJveSwgRW1iZWRkZWRWaWV3UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tqc3NFcnJvcl0nLFxyXG4gIGV4cG9ydEFzOiAnanNzRXJyb3InLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZW1iZWRlZFZpZXdSZWY/OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcclxuICBwcml2YXRlIF9maWVsZE5hbWUhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfZm9ybVN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9mb3JtU3VibWl0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2Vycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm06IE5nRm9ybSxcclxuICApIHtcclxuICAgIGlmICghX2Zvcm0pIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ0Vycm9yRGlyZWN0aXZlIG11c3QgYmUgdXNlZCBpbiBhIGZvcm0gZWxlbWVudC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZm9ybVN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX2Zvcm0uc3RhdHVzQ2hhbmdlcyEuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdO1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSBjb250cm9sLmVycm9ycztcclxuICAgICAgaWYgKGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQpKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvdyh0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zaG93KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZm9ybVN1Ym1pdFN1YnNjcmlwdGlvbiA9IHRoaXMuX2Zvcm0ubmdTdWJtaXQuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93KHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoJ2pzc0Vycm9yJykgc2V0IGZpZWxkTmFtZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9maWVsZE5hbWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9ycygpIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zvcm1TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2Zvcm1TdWJtaXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3coc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHNob3cgJiYgIXRoaXMuX2VtYmVkZWRWaWV3UmVmKSB7XHJcbiAgICAgIHRoaXMuX2VtYmVkZWRWaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xyXG4gICAgfSBlbHNlIGlmICghc2hvdyAmJiB0aGlzLl9lbWJlZGVkVmlld1JlZikge1xyXG4gICAgICB0aGlzLl9lbWJlZGVkVmlld1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuX2VtYmVkZWRWaWV3UmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=