UNPKG

survey-angular-ui

Version:

A free MIT-licensed Angular UI component that renders dynamic, interactive JSON-based forms and surveys. You can use it to collect responses from users and send them to your own database.

128 lines 16.3 kB
import { Component } from "@angular/core"; import { EmbeddedViewContentComponent } from "./embedded-view-content.component"; import * as i0 from "@angular/core"; export class BaseAngular extends EmbeddedViewContentComponent { constructor(changeDetectorRef, viewContainerRef) { super(viewContainerRef); this.changeDetectorRef = changeDetectorRef; this.isModelSubsribed = false; this.isDestroyed = false; this.onArrayChangedCallback = (stateElement, options) => { this.update(options.name); }; this.onPropertyChangedCallback = (stateElement, options) => { this.update(options.name); }; this.isUpdatesBlocked = false; } get surveyModel() { return this.getModel().getSurvey(); } ngDoCheck() { super.ngDoCheck(); if (this.previousModel !== this.getModel()) { this.unMakeBaseElementAngular(this.previousModel); this.makeBaseElementAngular(this.getModel()); this.onModelChanged(); this.previousModel = this.getModel(); } this.setIsModelRendering(true); } onModelChanged() { } setIsModelRendering(val) { const model = this.getModel(); if (!!model) { model.isRendering = val; } } getIsModelRendering(stateElement) { const model = stateElement !== null && stateElement !== void 0 ? stateElement : this.getModel(); return !!model && !!model.isRendering; } ngOnDestroy() { this.isDestroyed = true; this.unMakeBaseElementAngular(this.getModel()); this.previousModel = undefined; } isBaseElementSubsribed(stateElement) { var _a; return ((_a = stateElement.__ngImplementedCount) !== null && _a !== void 0 ? _a : 0) > 0; } makeBaseElementAngular(stateElement) { var _a; if (!!stateElement && !this.getIsModelRendering(stateElement)) { this.isModelSubsribed = true; stateElement.addOnArrayChangedCallback(this.onArrayChangedCallback); stateElement.addOnPropertyValueChangedCallback(this.onPropertyChangedCallback); stateElement.enableOnElementRerenderedEvent(); stateElement.__ngImplementedCount = ((_a = stateElement.__ngImplementedCount) !== null && _a !== void 0 ? _a : 0) + 1; } } unMakeBaseElementAngular(stateElement) { var _a; if (!!stateElement && this.isModelSubsribed) { this.isModelSubsribed = false; stateElement.removeOnPropertyValueChangedCallback(this.onPropertyChangedCallback); stateElement.removeOnArrayChangedCallback(this.onArrayChangedCallback); stateElement.disableOnElementRerenderedEvent(); if (((_a = stateElement.__ngImplementedCount) !== null && _a !== void 0 ? _a : 0) - 1 <= 0) { delete stateElement.__ngImplementedCount; } } } update(key) { if (this.getIsModelRendering() || this.isUpdatesBlocked) return; if (key && this.getPropertiesToUpdateSync().indexOf(key) > -1) { this.beforeUpdate(); this.detectChanges(); this.afterUpdate(true); } else { this.isUpdatesBlocked = true; queueMicrotask(() => { if (!this.isDestroyed) { this.isUpdatesBlocked = false; this.beforeUpdate(); this.detectChanges(); this.afterUpdate(); } }); } } getChangeDetectorRef() { return this.embeddedView ? this.embeddedView : this.changeDetectorRef; } getPropertiesToUpdateSync() { return []; } detectChanges() { this.getChangeDetectorRef().detectChanges(); } getShouldReattachChangeDetector() { return true; } beforeUpdate() { this.setIsModelRendering(true); } afterUpdate(isSync = false) { this.setIsModelRendering(false); const model = this.getModel(); if (model && !this.isDestroyed) { model.afterRerender(); } } ngAfterViewChecked() { super.ngAfterViewChecked(); this.setIsModelRendering(false); } } BaseAngular.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); BaseAngular.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BaseAngular, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "", isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, decorators: [{ type: Component, args: [{ template: "" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBTWpGLE1BQU0sT0FBZ0IsV0FBbUMsU0FBUSw0QkFBNEI7SUFDM0YsWUFBc0IsaUJBQW9DLEVBQUUsZ0JBQW1DO1FBQzdGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBREosc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVFsRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUF5QmxDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBUzdCLDJCQUFzQixHQUFHLENBQUMsWUFBa0IsRUFBRSxPQUF3QyxFQUFFLEVBQUU7WUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBQ00sOEJBQXlCLEdBQUcsQ0FBQyxZQUFrQixFQUFFLE9BQW1DLEVBQUUsRUFBRTtZQUM5RixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFxQk0scUJBQWdCLEdBQVksS0FBSyxDQUFDO0lBbEUxQyxDQUFDO0lBQ0QsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFLZSxTQUFTO1FBQ3ZCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEQsSUFB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QUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O3lHQXBIbUIsV0FBVzs2RkFBWCxXQUFXLDJFQUZyQixFQUFFOzRGQUVRLFdBQVc7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgSVByb3BlcnR5QXJyYXlWYWx1ZUNoYW5nZWRFdmVudCwgSVN1cnZleSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRW1iZWRkZWRWaWV3Q29udGVudENvbXBvbmVudCB9IGZyb20gXCIuL2VtYmVkZGVkLXZpZXctY29udGVudC5jb21wb25lbnRcIjtcbmltcG9ydCB7IElQcm9wZXJ0eVZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInN1cnZleS1jb3JlL3R5cGluZ3Mvc3JjL2Jhc2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBcIlwiXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBbmd1bGFyPFQgZXh0ZW5kcyBCYXNlID0gQmFzZT4gZXh0ZW5kcyBFbWJlZGRlZFZpZXdDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgdmlld0NvbnRhaW5lclJlZj86IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICBzdXBlcih2aWV3Q29udGFpbmVyUmVmKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleU1vZGVsKCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmdldE1vZGVsKCkuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldE1vZGVsKCk6IFQ7XG4gIHByb3RlY3RlZCBwcmV2aW91c01vZGVsPzogVDtcbiAgcHJpdmF0ZSBpc01vZGVsU3Vic3JpYmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIG92ZXJyaWRlIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0RvQ2hlY2soKTtcbiAgICBpZiAodGhpcy5wcmV2aW91c01vZGVsICE9PSB0aGlzLmdldE1vZGVsKCkpIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRBbmd1bGFyKHRoaXMucHJldmlvdXNNb2RlbCk7XG4gICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudEFuZ3VsYXIodGhpcy5nZXRNb2RlbCgpKTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZWQoKTtcbiAgICAgIHRoaXMucHJldmlvdXNNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRJc01vZGVsUmVuZGVyaW5nKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTW9kZWxDaGFuZ2VkKCkgeyB9XG5cbiAgcHJpdmF0ZSBzZXRJc01vZGVsUmVuZGVyaW5nKHZhbDogYm9vbGVhbikge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghIW1vZGVsKSB7XG4gICAgICAoPGFueT5tb2RlbCkuaXNSZW5kZXJpbmcgPSB2YWw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0SXNNb2RlbFJlbmRlcmluZyhzdGF0ZUVsZW1lbnQ/OiBCYXNlKSB7XG4gICAgY29uc3QgbW9kZWwgPSBzdGF0ZUVsZW1lbnQgPz8gdGhpcy5nZXRNb2RlbCgpO1xuICAgIHJldHVybiAhIW1vZGVsICYmICEhKDxhbnk+bW9kZWwpLmlzUmVuZGVyaW5nO1xuICB9XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudEFuZ3VsYXIodGhpcy5nZXRNb2RlbCgpKTtcbiAgICB0aGlzLnByZXZpb3VzTW9kZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQmFzZUVsZW1lbnRTdWJzcmliZWQoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgcmV0dXJuICgoPGFueT5zdGF0ZUVsZW1lbnQpLl9fbmdJbXBsZW1lbnRlZENvdW50ID8/IDApID4gMDtcbiAgfVxuICBwcml2YXRlIG9uQXJyYXlDaGFuZ2VkQ2FsbGJhY2sgPSAoc3RhdGVFbGVtZW50OiBCYXNlLCBvcHRpb25zOiBJUHJvcGVydHlBcnJheVZhbHVlQ2hhbmdlZEV2ZW50KSA9PiB7XG4gICAgdGhpcy51cGRhdGUob3B0aW9ucy5uYW1lKTtcbiAgfTtcbiAgcHJpdmF0ZSBvblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gKHN0YXRlRWxlbWVudDogQmFzZSwgb3B0aW9uczogSVByb3BlcnR5VmFsdWVDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICB0aGlzLnVwZGF0ZShvcHRpb25zLm5hbWUpO1xuICB9O1xuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudEFuZ3VsYXIoc3RhdGVFbGVtZW50OiBUKSB7XG4gICAgaWYgKCEhc3RhdGVFbGVtZW50ICYmICF0aGlzLmdldElzTW9kZWxSZW5kZXJpbmcoc3RhdGVFbGVtZW50KSkge1xuICAgICAgdGhpcy5pc01vZGVsU3Vic3JpYmVkID0gdHJ1ZTtcbiAgICAgIHN0YXRlRWxlbWVudC5hZGRPbkFycmF5Q2hhbmdlZENhbGxiYWNrKHRoaXMub25BcnJheUNoYW5nZWRDYWxsYmFjayk7XG4gICAgICBzdGF0ZUVsZW1lbnQuYWRkT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKHRoaXMub25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayk7XG4gICAgICBzdGF0ZUVsZW1lbnQuZW5hYmxlT25FbGVtZW50UmVyZW5kZXJlZEV2ZW50KCk7XG4gICAgICAoPGFueT5zdGF0ZUVsZW1lbnQpLl9fbmdJbXBsZW1lbnRlZENvdW50ID0gKCg8YW55PnN0YXRlRWxlbWVudCkuX19uZ0ltcGxlbWVudGVkQ291bnQgPz8gMCkgKyAxO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50QW5ndWxhcihzdGF0ZUVsZW1lbnQ/OiBCYXNlKSB7XG4gICAgaWYgKCEhc3RhdGVFbGVtZW50ICYmIHRoaXMuaXNNb2RlbFN1YnNyaWJlZCkge1xuICAgICAgdGhpcy5pc01vZGVsU3Vic3JpYmVkID0gZmFsc2U7XG4gICAgICBzdGF0ZUVsZW1lbnQucmVtb3ZlT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKHRoaXMub25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayk7XG4gICAgICBzdGF0ZUVsZW1lbnQucmVtb3ZlT25BcnJheUNoYW5nZWRDYWxsYmFjayh0aGlzLm9uQXJyYXlDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgc3RhdGVFbGVtZW50LmRpc2FibGVPbkVsZW1lbnRSZXJlbmRlcmVkRXZlbnQoKTtcbiAgICAgIGlmICgoKDxhbnk+c3RhdGVFbGVtZW50KS5fX25nSW1wbGVtZW50ZWRDb3VudCA/PyAwKSAtIDEgPD0gMCkge1xuICAgICAgICBkZWxldGUgKDxhbnk+c3RhdGVFbGVtZW50KS5fX25nSW1wbGVtZW50ZWRDb3VudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1VwZGF0ZXNCbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZShrZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nZXRJc01vZGVsUmVuZGVyaW5nKCkgfHwgdGhpcy5pc1VwZGF0ZXNCbG9ja2VkKSByZXR1cm47XG4gICAgaWYgKGtleSAmJiB0aGlzLmdldFByb3BlcnRpZXNUb1VwZGF0ZVN5bmMoKS5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5hZnRlclVwZGF0ZSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1VwZGF0ZXNCbG9ja2VkID0gdHJ1ZTtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgdGhpcy5pc1VwZGF0ZXNCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmFmdGVyVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldENoYW5nZURldGVjdG9yUmVmKCkge1xuICAgIHJldHVybiB0aGlzLmVtYmVkZGVkVmlldyA/IHRoaXMuZW1iZWRkZWRWaWV3IDogdGhpcy5jaGFuZ2VEZXRlY3RvclJlZjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvcGVydGllc1RvVXBkYXRlU3luYygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHJvdGVjdGVkIGRldGVjdENoYW5nZXMoKSB7XG4gICAgdGhpcy5nZXRDaGFuZ2VEZXRlY3RvclJlZigpLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG91bGRSZWF0dGFjaENoYW5nZURldGVjdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJlZm9yZVVwZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldElzTW9kZWxSZW5kZXJpbmcodHJ1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGFmdGVyVXBkYXRlKGlzU3luYzogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJc01vZGVsUmVuZGVyaW5nKGZhbHNlKTtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAobW9kZWwgJiYgIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIG1vZGVsLmFmdGVyUmVyZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3Q2hlY2tlZCgpO1xuICAgIHRoaXMuc2V0SXNNb2RlbFJlbmRlcmluZyhmYWxzZSk7XG4gIH1cbn0iXX0=