UNPKG

@ng-flexy/form

Version:

Flexy components and tools to build Angular 8+ applications

63 lines 6.97 kB
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==