UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

110 lines 16 kB
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=