ngx-nullish
Version:
🔨 Angular Structural Directive which replace *ngIf by Nullish Coalescing operator
51 lines • 5.33 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
var NgxNullishDirective = /** @class */ (function () {
function NgxNullishDirective(templateRef, viewContainer) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.hasView = false;
this.context = {
ngxNullish: undefined,
$implicit: undefined,
};
}
NgxNullishDirective.ngTemplateContextGuard = function (dir, ctx) {
return true;
};
Object.defineProperty(NgxNullishDirective.prototype, "ngxNullish", {
set: function (condition) {
this.context.$implicit = this.context.ngxNullish = condition;
this._updateView();
},
enumerable: true,
configurable: true
});
NgxNullishDirective.prototype._updateView = function () {
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 = function () { return [
{ type: TemplateRef },
{ type: ViewContainerRef }
]; };
__decorate([
Input()
], NgxNullishDirective.prototype, "ngxNullish", null);
NgxNullishDirective = __decorate([
Directive({
selector: '[ngxNullish]',
})
], NgxNullishDirective);
return NgxNullishDirective;
}());
export { NgxNullishDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW51bGxpc2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW51bGxpc2gvIiwic291cmNlcyI6WyJsaWIvbmd4LW51bGxpc2guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEYscUJBQXFCO0FBQ3JCLHlGQUF5RjtBQUt6RjtJQStCRSw2QkFDVSxXQUE2QixFQUM3QixhQUErQjtRQUQvQixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUJqQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBK0I7WUFDNUMsVUFBVSxFQUFFLFNBQVM7WUFDckIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztJQTJCQyxDQUFDO0lBekJHLDBDQUFzQixHQUE3QixVQUNFLEdBQTJCLEVBQzNCLEdBQStCO1FBRS9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVRLHNCQUFJLDJDQUFVO2FBQWQsVUFBZSxTQUFZO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQzs7O09BQUE7SUFFTyx5Q0FBVyxHQUFuQjtRQUNFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQzs7Z0JBR3NCLFdBQVc7Z0JBQ1QsZ0JBQWdCOztJQWpCaEM7UUFBUixLQUFLLEVBQUU7eURBR1A7SUFuQlUsbUJBQW1CO1FBSC9CLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxjQUFjO1NBQ3pCLENBQUM7T0FDVyxtQkFBbUIsQ0FtQy9CO0lBQUQsMEJBQUM7Q0FBQSxBQW5DRCxJQW1DQztTQW5DWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBJbnNwaXJlZCBieSAqbmdJZjpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvY29tbW9uL3NyYy9kaXJlY3RpdmVzL25nX2lmLnRzXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hOdWxsaXNoXScsXG59KVxuZXhwb3J0IGNsYXNzIE5neE51bGxpc2hEaXJlY3RpdmU8VCA9IHVua25vd24+IHtcbiAgc3RhdGljIG5nVGVtcGxhdGVHdWFyZF9uZ3hOdWxsaXNoOiAnYmluZGluZyc7XG5cbiAgcHJpdmF0ZSBoYXNWaWV3ID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGV4dDogTnVsbGlzaERpcmVjdGl2ZUNvbnRleHQ8VD4gPSB7XG4gICAgbmd4TnVsbGlzaDogdW5kZWZpbmVkLFxuICAgICRpbXBsaWNpdDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFQ+KFxuICAgIGRpcjogTmd4TnVsbGlzaERpcmVjdGl2ZTxUPixcbiAgICBjdHg6IE51bGxpc2hEaXJlY3RpdmVDb250ZXh0PFQ+XG4gICk6IGN0eCBpcyBOdWxsaXNoRGlyZWN0aXZlQ29udGV4dDxOb25OdWxsYWJsZTxUPj4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IG5neE51bGxpc2goY29uZGl0aW9uOiBUKSB7XG4gICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMuY29udGV4dC5uZ3hOdWxsaXNoID0gY29uZGl0aW9uO1xuICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpZXcoKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dC4kaW1wbGljaXQgIT0gbnVsbCAmJiB0aGlzLmhhc1ZpZXcpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZiwgdGhpcy5jb250ZXh0KTtcbiAgICAgIHRoaXMuaGFzVmlldyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZXh0LiRpbXBsaWNpdCA9PSBudWxsICYmICF0aGlzLmhhc1ZpZXcpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgdGhpcy5oYXNWaWV3ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuICApIHt9XG59XG5cbmV4cG9ydCB0eXBlIE51bGxpc2hEaXJlY3RpdmVDb250ZXh0PFQ+ID0geyBuZ3hOdWxsaXNoOiBUOyAkaW1wbGljaXQ6IFQgfTtcbiJdfQ==