@js-sugar/angular
Version:
JS-Sugar core package (Angular)
66 lines • 8.12 kB
JavaScript
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=