UNPKG

ngx-feature-toggle

Version:

Your module to handle with feature toggles in Angular applications easier.

51 lines 6.5 kB
import { Directive, Input, isDevMode } from '@angular/core'; import { isOn } from 'feature-toggle-service'; import * as i0 from "@angular/core"; export class FeatureToggleDirective { constructor(templateRef, viewContainer) { this.templateRef = templateRef; this.viewContainer = viewContainer; this.isOn = false; } ngOnInit() { if (!this.featureToggle) { throw new Error('Attribute `featureToggle` should not be null or empty'); } this.shouldRender(); } ngDoCheck() { if (this.isOn !== this.isOnCheck(this.featureToggle)) { this.shouldRender(); } } shouldRender() { this.isOn = this.isOnCheck(this.featureToggle); if (this.isOn) { this.viewContainer.createEmbeddedView(this.templateRef); } else { this.viewContainer.clear(); } } isOnCheck(featureToggle) { if (typeof featureToggle !== 'string' && !Array.isArray(featureToggle)) { if (isDevMode()) { console.error('`NgxFeatureToggle`: `featureToggle` should receive an array or an string as a value.'); } return false; } return [].concat(featureToggle).every(toggle => toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle)); } } /** @nocollapse */ FeatureToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: FeatureToggleDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ FeatureToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.5", type: FeatureToggleDirective, selector: "[featureToggle]", inputs: { featureToggle: "featureToggle" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: FeatureToggleDirective, decorators: [{ type: Directive, args: [{ // tslint:disable-next-line: directive-selector selector: '[featureToggle]', }] }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { featureToggle: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZlYXR1cmUtdG9nZ2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mZWF0dXJlLXRvZ2dsZS9zcmMvbGliL25neC1mZWF0dXJlLXRvZ2dsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWtELFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBb0IsV0FBNkIsRUFBVSxhQUErQjtRQUF0RSxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFGbEYsU0FBSSxHQUFHLEtBQUssQ0FBQztJQUV3RSxDQUFDO0lBRTlGLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsYUFBNEM7UUFDcEQsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3RFLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxzRkFBc0YsQ0FBQyxDQUFDO2FBQ3ZHO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFvQixDQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2xFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDbEUsQ0FBQztJQUNKLENBQUM7O3NJQXZDVSxzQkFBc0I7MEhBQXRCLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULCtDQUErQztvQkFDL0MsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7aUlBRWlCLGFBQWE7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBEb0NoZWNrLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgaXNPbiB9IGZyb20gJ2ZlYXR1cmUtdG9nZ2xlLXNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbZmVhdHVyZVRvZ2dsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcbiAgQElucHV0KCkgcHVibGljIGZlYXR1cmVUb2dnbGU6IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzT24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVUb2dnbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIGBmZWF0dXJlVG9nZ2xlYCBzaG91bGQgbm90IGJlIG51bGwgb3IgZW1wdHknKTtcbiAgICB9XG4gICAgdGhpcy5zaG91bGRSZW5kZXIoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5pc09uICE9PSB0aGlzLmlzT25DaGVjayh0aGlzLmZlYXR1cmVUb2dnbGUpKSB7XG4gICAgICB0aGlzLnNob3VsZFJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVuZGVyKCkge1xuICAgIHRoaXMuaXNPbiA9IHRoaXMuaXNPbkNoZWNrKHRoaXMuZmVhdHVyZVRvZ2dsZSk7XG4gICAgaWYgKHRoaXMuaXNPbikge1xuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgaXNPbkNoZWNrKGZlYXR1cmVUb2dnbGU6IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlVG9nZ2xlICE9PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShmZWF0dXJlVG9nZ2xlKSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BOZ3hGZWF0dXJlVG9nZ2xlYDogYGZlYXR1cmVUb2dnbGVgIHNob3VsZCByZWNlaXZlIGFuIGFycmF5IG9yIGFuIHN0cmluZyBhcyBhIHZhbHVlLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAoW10uY29uY2F0KGZlYXR1cmVUb2dnbGUgYXMgYW55KSBhcyBzdHJpbmdbXSkuZXZlcnkodG9nZ2xlID0+XG4gICAgICB0b2dnbGVbMF0gPT09ICchJyA/ICFpc09uKHRvZ2dsZS5yZXBsYWNlKCchJywgJycpKSA6IGlzT24odG9nZ2xlKSxcbiAgICApO1xuICB9XG59XG4iXX0=