ngx-nullish
Version:
🔨 Angular Structural Directive which replace *ngIf by Nullish Coalescing operator
46 lines • 4.98 kB
JavaScript
import { __decorate } from "tslib";
import { Directive, TemplateRef, ViewContainerRef, Input } from '@angular/core';
// Inspired by *ngIf:
// https://github.com/angular/angular/blob/master/packages/common/src/directives/ng_if.ts
let NgxNullishDirective = class NgxNullishDirective {
constructor(templateRef, viewContainer) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.hasView = false;
this.context = {
ngxNullish: undefined,
$implicit: undefined,
};
}
static ngTemplateContextGuard(dir, ctx) {
return true;
}
set ngxNullish(condition) {
this.context.$implicit = this.context.ngxNullish = condition;
this._updateView();
}
_updateView() {
if (this.context.$implicit != null && this.hasView) {
this.viewContainer.createEmbeddedView(this.templateRef, this.context);
this.hasView = false;
}
else if (this.context.$implicit == null && !this.hasView) {
this.viewContainer.clear();
this.hasView = true;
}
}
};
NgxNullishDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
__decorate([
Input()
], NgxNullishDirective.prototype, "ngxNullish", null);
NgxNullishDirective = __decorate([
Directive({
selector: '[ngxNullish]',
})
], NgxNullishDirective);
export { NgxNullishDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW51bGxpc2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW51bGxpc2gvIiwic291cmNlcyI6WyJsaWIvbmd4LW51bGxpc2guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEYscUJBQXFCO0FBQ3JCLHlGQUF5RjtBQUt6RixJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFtQjtJQStCOUIsWUFDVSxXQUE2QixFQUM3QixhQUErQjtRQUQvQixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUJqQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBK0I7WUFDNUMsVUFBVSxFQUFFLFNBQVM7WUFDckIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztJQTJCQyxDQUFDO0lBekJKLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDM0IsR0FBMkIsRUFDM0IsR0FBK0I7UUFFL0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVEsSUFBSSxVQUFVLENBQUMsU0FBWTtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztDQU1GLENBQUE7O1lBSHdCLFdBQVc7WUFDVCxnQkFBZ0I7O0FBakJoQztJQUFSLEtBQUssRUFBRTtxREFHUDtBQW5CVSxtQkFBbUI7SUFIL0IsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLGNBQWM7S0FDekIsQ0FBQztHQUNXLG1CQUFtQixDQW1DL0I7U0FuQ1ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gSW5zcGlyZWQgYnkgKm5nSWY6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2NvbW1vbi9zcmMvZGlyZWN0aXZlcy9uZ19pZi50c1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4TnVsbGlzaF0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hOdWxsaXNoRGlyZWN0aXZlPFQgPSB1bmtub3duPiB7XG4gIHN0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmd4TnVsbGlzaDogJ2JpbmRpbmcnO1xuXG4gIHByaXZhdGUgaGFzVmlldyA9IGZhbHNlO1xuICBwcml2YXRlIGNvbnRleHQ6IE51bGxpc2hEaXJlY3RpdmVDb250ZXh0PFQ+ID0ge1xuICAgIG5neE51bGxpc2g6IHVuZGVmaW5lZCxcbiAgICAkaW1wbGljaXQ6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxUPihcbiAgICBkaXI6IE5neE51bGxpc2hEaXJlY3RpdmU8VD4sXG4gICAgY3R4OiBOdWxsaXNoRGlyZWN0aXZlQ29udGV4dDxUPlxuICApOiBjdHggaXMgTnVsbGlzaERpcmVjdGl2ZUNvbnRleHQ8Tm9uTnVsbGFibGU8VD4+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBuZ3hOdWxsaXNoKGNvbmRpdGlvbjogVCkge1xuICAgIHRoaXMuY29udGV4dC4kaW1wbGljaXQgPSB0aGlzLmNvbnRleHQubmd4TnVsbGlzaCA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLl91cGRhdGVWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaWV3KCkge1xuICAgIGlmICh0aGlzLmNvbnRleHQuJGltcGxpY2l0ICE9IG51bGwgJiYgdGhpcy5oYXNWaWV3KSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHRoaXMuY29udGV4dCk7XG4gICAgICB0aGlzLmhhc1ZpZXcgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dC4kaW1wbGljaXQgPT0gbnVsbCAmJiAhdGhpcy5oYXNWaWV3KSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIHRoaXMuaGFzVmlldyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBOdWxsaXNoRGlyZWN0aXZlQ29udGV4dDxUPiA9IHsgbmd4TnVsbGlzaDogVDsgJGltcGxpY2l0OiBUIH07XG4iXX0=