diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index 70365e0593..0ab66059a8 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -72,6 +72,21 @@ export class ConfigStateService { return this.store.sliceState(state => state.features?.values?.[key]); } + getFeatures(keys: string[]) { + const { features } = this.store.state; + if (!features) return; + + return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {}); + } + + getFeatures$(keys: string[]) { + return this.store.sliceState(({ features }) => { + if (!features?.values) return; + + return keys.reduce((acc, key) => ({ ...acc, [key]: features.values[key] }), {}); + }); + } + getSetting(key: string) { return this.store.state.setting?.values?.[key]; } diff --git a/npm/ng-packs/packages/core/src/lib/utils/factory-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/factory-utils.ts index bc6273fa82..c9542f3dba 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/factory-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/factory-utils.ts @@ -7,6 +7,8 @@ import { StaticProvider, Type, } from '@angular/core'; +import { filter, map } from 'rxjs/operators'; +import { ConfigStateService } from '../services/config-state.service'; export class LazyModuleFactory extends NgModuleFactory { get moduleType(): Type { @@ -29,3 +31,11 @@ export class LazyModuleFactory extends NgModuleFactory { return factory.create(injector); } } + +export function featuresFactory( + configState: ConfigStateService, + featureKeys: string[], + mapFn: (features) => any = features => features, +) { + return configState.getFeatures$(featureKeys).pipe(filter(Boolean), map(mapFn)); +}