@js-sugar/angular
Version:
JS-Sugar core package (Angular)
58 lines • 7.73 kB
JavaScript
import { Directive, Inject, Optional } from '@angular/core';
import { Locale, LOCALE } from '../../localization';
import * as i0 from "@angular/core";
import * as i1 from "./error.directive";
import * as i2 from "@angular/forms";
export class FirstErrorDirective {
constructor(_templateRef, _viewContainer, _errorDirective, _form, l) {
this._templateRef = _templateRef;
this._viewContainer = _viewContainer;
this._errorDirective = _errorDirective;
this._form = _form;
if (!_errorDirective) {
throw Error('FirstErrorDirective must be used inside a ErrorDirective.');
}
if (l) {
this._locale = l instanceof Locale ? l : l.get();
}
}
ngOnInit() {
this.showFirstError();
this._subscription = this._form.statusChanges.subscribe(s => {
const control = this._form.controls[this._errorDirective.fieldName];
if (control.invalid) {
this.showFirstError();
}
});
}
showFirstError() {
const errors = this._errorDirective.errors;
const firstErrorKey = Object.keys(errors)[0];
const firstError = errors[firstErrorKey];
const firstErrorText = this._locale.translateFirstError(errors);
this._viewContainer.clear();
this._viewContainer.createEmbeddedView(this._templateRef, { $implicit: firstError, errorText: firstErrorText });
}
ngOnDestroy() {
this._subscription.unsubscribe();
}
}
FirstErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FirstErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.ErrorDirective, optional: true }, { token: i2.NgForm, optional: true }, { token: LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
FirstErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: FirstErrorDirective, selector: "[jssFirstError]", exportAs: ["jssFirstError"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FirstErrorDirective, decorators: [{
type: Directive,
args: [{
selector: '[jssFirstError]',
exportAs: 'jssFirstError',
}]
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.ErrorDirective, decorators: [{
type: Optional
}] }, { type: i2.NgForm, decorators: [{
type: Optional
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [LOCALE]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyc3QtZXJyb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2Zvcm0vdmFsaWRhdGlvbi9maXJzdC1lcnJvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHOUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWtCLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFPcEUsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUNVLFlBQThCLEVBQzlCLGNBQWdDLEVBQ3BCLGVBQStCLEVBQy9CLEtBQWEsRUFDTCxDQUEwQjtRQUo5QyxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ3BCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBR2pDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUMxRTtRQUVELElBQUksQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQU0sQ0FBQyxhQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxNQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7O2dIQXpDVSxtQkFBbUIsaUtBU1IsTUFBTTtvR0FUakIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFLGVBQWU7aUJBQzFCOzswQkFRSSxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QsIE9wdGlvbmFsLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGUsIExPQ0FMRSwgTG9jYWxlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9sb2NhbGl6YXRpb24nO1xyXG5pbXBvcnQgeyBFcnJvckRpcmVjdGl2ZSB9IGZyb20gJy4vZXJyb3IuZGlyZWN0aXZlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2pzc0ZpcnN0RXJyb3JdJyxcclxuICBleHBvcnRBczogJ2pzc0ZpcnN0RXJyb3InLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlyc3RFcnJvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhbGU/OiBMb2NhbGU7XHJcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlOiBFcnJvckRpcmVjdGl2ZSxcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm06IE5nRm9ybSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxFKSBsOiBMb2NhbGUgfCBMb2NhbGVQcm92aWRlcixcclxuICApIHtcclxuICAgIGlmICghX2Vycm9yRGlyZWN0aXZlKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdGaXJzdEVycm9yRGlyZWN0aXZlIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBFcnJvckRpcmVjdGl2ZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobCkge1xyXG4gICAgICB0aGlzLl9sb2NhbGUgPSBsIGluc3RhbmNlb2YgTG9jYWxlID8gbCA6IGwuZ2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0ZpcnN0RXJyb3IoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHRoaXMuX2Zvcm0hLnN0YXR1c0NoYW5nZXMhLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2Zvcm0uY29udHJvbHNbdGhpcy5fZXJyb3JEaXJlY3RpdmUuZmllbGROYW1lXTtcclxuICAgICAgaWYgKGNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0ZpcnN0RXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93Rmlyc3RFcnJvcigpIHtcclxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2Vycm9yRGlyZWN0aXZlLmVycm9ycztcclxuICAgIGNvbnN0IGZpcnN0RXJyb3JLZXkgPSBPYmplY3Qua2V5cyhlcnJvcnMhKVswXTtcclxuICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBlcnJvcnMhW2ZpcnN0RXJyb3JLZXldO1xyXG4gICAgY29uc3QgZmlyc3RFcnJvclRleHQgPSB0aGlzLl9sb2NhbGUhLnRyYW5zbGF0ZUZpcnN0RXJyb3IoZXJyb3JzKTtcclxuICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmLCB7ICRpbXBsaWNpdDogZmlyc3RFcnJvciwgZXJyb3JUZXh0OiBmaXJzdEVycm9yVGV4dCB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=