UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

116 lines 15.8 kB
import { __decorate, __metadata } from "tslib"; import { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal'; import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, Directive, Injector, Input, Optional, Self, } from '@angular/core'; import { FormGroupDirective, NgControl, NgForm } from '@angular/forms'; import { Observable, Subject, merge, of, debounceTime, map, switchMap, takeUntil, } from 'rxjs'; import { ObservableInput } from '../../core/public-api'; import { BaseErrorsMapper } from './base-errors-mapper'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; export class ErrorsMapperDirective extends BaseErrorsMapper { constructor(injector, cdr, // eslint-disable-next-line sonar/deprecation cfr, appRef, control, ngForm, formGroup) { super(injector); this.injector = injector; this.cdr = cdr; this.cfr = cfr; this.appRef = appRef; this.control = control; this.ngForm = ngForm; this.formGroup = formGroup; this.destroy$ = new Subject(); } ngAfterViewInit() { if (!this.control) { throw new Error('Errors mapper is not properly configured. No valid control is found.'); } this.initPortal(); const statusChange = [this.control.statusChanges]; if (this.ngForm) { statusChange.push(this.ngForm.ngSubmit); } if (this.formGroup) { statusChange.push(this.formGroup.ngSubmit); } this.aclErrorsMapperDisabled$ .pipe(switchMap(isDisable => isDisable ? of(null) : merge(...statusChange, this.translate.locale$).pipe(debounceTime(50), map(() => this.getErrorMessage(this.control.errors, this.aclErrorsMapper || {}, this.aclErrorsMapperFn, this.aclErrorsMapperControlName)))), takeUntil(this.destroy$)) .subscribe(content => { this.updateContent(content); this.cdr.markForCheck(); }); } updateContent(content) { if (!content) { if (this.portalHost.hasAttached()) { this.portalHost.detach(); } return; } if (!this.portalHost.hasAttached()) { this.portalAttach = this.portalHost.attach(this.portal).instance; } this.portalAttach.data = content; this.portalAttach.cdr.markForCheck(); } initPortal() { this.portalHost = new DomPortalOutlet(this.aclErrorsMapperOutlet, this.cfr, this.appRef, this.injector); this.portal = new ComponentPortal(TextComponent); } ngOnDestroy() { this.destroy$.next(); this.portalHost.dispose(); } static { this.ɵfac = function ErrorsMapperDirective_Factory(t) { return new (t || ErrorsMapperDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i1.NgControl, 2), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormGroupDirective, 8)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: ErrorsMapperDirective, selectors: [["", "aclErrorsMapper", ""]], inputs: { aclErrorsMapper: "aclErrorsMapper", aclErrorsMapperFn: "aclErrorsMapperFn", aclErrorsMapperDisabled: "aclErrorsMapperDisabled", aclErrorsMapperOutlet: "aclErrorsMapperOutlet", aclErrorsMapperControlName: "aclErrorsMapperControlName" }, standalone: true, features: [i0.ɵɵInheritDefinitionFeature] }); } } __decorate([ ObservableInput(), __metadata("design:type", Observable) ], ErrorsMapperDirective.prototype, "aclErrorsMapperDisabled$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorsMapperDirective, [{ type: Directive, args: [{ selector: '[aclErrorsMapper]', standalone: true, }] }], () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i1.NgControl, decorators: [{ type: Self }] }, { type: i1.NgForm, decorators: [{ type: Optional }] }, { type: i1.FormGroupDirective, decorators: [{ type: Optional }] }], { aclErrorsMapper: [{ type: Input }], aclErrorsMapperFn: [{ type: Input }], aclErrorsMapperDisabled: [{ type: Input }], aclErrorsMapperDisabled$: [], aclErrorsMapperOutlet: [{ type: Input }], aclErrorsMapperControlName: [{ type: Input }] }); })(); class TextComponent { constructor(cdr) { this.cdr = cdr; } static { this.ɵfac = function TextComponent_Factory(t) { return new (t || TextComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextComponent, selectors: [["ng-component"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 1, vars: 1, template: function TextComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtext(0); } if (rf & 2) { i0.ɵɵtextInterpolate1(" ", ctx.data, " "); } }, encapsulation: 2, changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextComponent, [{ type: Component, args: [{ template: ` {{ data }} `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, }] }], () => [{ type: i0.ChangeDetectorRef }], null); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TextComponent, { className: "TextComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLW1hcHBlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvZm9ybS9lcnJvcnMtbWFwcGVyL2Vycm9ycy1tYXBwZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFFTCxjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxLQUFLLEVBQ0wsRUFBRSxFQUNGLFlBQVksRUFDWixHQUFHLEVBQ0gsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBT3hELE1BQU0sT0FBTyxxQkFDWCxTQUFRLGdCQUFnQjtJQWdDeEIsWUFDUyxRQUFrQixFQUNSLEdBQXNCO0lBQ3ZDLDZDQUE2QztJQUM1QixHQUE2QixFQUM3QixNQUFzQixFQUNkLE9BQWtCLEVBQ2QsTUFBYyxFQUUxQixTQUE2QjtRQUU5QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFWVCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFFdEIsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsV0FBTSxHQUFOLE1B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RUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQztzRkFuSFUscUJBQXFCO29FQUFyQixxQkFBcUI7O0FBaUJoQztJQURDLGVBQWUsRUFBRTs4QkFDUSxVQUFVO3VFQUFVO2lGQWpCbkMscUJBQXFCO2NBSmpDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixVQUFVLEVBQUUsSUFBSTthQUNqQjs7c0JBd0NJLElBQUk7O3NCQUNKLFFBQVE7O3NCQUNSLFFBQVE7cUJBcENYLGVBQWU7a0JBRGQsS0FBSztZQUlOLGlCQUFpQjtrQkFEaEIsS0FBSztZQUlOLHVCQUF1QjtrQkFEdEIsS0FBSztZQU9OLHdCQUF3QixNQU14QixxQkFBcUI7a0JBRHBCLEtBQUs7WUFJTiwwQkFBMEI7a0JBRHpCLEtBQUs7O0FBNkZSLE1BS00sYUFBYTtJQUVqQixZQUFtQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7OEVBRnpDLGFBQWE7b0VBQWIsYUFBYTtZQUpMLFlBQVc7O1lBQVgseUNBQVc7OztpRkFJbkIsYUFBYTtjQUxsQixTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxVQUFVLEVBQUUsSUFBSTthQUNqQjs7a0ZBQ0ssYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgRG9tUG9ydGFsT3V0bGV0LCBQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBEaXJlY3RpdmUsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgbWVyZ2UsXG4gIG9mLFxuICBkZWJvdW5jZVRpbWUsXG4gIG1hcCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdHJpbmdNYXAsIE9ic2VydmFibGVJbnB1dCB9IGZyb20gJy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IEJhc2VFcnJvcnNNYXBwZXIgfSBmcm9tICcuL2Jhc2UtZXJyb3JzLW1hcHBlcic7XG5pbXBvcnQgeyBFcnJvcnNNYXBwZXJGbiB9IGZyb20gJy4vdHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsRXJyb3JzTWFwcGVyXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEVycm9yc01hcHBlckRpcmVjdGl2ZVxuICBleHRlbmRzIEJhc2VFcnJvcnNNYXBwZXJcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgYWNsRXJyb3JzTWFwcGVyOiBTdHJpbmdNYXAgfCAnJztcblxuICBASW5wdXQoKVxuICBhY2xFcnJvcnNNYXBwZXJGbjogRXJyb3JzTWFwcGVyRm47XG5cbiAgQElucHV0KClcbiAgYWNsRXJyb3JzTWFwcGVyRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGRpc2FibGUgZXJyb3JzIG1hcHBlclxuICAgKi9cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGFjbEVycm9yc01hcHBlckRpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogc3BlY2lmeSBvdXRsZXQsIGNvbnNpZGVyIHRoaXMgb3RoZXIgdGhhbiBzcGVjaWZpYyBjb250cm9sIGVudGl0eSB0byBtYWtlIHN1cmUgZGkgY2FuIGFsd2F5cyBnZXQgbmdGb3JtXG4gICAqL1xuICBASW5wdXQoKVxuICBhY2xFcnJvcnNNYXBwZXJPdXRsZXQ6IEVsZW1lbnQ7XG5cbiAgQElucHV0KClcbiAgYWNsRXJyb3JzTWFwcGVyQ29udHJvbE5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHBvcnRhbDogUG9ydGFsPGFueT47XG4gIHByaXZhdGUgcG9ydGFsSG9zdDogRG9tUG9ydGFsT3V0bGV0O1xuICBwcml2YXRlIHBvcnRhbEF0dGFjaDogVGV4dENvbXBvbmVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyL2RlcHJlY2F0aW9uXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IG5nRm9ybTogTmdGb3JtLFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFcnJvcnMgbWFwcGVyIGlzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkLiBObyB2YWxpZCBjb250cm9sIGlzIGZvdW5kLicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmluaXRQb3J0YWwoKTtcbiAgICBjb25zdCBzdGF0dXNDaGFuZ2UgPSBbdGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXNdO1xuXG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICBzdGF0dXNDaGFuZ2UucHVzaCh0aGlzLm5nRm9ybS5uZ1N1Ym1pdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgc3RhdHVzQ2hhbmdlLnB1c2godGhpcy5mb3JtR3JvdXAubmdTdWJtaXQpO1xuICAgIH1cblxuICAgIHRoaXMuYWNsRXJyb3JzTWFwcGVyRGlzYWJsZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGlzRGlzYWJsZSA9PlxuICAgICAgICAgIGlzRGlzYWJsZVxuICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgOiBtZXJnZSguLi5zdGF0dXNDaGFuZ2UsIHRoaXMudHJhbnNsYXRlLmxvY2FsZSQpLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjbEVycm9yc01hcHBlciB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2xFcnJvcnNNYXBwZXJGbixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2xFcnJvcnNNYXBwZXJDb250cm9sTmFtZSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShjb250ZW50ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDb250ZW50KGNvbnRlbnQpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQ29udGVudChjb250ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIGlmICh0aGlzLnBvcnRhbEhvc3QuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgICB0aGlzLnBvcnRhbEhvc3QuZGV0YWNoKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5wb3J0YWxIb3N0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRoaXMucG9ydGFsQXR0YWNoID0gdGhpcy5wb3J0YWxIb3N0LmF0dGFjaCh0aGlzLnBvcnRhbCkuaW5zdGFuY2U7XG4gICAgfVxuICAgIHRoaXMucG9ydGFsQXR0YWNoLmRhdGEgPSBjb250ZW50O1xuICAgIHRoaXMucG9ydGFsQXR0YWNoLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGluaXRQb3J0YWwoKSB7XG4gICAgdGhpcy5wb3J0YWxIb3N0ID0gbmV3IERvbVBvcnRhbE91dGxldChcbiAgICAgIHRoaXMuYWNsRXJyb3JzTWFwcGVyT3V0bGV0LFxuICAgICAgdGhpcy5jZnIsXG4gICAgICB0aGlzLmFwcFJlZixcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgKTtcbiAgICB0aGlzLnBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoVGV4dENvbXBvbmVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLnBvcnRhbEhvc3QuZGlzcG9zZSgpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYCB7eyBkYXRhIH19IGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmNsYXNzIFRleHRDb21wb25lbnQge1xuICBkYXRhOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxufVxuIl19