@formql/core
Version:
FormQL - A framework for building dynamic forms
102 lines • 16.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, Input, ViewContainerRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';
import { InternalEventHandlerService } from '../services/internal-event-handler.service';
import { InternalEventType } from '../models/internal-event.model';
import { ComponentResolverService } from '../services/component-resolver.service';
import { FormGroup } from '@angular/forms';
import { StoreService } from '../services/store.service';
import { FormQLMode, ContainerType } from '../models/type.model';
var ComponentContainerComponent = /** @class */ (function () {
function ComponentContainerComponent(componentResolverService, viewContainerRef, eventHandlerService, storeService) {
this.componentResolverService = componentResolverService;
this.viewContainerRef = viewContainerRef;
this.eventHandlerService = eventHandlerService;
this.storeService = storeService;
this.FormQLMode = FormQLMode;
this.ContainerType = ContainerType;
}
Object.defineProperty(ComponentContainerComponent.prototype, "value", {
set: function (value) {
if (this.reactiveSection && this.component && this.reactiveSection.controls[this.component.componentId].value !== value)
this.reactiveSection.controls[this.component.componentId].setValue(value);
},
enumerable: true,
configurable: true
});
ComponentContainerComponent.prototype.ngOnInit = function () {
var _this = this;
var component = this.viewContainerRef.createComponent(this.componentResolverService.resolveComponent(this.component.componentName));
component.instance.field = this.component;
component.instance.formControl = this.reactiveSection.controls[this.component.componentId];
this.content.insert(component.hostView);
this.formSubscription$ = this.reactiveSection.controls[this.component.componentId].valueChanges.subscribe(function (change) {
if (_this.component.value !== change) {
_this.component.value = change;
_this.storeService.updateComponent(_this.component);
}
});
if (this.mode === FormQLMode.Edit) {
var tooltip = this.viewContainerRef.createComponent(this.componentResolverService.resolveComponent('TooltipComponent'));
tooltip.instance.wrapper = this.wrapper;
tooltip.instance.type = ContainerType.Component;
tooltip.instance.object = this.component;
this.tooltip.insert(tooltip.hostView);
}
};
ComponentContainerComponent.prototype.editField = function () {
if (this.mode === FormQLMode.Edit)
this.eventHandlerService.send(InternalEventType.EditingComponent, this.component);
};
ComponentContainerComponent.prototype.ngOnDestroy = function () {
this.formSubscription$.unsubscribe();
};
__decorate([
ViewChild('content', { read: ViewContainerRef, static: true }),
__metadata("design:type", ViewContainerRef)
], ComponentContainerComponent.prototype, "content", void 0);
__decorate([
ViewChild('wrapper', { read: ViewContainerRef, static: true }),
__metadata("design:type", ViewContainerRef)
], ComponentContainerComponent.prototype, "wrapper", void 0);
__decorate([
ViewChild('tooltip', { read: ViewContainerRef, static: true }),
__metadata("design:type", ViewContainerRef)
], ComponentContainerComponent.prototype, "tooltip", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], ComponentContainerComponent.prototype, "component", void 0);
__decorate([
Input(),
__metadata("design:type", FormGroup)
], ComponentContainerComponent.prototype, "reactiveSection", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], ComponentContainerComponent.prototype, "sectionId", void 0);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], ComponentContainerComponent.prototype, "value", null);
__decorate([
Input(),
__metadata("design:type", Number)
], ComponentContainerComponent.prototype, "mode", void 0);
ComponentContainerComponent = __decorate([
Component({
// tslint:disable-next-line: component-selector
selector: '[formql-component-container]',
template: "\n <div #wrapper formqlDnd\n [sourceObjectId]=\"component.componentId\"\n [attr.componentId]=\"component.componentId\"\n [sourceWrapperId]=\"sectionId\"\n [type]=\"ContainerType.Component\"\n [mode]=\"mode\"\n [ngClass]=\"{'fql-component-container-wrapper': (mode === FormQLMode.Edit) }\">\n <div class=\"fql-component-tooltip\">\n <ng-container #tooltip></ng-container>\n </div>\n <div class=\"fql-component-container\" [ngStyle]=\"component.style\">\n <ng-container #content></ng-container>\n </div>\n </div>",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".fql-bundle-field-input{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.fql-bundle-checkbox-input{cursor:pointer;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.fql-bundle-label-required:after{content:\" *\";color:red}.fql-bundle-field-radio{cursor:pointer}.fql-error-message{text-align:center;padding:20px}.fql-dnd-container-separator{box-shadow:0 -2px 0 #00f}.fql-dnd-container-drop-area{outline:dashed 3px}.fql-component-container{padding:10px}.fql-component-container-wrapper{position:relative;border:1px solid transparent;transition:border .3s ease-in-out}.fql-component-container-wrapper:hover .fql-component-tooltip{opacity:1;transition:opacity .3s ease-in-out}.fql-component-container-wrapper:hover{border:1px solid;transition:box-shadow .3s ease-in-out,border .3s ease-in-out}.fql-component-tooltip{opacity:0;display:block;position:absolute;left:50%;z-index:1;transition:opacity .3s ease-in-out}"]
}),
__metadata("design:paramtypes", [ComponentResolverService,
ViewContainerRef,
InternalEventHandlerService,
StoreService])
], ComponentContainerComponent);
return ComponentContainerComponent;
}());
export { ComponentContainerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZm9ybXFsL2NvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2NvbXBvbmVudC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxnQkFBZ0IsRUFDL0MsU0FBUyxFQUFhLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXlCakU7SUFzQkkscUNBQ1ksd0JBQWtELEVBQ2xELGdCQUFrQyxFQUNsQyxtQkFBZ0QsRUFDaEQsWUFBMEI7UUFIMUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNkI7UUFDaEQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUL0IsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztJQVNsQyxDQUFDO0lBakJKLHNCQUFJLDhDQUFLO2FBQVQsVUFBVSxLQUFVO1lBQ2hCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUks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SyxFQUFFOztrRUFBK0I7SUFDOUI7UUFBUixLQUFLLEVBQUU7a0NBQWtCLFNBQVM7d0VBQUM7SUFDM0I7UUFBUixLQUFLLEVBQUU7O2tFQUFtQjtJQUUzQjtRQURDLEtBQUssRUFBRTs7OzREQUlQO0lBRVE7UUFBUixLQUFLLEVBQUU7OzZEQUFrQjtJQWZqQiwyQkFBMkI7UUF0QnZDLFNBQVMsQ0FBQztZQUNQLCtDQUErQztZQUMvQyxRQUFRLEVBQUUsOEJBQThCO1lBQ3hDLFFBQVEsRUFBRSxrbUJBY0g7WUFFUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FFbEQsQ0FBQzt5Q0F3QndDLHdCQUF3QjtZQUNoQyxnQkFBZ0I7WUFDYiwyQkFBMkI7WUFDbEMsWUFBWTtPQTFCN0IsMkJBQTJCLENBNkR2QztJQUFELGtDQUFDO0NBQUEsQUE3REQsSUE2REM7U0E3RFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBJbnRlcm5hbEV2ZW50SGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbnRlcm5hbC1ldmVudC1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnRlcm5hbEV2ZW50VHlwZSB9IGZyb20gJy4uL21vZGVscy9pbnRlcm5hbC1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlc29sdmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBvbmVudC1yZXNvbHZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVFMTW9kZSwgQ29udGFpbmVyVHlwZSB9IGZyb20gJy4uL21vZGVscy90eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ1tmb3JtcWwtY29tcG9uZW50LWNvbnRhaW5lcl0nLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgI3dyYXBwZXIgZm9ybXFsRG5kXHJcbiAgICAgICAgW3NvdXJjZU9iamVjdElkXT1cImNvbXBvbmVudC5jb21wb25lbnRJZFwiXHJcbiAgICAgICAgW2F0dHIuY29tcG9uZW50SWRdPVwiY29tcG9uZW50LmNvbXBvbmVudElkXCJcclxuICAgICAgICBbc291cmNlV3JhcHBlcklkXT1cInNlY3Rpb25JZFwiXHJcbiAgICAgICAgW3R5cGVdPVwiQ29udGFpbmVyVHlwZS5Db21wb25lbnRcIlxyXG4gICAgICAgIFttb2RlXT1cIm1vZGVcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnZnFsLWNvbXBvbmVudC1jb250YWluZXItd3JhcHBlcic6IChtb2RlID09PSBGb3JtUUxNb2RlLkVkaXQpIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnFsLWNvbXBvbmVudC10b29sdGlwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgI3Rvb2x0aXA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZxbC1jb21wb25lbnQtY29udGFpbmVyXCIgW25nU3R5bGVdPVwiY29tcG9uZW50LnN0eWxlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRlbnQ+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5gLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tcG9uZW50LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY29udGVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljIDogdHJ1ZSB9KSBjb250ZW50OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljIDogdHJ1ZSB9KSB3cmFwcGVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gICAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljIDogdHJ1ZSB9KSB0b29sdGlwOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbXBvbmVudDogRm9ybUNvbXBvbmVudDxhbnk+O1xyXG4gICAgQElucHV0KCkgcmVhY3RpdmVTZWN0aW9uOiBGb3JtR3JvdXA7XHJcbiAgICBASW5wdXQoKSBzZWN0aW9uSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWN0aXZlU2VjdGlvbiAmJiB0aGlzLmNvbXBvbmVudCAmJiB0aGlzLnJlYWN0aXZlU2VjdGlvbi5jb250cm9sc1t0aGlzLmNvbXBvbmVudC5jb21wb25lbnRJZF0udmFsdWUgIT09IHZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLnJlYWN0aXZlU2VjdGlvbi5jb250cm9sc1t0aGlzLmNvbXBvbmVudC5jb21wb25lbnRJZF0uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIG1vZGU6IEZvcm1RTE1vZGU7XHJcblxyXG4gICAgcHVibGljIEZvcm1RTE1vZGUgPSBGb3JtUUxNb2RlO1xyXG4gICAgcHVibGljIENvbnRhaW5lclR5cGUgPSBDb250YWluZXJUeXBlO1xyXG5cclxuICAgIGZvcm1TdWJzY3JpcHRpb24kOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRSZXNvbHZlclNlcnZpY2U6IENvbXBvbmVudFJlc29sdmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudEhhbmRsZXJTZXJ2aWNlOiBJbnRlcm5hbEV2ZW50SGFuZGxlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzdG9yZVNlcnZpY2U6IFN0b3JlU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnRSZXNvbHZlclNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudChcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuY29tcG9uZW50TmFtZSkpO1xyXG4gICAgICAgICg8YW55PmNvbXBvbmVudCkuaW5zdGFuY2UuZmllbGQgPSB0aGlzLmNvbXBvbmVudDtcclxuICAgICAgICAoPGFueT5jb21wb25lbnQpLmluc3RhbmNlLmZvcm1Db250cm9sID0gdGhpcy5yZWFjdGl2ZVNlY3Rpb24uY29udHJvbHNbdGhpcy5jb21wb25lbnQuY29tcG9uZW50SWRdO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0KGNvbXBvbmVudC5ob3N0Vmlldyk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiQgPSB0aGlzLnJlYWN0aXZlU2VjdGlvbi5jb250cm9sc1t0aGlzLmNvbXBvbmVudC5jb21wb25lbnRJZF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC52YWx1ZSAhPT0gY2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC52YWx1ZSA9IGNoYW5nZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVTZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRm9ybVFMTW9kZS5FZGl0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlLnJlc29sdmVDb21wb25lbnQoJ1Rvb2x0aXBDb21wb25lbnQnKSk7XHJcbiAgICAgICAgICAgICg8YW55PnRvb2x0aXApLmluc3RhbmNlLndyYXBwZXIgPSB0aGlzLndyYXBwZXI7XHJcbiAgICAgICAgICAgICg8YW55PnRvb2x0aXApLmluc3RhbmNlLnR5cGUgPSBDb250YWluZXJUeXBlLkNvbXBvbmVudDtcclxuICAgICAgICAgICAgKDxhbnk+dG9vbHRpcCkuaW5zdGFuY2Uub2JqZWN0ID0gdGhpcy5jb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcC5pbnNlcnQodG9vbHRpcC5ob3N0Vmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVkaXRGaWVsZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBGb3JtUUxNb2RlLkVkaXQpXHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyU2VydmljZS5zZW5kKEludGVybmFsRXZlbnRUeXBlLkVkaXRpbmdDb21wb25lbnQsIHRoaXMuY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1TdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19