ngx-feature-toggle-demo
Version:
Your module to handle with feature toggles in Angular applications easier.
40 lines (33 loc) • 1.3 kB
text/typescript
import { Injectable, isDevMode } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Route } from '@angular/router';
import { isOn } from 'feature-toggle-service';
({ providedIn: 'root' })
export class NgxFeatureToggleCanActivateGuard implements CanActivate {
isDevMode() {
return isDevMode();
}
canActivate(route: ActivatedRouteSnapshot | Route): boolean {
const DEV_MODE = this.isDevMode();
if (!route || !route.data || !route.data.featureToggle) {
if (DEV_MODE) {
console.error(
'`NgxFeatureToggleCanActivateGuard` need to receive `featureToggle` as data in your route configuration.'
);
}
return false;
}
const isFeatureToggleOn = (toggle) =>
toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle);
if (typeof route.data.featureToggle === 'string') {
return isFeatureToggleOn(route.data.featureToggle as string);
} else if (Array.isArray(route.data.featureToggle)) {
return (route.data.featureToggle as string[]).every(isFeatureToggleOn);
}
if (DEV_MODE) {
console.error(
'`NgxFeatureToggleCanActivateGuard` need to receive `featureToggle` as data as an array or string in your route configuration.'
);
}
return false;
}
}