@formql/core
Version:
FormQL - A framework for building dynamic forms
110 lines • 16 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';
let ComponentContainerComponent = class ComponentContainerComponent {
constructor(componentResolverService, viewContainerRef, eventHandlerService, storeService) {
this.componentResolverService = componentResolverService;
this.viewContainerRef = viewContainerRef;
this.eventHandlerService = eventHandlerService;
this.storeService = storeService;
this.FormQLMode = FormQLMode;
this.ContainerType = ContainerType;
}
set value(value) {
if (this.reactiveSection && this.component && this.reactiveSection.controls[this.component.componentId].value !== value)
this.reactiveSection.controls[this.component.componentId].setValue(value);
}
ngOnInit() {
const 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((change) => {
if (this.component.value !== change) {
this.component.value = change;
this.storeService.updateComponent(this.component);
}
});
if (this.mode === FormQLMode.Edit) {
const 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);
}
}
editField() {
if (this.mode === FormQLMode.Edit)
this.eventHandlerService.send(InternalEventType.EditingComponent, this.component);
}
ngOnDestroy() {
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: `
<div #wrapper formqlDnd
[sourceObjectId]="component.componentId"
[attr.componentId]="component.componentId"
[sourceWrapperId]="sectionId"
[type]="ContainerType.Component"
[mode]="mode"
[ngClass]="{'fql-component-container-wrapper': (mode === FormQLMode.Edit) }">
<div class="fql-component-tooltip">
<ng-container #tooltip></ng-container>
</div>
<div class="fql-component-container" [ngStyle]="component.style">
<ng-container #content></ng-container>
</div>
</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);
export { ComponentContainerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZm9ybXFsL2NvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2NvbXBvbmVudC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxnQkFBZ0IsRUFDL0MsU0FBUyxFQUFhLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXlCakUsSUFBYSwyQkFBMkIsR0FBeEMsTUFBYSwyQkFBMkI7SUFzQnBDLFlBQ1ksd0JBQWtELEVBQ2xELGdCQUFrQyxFQUNsQyxtQkFBZ0QsRUFDaEQsWUFBMEI7UUFIMUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNkI7UUFDaEQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUL0IsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztJQVNsQyxDQUFDO0lBakJKLElBQUksS0FBSyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGVB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LEtBQUssRUFBRTs7OERBQStCO0FBQzlCO0lBQVIsS0FBSyxFQUFFOzhCQUFrQixTQUFTO29FQUFDO0FBQzNCO0lBQVIsS0FBSyxFQUFFOzs4REFBbUI7QUFFM0I7SUFEQyxLQUFLLEVBQUU7Ozt3REFJUDtBQUVRO0lBQVIsS0FBSyxFQUFFOzt5REFBa0I7QUFmakIsMkJBQTJCO0lBdEJ2QyxTQUFTLENBQUM7UUFDUCwrQ0FBK0M7UUFDL0MsUUFBUSxFQUFFLDhCQUE4QjtRQUN4QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O1dBY0g7UUFFUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7S0FFbEQsQ0FBQztxQ0F3QndDLHdCQUF3QjtRQUNoQyxnQkFBZ0I7UUFDYiwyQkFBMkI7UUFDbEMsWUFBWTtHQTFCN0IsMkJBQTJCLENBNkR2QztTQTdEWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBWaWV3Q2hpbGQsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy9mb3JtLWNvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ludGVybmFsLWV2ZW50LWhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVybmFsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2hlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtUUxNb2RlLCBDb250YWluZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcclxuICAgIHNlbGVjdG9yOiAnW2Zvcm1xbC1jb21wb25lbnQtY29udGFpbmVyXScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAjd3JhcHBlciBmb3JtcWxEbmRcclxuICAgICAgICBbc291cmNlT2JqZWN0SWRdPVwiY29tcG9uZW50LmNvbXBvbmVudElkXCJcclxuICAgICAgICBbYXR0ci5jb21wb25lbnRJZF09XCJjb21wb25lbnQuY29tcG9uZW50SWRcIlxyXG4gICAgICAgIFtzb3VyY2VXcmFwcGVySWRdPVwic2VjdGlvbklkXCJcclxuICAgICAgICBbdHlwZV09XCJDb250YWluZXJUeXBlLkNvbXBvbmVudFwiXHJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydmcWwtY29tcG9uZW50LWNvbnRhaW5lci13cmFwcGVyJzogKG1vZGUgPT09IEZvcm1RTE1vZGUuRWRpdCkgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcWwtY29tcG9uZW50LXRvb2x0aXBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjdG9vbHRpcD48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnFsLWNvbXBvbmVudC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJjb21wb25lbnQuc3R5bGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjY29udGVudD48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21wb25lbnQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdjb250ZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWMgOiB0cnVlIH0pIGNvbnRlbnQ6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgICBAVmlld0NoaWxkKCd3cmFwcGVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWMgOiB0cnVlIH0pIHdyYXBwZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWMgOiB0cnVlIH0pIHRvb2x0aXA6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gICAgQElucHV0KCkgY29tcG9uZW50OiBGb3JtQ29tcG9uZW50PGFueT47XHJcbiAgICBASW5wdXQoKSByZWFjdGl2ZVNlY3Rpb246IEZvcm1Hcm91cDtcclxuICAgIEBJbnB1dCgpIHNlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhY3RpdmVTZWN0aW9uICYmIHRoaXMuY29tcG9uZW50ICYmIHRoaXMucmVhY3RpdmVTZWN0aW9uLmNvbnRyb2xzW3RoaXMuY29tcG9uZW50LmNvbXBvbmVudElkXS52YWx1ZSAhPT0gdmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMucmVhY3RpdmVTZWN0aW9uLmNvbnRyb2xzW3RoaXMuY29tcG9uZW50LmNvbXBvbmVudElkXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgbW9kZTogRm9ybVFMTW9kZTtcclxuXHJcbiAgICBwdWJsaWMgRm9ybVFMTW9kZSA9IEZvcm1RTE1vZGU7XHJcbiAgICBwdWJsaWMgQ29udGFpbmVyVHlwZSA9IENvbnRhaW5lclR5cGU7XHJcblxyXG4gICAgZm9ybVN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudFJlc29sdmVyU2VydmljZTogQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIGV2ZW50SGFuZGxlclNlcnZpY2U6IEludGVybmFsRXZlbnRIYW5kbGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHN0b3JlU2VydmljZTogU3RvcmVTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudFJlc29sdmVyU2VydmljZS5yZXNvbHZlQ29tcG9uZW50KFxyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5jb21wb25lbnROYW1lKSk7XHJcbiAgICAgICAgKDxhbnk+Y29tcG9uZW50KS5pbnN0YW5jZS5maWVsZCA9IHRoaXMuY29tcG9uZW50O1xyXG4gICAgICAgICg8YW55PmNvbXBvbmVudCkuaW5zdGFuY2UuZm9ybUNvbnRyb2wgPSB0aGlzLnJlYWN0aXZlU2VjdGlvbi5jb250cm9sc1t0aGlzLmNvbXBvbmVudC5jb21wb25lbnRJZF07XHJcblxyXG4gICAgICAgIHRoaXMuY29udGVudC5pbnNlcnQoY29tcG9uZW50Lmhvc3RWaWV3KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uJCA9IHRoaXMucmVhY3RpdmVTZWN0aW9uLmNvbnRyb2xzW3RoaXMuY29tcG9uZW50LmNvbXBvbmVudElkXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LnZhbHVlICE9PSBjaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnZhbHVlID0gY2hhbmdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZVNlcnZpY2UudXBkYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBGb3JtUUxNb2RlLkVkaXQpIHtcclxuICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnRSZXNvbHZlclNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudCgnVG9vbHRpcENvbXBvbmVudCcpKTtcclxuICAgICAgICAgICAgKDxhbnk+dG9vbHRpcCkuaW5zdGFuY2Uud3JhcHBlciA9IHRoaXMud3JhcHBlcjtcclxuICAgICAgICAgICAgKDxhbnk+dG9vbHRpcCkuaW5zdGFuY2UudHlwZSA9IENvbnRhaW5lclR5cGUuQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAoPGFueT50b29sdGlwKS5pbnN0YW5jZS5vYmplY3QgPSB0aGlzLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwLmluc2VydCh0b29sdGlwLmhvc3RWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEZpZWxkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZvcm1RTE1vZGUuRWRpdClcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJTZXJ2aWNlLnNlbmQoSW50ZXJuYWxFdmVudFR5cGUuRWRpdGluZ0NvbXBvbmVudCwgdGhpcy5jb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxufVxyXG4iXX0=