Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 1x 9x 9x 9x 8x 8x 1x 1x 7x 7x 7x 3x | import { Directive, inject, Input, OnChanges, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { Store } from '@ngrx/store';
import { tap } from 'rxjs/operators';
import { IFeatureAccessState } from '../../feature-access.interface';
import { featureAccessSelector } from '../../feature-access.selectors';
interface IInputChanges extends SimpleChanges {
appFeatureFlag: SimpleChange;
}
@Directive({
selector: '[appFeatureFlag]',
standalone: false,
})
export class AppFeatureFlagDirective implements OnChanges {
private readonly viewContainer = inject(ViewContainerRef);
private readonly template = inject(TemplateRef<unknown>);
private readonly store = inject(Store<IFeatureAccessState>);
@Input() public appFeatureFlag?: string | null;
public ngOnChanges(changes: IInputChanges) {
const value: string | null | undefined = changes.appFeatureFlag.currentValue;
if (value === null) {
this.viewContainer.createEmbeddedView(this.template);
return;
}
const featureSelector =
typeof value === 'undefined' || value === '' ? featureAccessSelector.enable : featureAccessSelector.enableFeature(value);
void this.store
.select(featureSelector)
.pipe(
tap(flagValue => {
if (flagValue) {
this.viewContainer.createEmbeddedView(this.template);
}
}),
)
.subscribe();
}
}
|