UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

90 lines 10.6 kB
/** * @packageDocumentation * @module utils */ import { ChangeDetectorRef, Directive, Input, TemplateRef, ViewContainerRef, // cspell: disable-next-line ɵstringify as stringify, } from '@angular/core'; import { distinctUntilChanged } from 'rxjs'; import { FeatureGateService } from '../services/feature-gate.service'; import * as i0 from "@angular/core"; import * as i1 from "../services/feature-gate.service"; /** * @example * ``` * <ng-container *aclFeatureGate="gate-name"></ng-container> * ``` */ export class FeatureGateDirective { set then(templateRef) { assertTemplate('aclFeatureGateThen', templateRef); this.thenTemplateRef = templateRef; } set else(templateRef) { assertTemplate('aclVersionGateElse', templateRef); this.elseTemplateRef = templateRef; } constructor(container, featureGate, crd, templateRef) { this.container = container; this.featureGate = featureGate; this.crd = crd; this.featureName = null; this.cluster = null; this.negate = false; this.thenTemplateRef = null; this.elseTemplateRef = null; this.subscription = null; this.thenTemplateRef = templateRef; } ngOnInit() { if (!this.featureName) { this.container.createEmbeddedView(this.thenTemplateRef); return; } this.subscription = this.featureGate[this.negate ? 'isNegateEnabled' : 'isEnabled'](this.featureName, this.cluster) .pipe(distinctUntilChanged()) .subscribe(enabled => { this.container.clear(); if (enabled) { this.container.createEmbeddedView(this.thenTemplateRef); } else if (this.elseTemplateRef) { this.container.createEmbeddedView(this.elseTemplateRef); } this.crd.markForCheck(); }); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } static { this.ɵfac = function FeatureGateDirective_Factory(t) { return new (t || FeatureGateDirective)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.FeatureGateService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.TemplateRef)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: FeatureGateDirective, selectors: [["", "aclFeatureGate", ""]], inputs: { featureName: [0, "aclFeatureGate", "featureName"], cluster: [0, "aclFeatureGateCluster", "cluster"], negate: [0, "aclFeatureGateNegate", "negate"], then: [0, "aclFeatureGateThen", "then"], else: [0, "aclFeatureGateElse", "else"] }, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FeatureGateDirective, [{ type: Directive, args: [{ selector: '[aclFeatureGate]', standalone: true }] }], () => [{ type: i0.ViewContainerRef }, { type: i1.FeatureGateService }, { type: i0.ChangeDetectorRef }, { type: i0.TemplateRef }], { featureName: [{ type: Input, args: ['aclFeatureGate'] }], cluster: [{ type: Input, args: ['aclFeatureGateCluster'] }], negate: [{ type: Input, args: ['aclFeatureGateNegate'] }], then: [{ type: Input, args: ['aclFeatureGateThen'] }], else: [{ type: Input, args: ['aclFeatureGateElse'] }] }); })(); function assertTemplate(property, templateRef) { const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView); if (!isTemplateRefOrNull) { throw new Error(`${property} must be a TemplateRef, but received '${stringify(templateRef)}'.`); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1nYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL2RpcmVjdGl2ZXMvZmVhdHVyZS1nYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBR0wsV0FBVyxFQUNYLGdCQUFnQjtBQUNoQiw0QkFBNEI7QUFDNUIsVUFBVSxJQUFJLFNBQVMsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBRXRFOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixJQUNJLElBQUksQ0FBQyxXQUE4QjtRQUNyQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELElBQ0ksSUFBSSxDQUFDLFdBQThCO1FBQ3JDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBT0QsWUFDbUIsU0FBMkIsRUFDM0IsV0FBK0IsRUFDL0IsR0FBc0IsRUFDdkMsV0FBOEI7UUFIYixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE1QnpDLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBRzNCLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFHdkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQWNoQixvQkFBZSxHQUFzQixJQUFJLENBQUM7UUFDMUMsb0JBQWUsR0FBc0IsSUFBSSxDQUFDO1FBRTFDLGlCQUFZLEdBQWlCLElBQUksQ0FBQztRQVF4QyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQzlDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzVCLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7cUZBN0RVLG9CQUFvQjtvRUFBcEIsb0JBQW9COztpRkFBcEIsb0JBQW9CO2NBRGhDLFNBQVM7ZUFBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOzRJQUczRCxXQUFXO2tCQURWLEtBQUs7bUJBQUMsZ0JBQWdCO1lBSXZCLE9BQU87a0JBRE4sS0FBSzttQkFBQyx1QkFBdUI7WUFJOUIsTUFBTTtrQkFETCxLQUFLO21CQUFDLHNCQUFzQjtZQUl6QixJQUFJO2tCQURQLEtBQUs7bUJBQUMsb0JBQW9CO1lBT3ZCLElBQUk7a0JBRFAsS0FBSzttQkFBQyxvQkFBb0I7O0FBZ0Q3QixTQUFTLGNBQWMsQ0FDckIsUUFBZ0IsRUFDaEIsV0FBb0M7SUFFcEMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FDNUIsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUMvQyxDQUFDO0lBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLFFBQVEseUNBQXlDLFNBQVMsQ0FDM0QsV0FBVyxDQUNaLElBQUksQ0FDTixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSB1dGlsc1xuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIC8vIGNzcGVsbDogZGlzYWJsZS1uZXh0LWxpbmVcbiAgybVzdHJpbmdpZnkgYXMgc3RyaW5naWZ5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmVhdHVyZUdhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmVhdHVyZS1nYXRlLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIDxuZy1jb250YWluZXIgKmFjbEZlYXR1cmVHYXRlPVwiZ2F0ZS1uYW1lXCI+PC9uZy1jb250YWluZXI+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2FjbEZlYXR1cmVHYXRlXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlR2F0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCdhY2xGZWF0dXJlR2F0ZScpXG4gIGZlYXR1cmVOYW1lOiBzdHJpbmcgPSBudWxsO1xuXG4gIEBJbnB1dCgnYWNsRmVhdHVyZUdhdGVDbHVzdGVyJylcbiAgY2x1c3Rlcjogc3RyaW5nID0gbnVsbDtcblxuICBASW5wdXQoJ2FjbEZlYXR1cmVHYXRlTmVnYXRlJylcbiAgbmVnYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCdhY2xGZWF0dXJlR2F0ZVRoZW4nKVxuICBzZXQgdGhlbih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dm9pZD4pIHtcbiAgICBhc3NlcnRUZW1wbGF0ZSgnYWNsRmVhdHVyZUdhdGVUaGVuJywgdGVtcGxhdGVSZWYpO1xuICAgIHRoaXMudGhlblRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gIH1cblxuICBASW5wdXQoJ2FjbEZlYXR1cmVHYXRlRWxzZScpXG4gIHNldCBlbHNlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx2b2lkPikge1xuICAgIGFzc2VydFRlbXBsYXRlKCdhY2xWZXJzaW9uR2F0ZUVsc2UnLCB0ZW1wbGF0ZVJlZik7XG4gICAgdGhpcy5lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIHByaXZhdGUgdGhlblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx2b2lkPiA9IG51bGw7XG4gIHByaXZhdGUgZWxzZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx2b2lkPiA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dm9pZD4sXG4gICkge1xuICAgIHRoaXMudGhlblRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZmVhdHVyZU5hbWUpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRoZW5UZW1wbGF0ZVJlZik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmZlYXR1cmVHYXRlW1xuICAgICAgdGhpcy5uZWdhdGUgPyAnaXNOZWdhdGVFbmFibGVkJyA6ICdpc0VuYWJsZWQnXG4gICAgXSh0aGlzLmZlYXR1cmVOYW1lLCB0aGlzLmNsdXN0ZXIpXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZShlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50aGVuVGVtcGxhdGVSZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxzZVRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuZWxzZVRlbXBsYXRlUmVmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRUZW1wbGF0ZShcbiAgcHJvcGVydHk6IHN0cmluZyxcbiAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsLFxuKTogdm9pZCB7XG4gIGNvbnN0IGlzVGVtcGxhdGVSZWZPck51bGwgPSAhIShcbiAgICAhdGVtcGxhdGVSZWYgfHwgdGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3XG4gICk7XG4gIGlmICghaXNUZW1wbGF0ZVJlZk9yTnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke3Byb3BlcnR5fSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtzdHJpbmdpZnkoXG4gICAgICAgIHRlbXBsYXRlUmVmLFxuICAgICAgKX0nLmAsXG4gICAgKTtcbiAgfVxufVxuIl19