Skip to content

Instantly share code, notes, and snippets.

@jonrimmer
Last active August 22, 2023 17:03
Show Gist options
  • Save jonrimmer/eaabd619e2edeaebed83b7bc68f33daf to your computer and use it in GitHub Desktop.
Save jonrimmer/eaabd619e2edeaebed83b7bc68f33daf to your computer and use it in GitHub Desktop.
jrSwitchCases
import { Directive, Input, Host, TemplateRef, ViewContainerRef, OnInit, DoCheck } from '@angular/core';
import { NgSwitch } from '@angular/common';
@Directive({
selector: '[jrSwitchCases]'
})
export class SwitchCasesDirective implements OnInit, DoCheck {
private ngSwitch: any;
private _created = false;
@Input()
jrSwitchCases: any[];
constructor(
private viewContainer: ViewContainerRef,
private templateRef: TemplateRef<Object>,
@Host() ngSwitch: NgSwitch
) {
this.ngSwitch = ngSwitch;
}
ngOnInit() {
(this.jrSwitchCases || []).forEach(() => this.ngSwitch._addCase());
}
ngDoCheck() {
let enforce = false;
(this.jrSwitchCases || []).forEach(value => enforce = this.ngSwitch._matchCase(value) || enforce));
this.enforceState(enforce);
}
enforceState(created: boolean) {
if (created && !this._created) {
this._created = true;
this.viewContainer.createEmbeddedView(this.templateRef);
} else if (!created && this._created) {
this._created = false;
this.viewContainer.clear();
}
}
}
@taheria
Copy link

taheria commented Aug 11, 2023

Works well, thanks ❤️

@xSaraKemily
Copy link

xSaraKemily commented Aug 22, 2023

Thanks for sharing! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment