UNPKG

@js-sugar/angular

Version:

JS-Sugar core package (Angular)

58 lines 7.73 kB
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=