ngx-schema-forms
Version:
New features: - Ajv schema validator. - Angular forms compatible: Property tree is created using FormGroup, FormArray and FormControl classes. - Array now properly loads initial data from model. - WidgetTyep: WidgetRegistry now supports WidgetType, now wo
100 lines (99 loc) • 9.12 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, Input, ViewContainerRef, TemplateRef, Injector, } from '@angular/core';
import { WidgetFactory } from '../widgetfactory';
import { WidgetType } from '../widgetregistry';
import { ObjectProperty } from '../model/object-property';
import { FormElementTemplateRef } from './form-element.component';
export class FormFieldsetWidgetChooserDirective {
/**
* @param {?} viewContainerRef
* @param {?} widgetFactory
*/
constructor(viewContainerRef, widgetFactory) {
this.viewContainerRef = viewContainerRef;
this.widgetFactory = widgetFactory;
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const injector = Injector.create({
providers: [{
provide: FormElementTemplateRef,
useValue: this.templateRef,
}],
});
/** @type {?} */
const widget = this.getFieldsetWidget();
this.componentRef = this.widgetFactory.createWidget(this.viewContainerRef, widget.id, {
type: WidgetType.Fieldset,
injector
});
/** @type {?} */
const component = this.componentRef.instance;
component.formProperty = this.formProperty;
component.title = this.fieldset.title;
component.description = this.fieldset.description;
component.formProperties = this.fieldset.fields.map((id) => {
return this.formProperty.get(id);
});
component.widget = widget;
this.formProperty.fieldsetWidgetInstance = component;
}
/**
* @return {?}
*/
ngOnDestroy() {
this.componentRef.destroy();
this.viewContainerRef.clear();
}
/**
* @return {?}
*/
getFieldsetWidget() {
if (!this.fieldset.widget) {
return { id: 'fieldset' };
}
if (typeof this.fieldset.widget === 'string') {
return { id: this.fieldset.widget };
}
if (!this.fieldset.widget.id) {
this.fieldset.widget.id = 'fieldset';
}
return this.fieldset.widget;
}
}
FormFieldsetWidgetChooserDirective.decorators = [
{ type: Directive, args: [{
selector: '[sfFormFieldsetWidgetChooser]',
},] }
];
/** @nocollapse */
FormFieldsetWidgetChooserDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: WidgetFactory }
];
FormFieldsetWidgetChooserDirective.propDecorators = {
formProperty: [{ type: Input }],
fieldset: [{ type: Input }],
templateRef: [{ type: Input }]
};
if (false) {
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.formProperty;
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.fieldset;
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.templateRef;
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.componentRef;
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.viewContainerRef;
/** @type {?} */
FormFieldsetWidgetChooserDirective.prototype.widgetFactory;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZHNldC13aWRnZXQtY2hvb3Nlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc2NoZW1hLWZvcm1zLyIsInNvdXJjZXMiOlsibGliL2Zvcm0vZm9ybS1maWVsZHNldC13aWRnZXQtY2hvb3Nlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLGdCQUFnQixFQUdoQixXQUFXLEVBQ1gsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBS2xFLE1BQU07Ozs7O0lBYUosWUFDVSxrQkFDQTtRQURBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFDaEIsa0JBQWEsR0FBYixhQUFhO0tBQ2xCOzs7O0lBRUwsUUFBUTs7UUFFTixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxDQUFDO29CQUNWLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDM0IsQ0FBQztTQUNILENBQUMsQ0FBQzs7UUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLE1BQU0sQ0FBQyxFQUFFLEVBQ1Q7WUFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDekIsUUFBUTtTQUNULENBQ0YsQ0FBQzs7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0MsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN0QyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ2xELFNBQVMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRTFCLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0tBRXREOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0tBQy9COzs7O0lBRU8saUJBQWlCO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUMzQjtRQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNyQztRQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzs7O1lBeEUvQixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjthQUMxQzs7OztZQWxCQyxnQkFBZ0I7WUFPVCxhQUFhOzs7MkJBY25CLEtBQUs7dUJBR0wsS0FBSzswQkFHTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBDb21wb25lbnRSZWYsXG4gIElucHV0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWYsXG4gIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgV2lkZ2V0RmFjdG9yeSB9IGZyb20gJy4uL3dpZGdldGZhY3RvcnknO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZSB9IGZyb20gJy4uL3dpZGdldHJlZ2lzdHJ5JztcbmltcG9ydCB7IEZpZWxkc2V0V2lkZ2V0IH0gZnJvbSAnLi4vd2lkZ2V0cy9iYXNlL2ZpZWxkc2V0LndpZGdldCc7XG5pbXBvcnQgeyBGb3JtUHJvcGVydHkgfSBmcm9tICcuLi9tb2RlbC9mb3JtLXByb3BlcnR5JztcbmltcG9ydCB7IEdlbmVyaWNQcm9wZXJ0eSB9IGZyb20gJy4uL21vZGVsL2dlbmVyaWMtcHJvcGVydHknO1xuaW1wb3J0IHsgT2JqZWN0UHJvcGVydHkgfSBmcm9tICcuLi9tb2RlbC9vYmplY3QtcHJvcGVydHknO1xuXG5pbXBvcnQgeyBGb3JtRWxlbWVudFRlbXBsYXRlUmVmIH0gZnJvbSAnLi9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NmRm9ybUZpZWxkc2V0V2lkZ2V0Q2hvb3Nlcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRzZXRXaWRnZXRDaG9vc2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1Qcm9wZXJ0eTogT2JqZWN0UHJvcGVydHk7XG5cbiAgQElucHV0KClcbiAgZmllbGRzZXQ6IGFueTtcblxuICBASW5wdXQoKVxuICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEZpZWxkc2V0V2lkZ2V0PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB3aWRnZXRGYWN0b3J5OiBXaWRnZXRGYWN0b3J5XG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgIHByb3ZpZGU6IEZvcm1FbGVtZW50VGVtcGxhdGVSZWYsXG4gICAgICAgIHVzZVZhbHVlOiB0aGlzLnRlbXBsYXRlUmVmLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB3aWRnZXQgPSB0aGlzLmdldEZpZWxkc2V0V2lkZ2V0KCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLndpZGdldEZhY3RvcnkuY3JlYXRlV2lkZ2V0PEZpZWxkc2V0V2lkZ2V0PihcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgIHdpZGdldC5pZCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogV2lkZ2V0VHlwZS5GaWVsZHNldCxcbiAgICAgICAgaW5qZWN0b3JcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgY29tcG9uZW50LmZvcm1Qcm9wZXJ0eSA9IHRoaXMuZm9ybVByb3BlcnR5O1xuICAgIGNvbXBvbmVudC50aXRsZSA9IHRoaXMuZmllbGRzZXQudGl0bGU7XG4gICAgY29tcG9uZW50LmRlc2NyaXB0aW9uID0gdGhpcy5maWVsZHNldC5kZXNjcmlwdGlvbjtcbiAgICBjb21wb25lbnQuZm9ybVByb3BlcnRpZXMgPSB0aGlzLmZpZWxkc2V0LmZpZWxkcy5tYXAoKGlkKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtUHJvcGVydHkuZ2V0KGlkKTtcbiAgICB9KTtcblxuICAgIGNvbXBvbmVudC53aWRnZXQgPSB3aWRnZXQ7XG5cbiAgICB0aGlzLmZvcm1Qcm9wZXJ0eS5maWVsZHNldFdpZGdldEluc3RhbmNlID0gY29tcG9uZW50O1xuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpZWxkc2V0V2lkZ2V0KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmZpZWxkc2V0LndpZGdldCkge1xuICAgICAgcmV0dXJuIHsgaWQ6ICdmaWVsZHNldCcgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRzZXQud2lkZ2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHsgaWQ6IHRoaXMuZmllbGRzZXQud2lkZ2V0IH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpZWxkc2V0LndpZGdldC5pZCkge1xuICAgICAgdGhpcy5maWVsZHNldC53aWRnZXQuaWQgPSAnZmllbGRzZXQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpZWxkc2V0LndpZGdldDtcbiAgfVxuXG5cbn1cbiJdfQ==