UNPKG

@ui-tool/core

Version:
88 lines 12.1 kB
import { Directive, Inject, Input } from '@angular/core'; import { REQUIREMENT_SENTINEL_SERVICE } from '../../../constants/injectors/injectors'; import { of, Subject, Subscription } from 'rxjs'; import { catchError, distinctUntilChanged, switchMap } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class RequirementSentinelDirective { //#endregion //#region Constructor constructor(_meetRequirementService, _viewContainerRef, _templateRef) { this._meetRequirementService = _meetRequirementService; this._viewContainerRef = _viewContainerRef; this._templateRef = _templateRef; this.__requirement = undefined; this.__displayContent$ = new Subject(); this.__subscription = new Subscription(); } //#endregion //#region Accessors set requirement(value) { this.__requirement = value; this.__displayContent$.next(); } set elseTemplate(value) { this.__elseTemplateRef = value; this.__displayContent$.next(); } set context(value) { this.__context = value; this.__displayContent$.next(); } //#endregion //#region Life cycles ngOnInit() { // Display feature subscription. const displayContentSubscription = this.__displayContent$ .pipe(switchMap(() => { return this._meetRequirementService .shouldRequirementMetAsync(this.__requirement || '', this.__context) .pipe(catchError(_ => of(false))); }), distinctUntilChanged()) .subscribe(ableToAccessFeature => { this._viewContainerRef.clear(); if (!ableToAccessFeature) { if (this.__elseTemplateRef) { const elseView = this._viewContainerRef.createEmbeddedView(this.__elseTemplateRef); elseView.markForCheck(); } return; } const embeddedView = this._viewContainerRef.createEmbeddedView(this._templateRef); embeddedView.markForCheck(); }); this.__subscription.add(displayContentSubscription); // Hook validation event from service. const hookValidationEventSubscription = this._meetRequirementService .hookValidationEventAsync() .subscribe(() => { this.__displayContent$.next(); }); this.__subscription.add(hookValidationEventSubscription); // Do the first requirement check. this.__displayContent$.next(); } ngOnDestroy() { this.__subscription?.unsubscribe(); } } RequirementSentinelDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RequirementSentinelDirective, deps: [{ token: REQUIREMENT_SENTINEL_SERVICE }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); RequirementSentinelDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: RequirementSentinelDirective, selector: "[meetRequirement]", inputs: { requirement: ["meetRequirement", "requirement"], elseTemplate: ["meetRequirementElse", "elseTemplate"], context: ["meetRequirementContext", "context"] }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RequirementSentinelDirective, decorators: [{ type: Directive, args: [{ selector: '[meetRequirement]' }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [REQUIREMENT_SENTINEL_SERVICE] }] }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { requirement: [{ type: Input, args: ['meetRequirement'] }], elseTemplate: [{ type: Input, args: ['meetRequirementElse'] }], context: [{ type: Input, args: ['meetRequirementContext'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZW1lbnQtc2VudGluZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9tb2R1bGVzL3NlbnRpbmVsL3JlcXVpcmVtZW50LXNlbnRpbmVsL3JlcXVpcmVtZW50LXNlbnRpbmVsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQU0zRSxNQUFNLE9BQU8sNEJBQTRCO0lBdUN2QyxZQUFZO0lBRVoscUJBQXFCO0lBRXJCLFlBRXFCLHVCQUFnRCxFQUNoRCxpQkFBbUMsRUFDbkMsWUFBOEI7UUFGOUIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQWxDRCxZQUFZO0lBRVosbUJBQW1CO0lBRW5CLElBQ1csV0FBVyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNXLFlBQVksQ0FBQyxLQUF1QjtRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFDVyxPQUFPLENBQUMsS0FBeUI7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFnQkQsWUFBWTtJQUVaLHFCQUFxQjtJQUVkLFFBQVE7UUFFYixnQ0FBZ0M7UUFDaEMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsaUJBQWlCO2FBQ3RELElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsdUJBQXVCO2lCQUNoQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUNuRSxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzNCLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxDQUN2QjthQUNBLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ25GLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDekI7Z0JBQ0QsT0FBTzthQUNSO1lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRixZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRXBELHNDQUFzQztRQUN0QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQyx1QkFBdUI7YUFDakUsd0JBQXdCLEVBQUU7YUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFHekQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7OzBIQXJHVSw0QkFBNEIsa0JBNEM3Qiw0QkFBNEI7OEdBNUMzQiw0QkFBNEI7NEZBQTVCLDRCQUE0QjtrQkFIeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2lCQUM5Qjs7MEJBNkNJLE1BQU07MkJBQUMsNEJBQTRCO3FHQXRCM0IsV0FBVztzQkFEckIsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBT2IsWUFBWTtzQkFEdEIsS0FBSzt1QkFBQyxxQkFBcUI7Z0JBT2pCLE9BQU87c0JBRGpCLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JFUVVJUkVNRU5UX1NFTlRJTkVMX1NFUlZJQ0V9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9pbmplY3RvcnMvaW5qZWN0b3JzJztcbmltcG9ydCB7b2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SU1lZXRSZXF1aXJlbWVudFNlcnZpY2V9IGZyb20gJy4vcmVxdWlyZW1lbnQtc2VudGluZWwtc2VydmljZS5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWVldFJlcXVpcmVtZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgUmVxdWlyZW1lbnRTZW50aW5lbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvLyNyZWdpb24gUHJvcGVydGllc1xuXG4gIC8vIE5hbWUgb2YgcmVxdWlyZW1lbnQgd2hpY2ggbXVzdCBiZSBzYXRpc2ZpZWQuXG4gIHByaXZhdGUgX19yZXF1aXJlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX19lbHNlVGVtcGxhdGVSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgX19jb250ZXh0Pzogb2JqZWN0O1xuXG4gIC8vIFJhaXNlIGV2ZW50IGFib3V0IGRpc3BsYXlpbmcgZmVhdHVyZSBjb250ZW50LlxuICBwcml2YXRlIF9fZGlzcGxheUNvbnRlbnQkOiBTdWJqZWN0PHZvaWQ+O1xuXG4gIC8vIFN1YnNjcmlwdGlvbiB3YXRjaCBsaXN0LlxuICBwcml2YXRlIHJlYWRvbmx5IF9fc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEFjY2Vzc29yc1xuXG4gIEBJbnB1dCgnbWVldFJlcXVpcmVtZW50JylcbiAgcHVibGljIHNldCByZXF1aXJlbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fX3JlcXVpcmVtZW50ID0gdmFsdWU7XG4gICAgdGhpcy5fX2Rpc3BsYXlDb250ZW50JC5uZXh0KCk7XG4gIH1cblxuICBASW5wdXQoJ21lZXRSZXF1aXJlbWVudEVsc2UnKVxuICBwdWJsaWMgc2V0IGVsc2VUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX19lbHNlVGVtcGxhdGVSZWYgPSB2YWx1ZTtcbiAgICB0aGlzLl9fZGlzcGxheUNvbnRlbnQkLm5leHQoKTtcbiAgfVxuXG4gIEBJbnB1dCgnbWVldFJlcXVpcmVtZW50Q29udGV4dCcpXG4gIHB1YmxpYyBzZXQgY29udGV4dCh2YWx1ZTogb2JqZWN0IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fX2NvbnRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLl9fZGlzcGxheUNvbnRlbnQkLm5leHQoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBDb25zdHJ1Y3RvclxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFJFUVVJUkVNRU5UX1NFTlRJTkVMX1NFUlZJQ0UpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tZWV0UmVxdWlyZW1lbnRTZXJ2aWNlOiBJTWVldFJlcXVpcmVtZW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX19yZXF1aXJlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9fZGlzcGxheUNvbnRlbnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLl9fc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIExpZmUgY3ljbGVzXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgLy8gRGlzcGxheSBmZWF0dXJlIHN1YnNjcmlwdGlvbi5cbiAgICBjb25zdCBkaXNwbGF5Q29udGVudFN1YnNjcmlwdGlvbiA9IHRoaXMuX19kaXNwbGF5Q29udGVudCRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9tZWV0UmVxdWlyZW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAuc2hvdWxkUmVxdWlyZW1lbnRNZXRBc3luYyh0aGlzLl9fcmVxdWlyZW1lbnQgfHwgJycsIHRoaXMuX19jb250ZXh0KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoXyA9PiBvZihmYWxzZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhYmxlVG9BY2Nlc3NGZWF0dXJlID0+IHtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICBpZiAoIWFibGVUb0FjY2Vzc0ZlYXR1cmUpIHtcbiAgICAgICAgICBpZiAodGhpcy5fX2Vsc2VUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgY29uc3QgZWxzZVZpZXcgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9fZWxzZVRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgIGVsc2VWaWV3Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbWJlZGRlZFZpZXcgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZik7XG4gICAgICAgIGVtYmVkZGVkVmlldy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuX19zdWJzY3JpcHRpb24uYWRkKGRpc3BsYXlDb250ZW50U3Vic2NyaXB0aW9uKTtcblxuICAgIC8vIEhvb2sgdmFsaWRhdGlvbiBldmVudCBmcm9tIHNlcnZpY2UuXG4gICAgY29uc3QgaG9va1ZhbGlkYXRpb25FdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuX21lZXRSZXF1aXJlbWVudFNlcnZpY2VcbiAgICAgIC5ob29rVmFsaWRhdGlvbkV2ZW50QXN5bmMoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX19kaXNwbGF5Q29udGVudCQubmV4dCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5fX3N1YnNjcmlwdGlvbi5hZGQoaG9va1ZhbGlkYXRpb25FdmVudFN1YnNjcmlwdGlvbik7XG5cblxuICAgIC8vIERvIHRoZSBmaXJzdCByZXF1aXJlbWVudCBjaGVjay5cbiAgICB0aGlzLl9fZGlzcGxheUNvbnRlbnQkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=