From f7375e9064e16f5998700ce0516aad85818de54d Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 8 Mar 2022 15:21:49 +0100 Subject: [PATCH] Add premium and unless-premium directives (#710) --- .../src/directives/not-premium.directive.ts | 27 +++++++++++++++++++ angular/src/directives/premium.directive.ts | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 angular/src/directives/not-premium.directive.ts create mode 100644 angular/src/directives/premium.directive.ts diff --git a/angular/src/directives/not-premium.directive.ts b/angular/src/directives/not-premium.directive.ts new file mode 100644 index 0000000000..15a01f7146 --- /dev/null +++ b/angular/src/directives/not-premium.directive.ts @@ -0,0 +1,27 @@ +import { Directive, OnInit, TemplateRef, ViewContainerRef } from "@angular/core"; + +import { StateService } from "jslib-common/abstractions/state.service"; + +/** + * Hides the element if the user has premium. + */ +@Directive({ + selector: "[appNotPremium]", +}) +export class NotPremiumDirective implements OnInit { + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + private stateService: StateService + ) {} + + async ngOnInit(): Promise { + const premium = await this.stateService.getCanAccessPremium(); + + if (premium) { + this.viewContainer.clear(); + } else { + this.viewContainer.createEmbeddedView(this.templateRef); + } + } +} diff --git a/angular/src/directives/premium.directive.ts b/angular/src/directives/premium.directive.ts new file mode 100644 index 0000000000..c403f5b9b6 --- /dev/null +++ b/angular/src/directives/premium.directive.ts @@ -0,0 +1,27 @@ +import { Directive, OnInit, TemplateRef, ViewContainerRef } from "@angular/core"; + +import { StateService } from "jslib-common/abstractions/state.service"; + +/** + * Only shows the element if the user has premium. + */ +@Directive({ + selector: "[appPremium]", +}) +export class PremiumDirective implements OnInit { + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + private stateService: StateService + ) {} + + async ngOnInit(): Promise { + const premium = await this.stateService.getCanAccessPremium(); + + if (premium) { + this.viewContainer.createEmbeddedView(this.templateRef); + } else { + this.viewContainer.clear(); + } + } +}