Skip to content

Instantly share code, notes, and snippets.

@gparlakov
Last active October 20, 2021 11:43
Show Gist options
  • Save gparlakov/dd9a02f07201f1d554fde6ac43be76a8 to your computer and use it in GitHub Desktop.
Save gparlakov/dd9a02f07201f1d554fde6ac43be76a8 to your computer and use it in GitHub Desktop.
import { Directive, Input, TemplateRef } from '@angular/core';
@Directive({
selector: '[ifFeature]',
})
export class IfFeatureFlagDirective<IfTemplate, ElseTemplate> {
constructedForFlag?: string;
elseTemplate?: TemplateRef<ElseTemplate>;
flag?: string;
@Input('ifFeature')
set ifFeatureFlag(flag: string) {
this.flag = flag;
this.updateView();
}
@Input('ifFeatureElse')
set ifFeatureFlagNotPresent(t: TemplateRef<ElseTemplate>) {
this.elseTemplate = t;
}
private updateView() {
this.flags.checkIsOn(this.flag).subscribe((on) => {
this.viewContainerRef.clear();
if (on) {
this.viewContainerRef.createEmbeddedView(this.template);
} else if (this.elseTemplate != null) {
this.viewContainerRef.createEmbeddedView(this.elseTemplate);
} else {
this.viewContainerRef.clear();
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment