@ng-flexy/form
Version:
Flexy components and tools to build Angular 8+ applications
63 lines • 6.97 kB
JavaScript
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
import * as jsonata_ from 'jsonata';
const jsonata = jsonata_;
export class FlexyFlexyFormIfDirective {
constructor(templateRef, viewContainer) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this._visibility = true;
}
ngOnInit() {
if (this.flexyFormIf && this.flexyFormIf.schema.if && this.flexyFormIf.form) {
this._visibility = this._isEnabled(this.flexyFormIf.form.currentData);
this._changesSubscription = this.flexyFormIf.form.currentData$.subscribe(data => {
this._visibility = this._isEnabled(data);
this._render();
});
}
this._render();
}
_render() {
if (this._visibility) {
if (!this._viewRef) {
this.viewContainer.clear();
if (this.templateRef) {
this._viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
}
}
}
else {
this.viewContainer.clear();
this._viewRef = null;
}
}
_isEnabled(data) {
const schema = this.flexyFormIf.schema;
let is = false;
if (schema.if) {
if (!this._ifCompiled) {
this._ifCompiled = jsonata(schema.if);
}
try {
is = !!this._ifCompiled.evaluate(data);
}
catch (e) {
// do nothing
}
}
return is;
}
}
FlexyFlexyFormIfDirective.decorators = [
{ type: Directive, args: [{
selector: '[flexyFormIf]'
},] }
];
FlexyFlexyFormIfDirective.ctorParameters = () => [
{ type: TemplateRef },
{ type: ViewContainerRef }
];
FlexyFlexyFormIfDirective.propDecorators = {
flexyFormIf: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvaWYuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt4RixPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUVwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFLekIsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUFvQixXQUE2QixFQUFVLGFBQStCO1FBQXRFLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUVsRixnQkFBVyxHQUFHLElBQUksQ0FBQztJQUZrRSxDQUFDO0lBTzlGLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFxQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUMzRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDekU7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFtQjtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQW9DLENBQUM7UUFDckUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2YsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUk7Z0JBQ0YsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLGFBQWE7YUFDZDtTQUNGO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzs7WUFwREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2FBQzFCOzs7WUFYa0MsV0FBVztZQUFFLGdCQUFnQjs7OzBCQWE3RCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxleHlGb3JtIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbGV4eUZvcm1GaWVsZExheW91dFNjaGVtYSwgRmxleHlGb3JtTGF5b3V0U2NoZW1hIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dC1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRmxleHlGb3JtRGF0YSB9IGZyb20gJy4uL21vZGVscy9mb3JtLmRhdGEnO1xuaW1wb3J0ICogYXMganNvbmF0YV8gZnJvbSAnanNvbmF0YSc7XG5cbmNvbnN0IGpzb25hdGEgPSBqc29uYXRhXztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZsZXh5Rm9ybUlmXSdcbn0pXG5leHBvcnQgY2xhc3MgRmxleHlGbGV4eUZvcm1JZkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZsZXh5Rm9ybUlmOiB7IHNjaGVtYTogRmxleHlGb3JtTGF5b3V0U2NoZW1hOyBmb3JtOiBGbGV4eUZvcm0gfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgcHJpdmF0ZSBfdmlzaWJpbGl0eSA9IHRydWU7XG4gIHByaXZhdGUgX2NoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfaWZDb21waWxlZDogYW55O1xuICBwcml2YXRlIF92aWV3UmVmOiBhbnk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZmxleHlGb3JtSWYgJiYgKHRoaXMuZmxleHlGb3JtSWYuc2NoZW1hIGFzIEZsZXh5Rm9ybUZpZWxkTGF5b3V0U2NoZW1hKS5pZiAmJiB0aGlzLmZsZXh5Rm9ybUlmLmZvcm0pIHtcbiAgICAgIHRoaXMuX3Zpc2liaWxpdHkgPSB0aGlzLl9pc0VuYWJsZWQodGhpcy5mbGV4eUZvcm1JZi5mb3JtLmN1cnJlbnREYXRhKTtcbiAgICAgIHRoaXMuX2NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmZsZXh5Rm9ybUlmLmZvcm0uY3VycmVudERhdGEkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5fdmlzaWJpbGl0eSA9IHRoaXMuX2lzRW5hYmxlZChkYXRhKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fcmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX3Zpc2liaWxpdHkpIHtcbiAgICAgIGlmICghdGhpcy5fdmlld1JlZikge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICB0aGlzLl92aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIHRoaXMuX3ZpZXdSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRW5hYmxlZChkYXRhOiBGbGV4eUZvcm1EYXRhKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5mbGV4eUZvcm1JZi5zY2hlbWEgYXMgRmxleHlGb3JtRmllbGRMYXlvdXRTY2hlbWE7XG4gICAgbGV0IGlzID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYS5pZikge1xuICAgICAgaWYgKCF0aGlzLl9pZkNvbXBpbGVkKSB7XG4gICAgICAgIHRoaXMuX2lmQ29tcGlsZWQgPSBqc29uYXRhKHNjaGVtYS5pZik7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBpcyA9ICEhdGhpcy5faWZDb21waWxlZC5ldmFsdWF0ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXM7XG4gIH1cbn1cbiJdfQ==