ngx-feature-toggle
Version:
Your module to handle with feature toggles in Angular applications easier.
51 lines • 6.5 kB
JavaScript
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=