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.
54 lines • 8.17 kB
JavaScript
import { Component, Input, ViewChild } from "@angular/core";
import { AngularComponentFactory } from "../component-factory";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../utils/dynamic.directive";
import * as i3 from "../utils/safe-html.pipe";
export class CustomWidgetComponent {
get hasDefaultRender() {
return this.model.customWidget.isDefaultRender || this.hasAngularComponent;
}
get hasHtml() {
return this.model.customWidget.htmlTemplate ? true : false;
}
get customHtml() {
return this.model.customWidget.htmlTemplate;
}
get hasAngularComponent() {
return AngularComponentFactory.Instance.isComponentRegistered(this.model.customWidget.name);
}
get componentName() {
if (this.hasAngularComponent)
return this.model.customWidget.name;
return this.model.getTemplate() + "-question";
}
ngAfterViewInit() {
this.model.customWidget.afterRender(this.model, this.container.nativeElement);
}
ngOnChanges(simpleChanges) {
if (simpleChanges["model"].previousValue !== undefined && simpleChanges["model"].currentValue !== undefined) {
this.model.customWidget.afterRender(this.model, this.container.nativeElement);
}
}
ngOnDestroy() {
this.model.customWidget.willUnmount(this.model, this.container.nativeElement);
}
}
CustomWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CustomWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomWidgetComponent, selector: "sv-ng-custom-widget", inputs: { css: "css", model: "model" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["content"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #content>\n <div *ngIf=\"hasHtml\" [innerHTML]=\"customHtml | safeHtml\"></div>\n <ng-container *ngIf=\"hasDefaultRender\">\n <ng-template [component]=\"{ name: componentName, data: { model: model, css: css } }\"></ng-template> \n </ng-container>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }], pipes: { "safeHtml": i3.SafeHtmlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomWidgetComponent, decorators: [{
type: Component,
args: [{
templateUrl: "./customwidget.component.html",
selector: "sv-ng-custom-widget"
}]
}], propDecorators: { css: [{
type: Input
}], model: [{
type: Input
}], container: [{
type: ViewChild,
args: ["content"]
}] } });
AngularComponentFactory.Instance.registerComponent("survey-customwidget", CustomWidgetComponent);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9td2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvY3VzdG9td2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9xdWVzdGlvbnMvY3VzdG9td2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBdUMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQVMvRCxNQUFNLE9BQU8scUJBQXFCO0lBTWhDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzdELENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLElBQUksSUFBSSxDQUFDLG1CQUFtQjtZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDaEQsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxXQUFXLENBQUMsYUFBNEI7UUFDdEMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUMzRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9FO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O21IQWhDVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiw4TkNWbEMsNFFBS007NEZES08scUJBQXFCO2tCQU5qQyxTQUFTO21CQUNSO29CQUNFLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOzhCQUdRLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWdCLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUzs7QUFnQ3RCLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeSB9IGZyb20gXCIuLi9jb21wb25lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudChcbiAge1xuICAgIHRlbXBsYXRlVXJsOiBcIi4vY3VzdG9td2lkZ2V0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc2VsZWN0b3I6IFwic3YtbmctY3VzdG9tLXdpZGdldFwiXG4gIH1cbilcbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNzczogYW55O1xuICBASW5wdXQoKSBtb2RlbCE6IFF1ZXN0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoXCJjb250ZW50XCIpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGdldCBoYXNEZWZhdWx0UmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXIgfHwgdGhpcy5oYXNBbmd1bGFyQ29tcG9uZW50O1xuICB9XG4gIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgZ2V0IGN1c3RvbUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlO1xuICB9XG4gIGdldCBoYXNBbmd1bGFyQ29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeS5JbnN0YW5jZS5pc0NvbXBvbmVudFJlZ2lzdGVyZWQodGhpcy5tb2RlbC5jdXN0b21XaWRnZXQubmFtZSk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNBbmd1bGFyQ29tcG9uZW50KSByZXR1cm4gdGhpcy5tb2RlbC5jdXN0b21XaWRnZXQubmFtZTtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXRUZW1wbGF0ZSgpICsgXCItcXVlc3Rpb25cIjtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5tb2RlbCwgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChzaW1wbGVDaGFuZ2VzW1wibW9kZWxcIl0ucHJldmlvdXNWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHNpbXBsZUNoYW5nZXNbXCJtb2RlbFwiXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tb2RlbC5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5tb2RlbCwgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwuY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMubW9kZWwsIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbn1cblxuQW5ndWxhckNvbXBvbmVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJDb21wb25lbnQoXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCIsIEN1c3RvbVdpZGdldENvbXBvbmVudCk7XG4iLCI8ZGl2ICNjb250ZW50PlxuICA8ZGl2ICpuZ0lmPVwiaGFzSHRtbFwiIFtpbm5lckhUTUxdPVwiY3VzdG9tSHRtbCB8IHNhZmVIdG1sXCI+PC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNEZWZhdWx0UmVuZGVyXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtjb21wb25lbnRdPVwieyBuYW1lOiBjb21wb25lbnROYW1lLCBkYXRhOiB7IG1vZGVsOiBtb2RlbCwgY3NzOiBjc3MgfSB9XCI+PC9uZy10ZW1wbGF0ZT4gIFxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==