UNPKG

ngx-antd-json-schema-form

Version:
195 lines 18.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewEncapsulation } from "@angular/core"; import { FormGroup, FormControl, Validators } from "@angular/forms"; // ['', [ Validators.pattern(/^[0-9 ]{1,15}$/)]] export class NgxAntdJsonSchemaFormComponent { constructor() { this.schema = []; this.registeredForm = new EventEmitter(); this.formChange = new EventEmitter(); this.formTouch = new EventEmitter(); this.submit = new EventEmitter(); this.formValid = new EventEmitter(); this.formSettings = this.getDefaultSettings(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes["schema"]) { this.schema = changes["schema"]["currentValue"]; this.registerForm(); } if (changes["settings"]) { this.settings = changes["settings"]["currentValue"]; this.formSettings = this.mergeFormSettings(this.formSettings, this.settings); this.submitButtonConfig = this.getSubmitButtonConfig(this.formSettings.submitButton); } } /** * @return {?} */ registerForm() { this.form = this.createGroup(this.schema); this.registeredForm.emit(this.form); this.handleEmitters(); this.onFormUpdate(); } /** * @param {?} event * @return {?} */ handleSubmit(event) { event.preventDefault(); event.stopPropagation(); this.submit.emit(this.form.getRawValue()); } /** * @return {?} */ onFormUpdate() { this.form.valueChanges.subscribe((/** * @param {?} val * @return {?} */ (val) => { this.schema.forEach((/** * @param {?} item * @return {?} */ (item) => { if (val[item.key] !== undefined) { item.value = val[item.key]; } })); this.handleEmitters(); })); } /** * @param {?} schema * @return {?} */ createGroup(schema) { /** @type {?} */ const group = {}; if (schema) { schema.forEach((/** * @param {?} item * @return {?} */ (item) => { /** @type {?} */ const value = item.value !== undefined ? item.value : ""; /** @type {?} */ const formState = { value, disabled: item.disabled || false }; group[item.key] = item.required ? new FormControl(formState, Validators.required) : new FormControl(formState); })); } return new FormGroup(group); } /** * @return {?} */ handleEmitters() { /** @type {?} */ const isFormValid = this.form.valid; this.submitButtonConfig = this.getSubmitButtonConfig({ disabled: !isFormValid }); this.formValid.emit(isFormValid); if (this.form.dirty) { this.formChange.emit({ raw: this.form.getRawValue(), schema: this.schema }); this.formTouch.emit(this.form.dirty); } } /** * @return {?} */ getDefaultSettings() { /** @type {?} */ const formCommonSettings = { nzGutter: 8, itemClass: "", nzSpanLabel: 8, labelClass: "", nzSpanControl: 16, fieldClass: "" }; /** @type {?} */ const defaultSettings = (/** @type {?} */ (Object.assign({}, formCommonSettings, { submitButton: (/** @type {?} */ ({ show: true, label: "Submit", disabled: false })) }))); return JSON.parse(JSON.stringify(defaultSettings)); } /** * @param {?=} newConfig * @return {?} */ getSubmitButtonConfig(newConfig = {}) { /** @type {?} */ const defaultConfig = Object.assign((/** @type {?} */ (Object.assign({ key: "submit", type: "button" }, this.formSettings.submitButton))), newConfig); this.formSettings.submitButton = defaultConfig; return JSON.parse(JSON.stringify(defaultConfig)); } /** * @param {?} dest * @param {?} source * @return {?} */ mergeFormSettings(dest, source) { /** @type {?} */ const newSubmitButtonConfig = source.submitButton || {}; /** @type {?} */ const submitButtonConfig = Object.assign(dest.submitButton, newSubmitButtonConfig); /** @type {?} */ const settings = Object.assign(dest, source); settings.submitButton = submitButtonConfig; return settings; } } NgxAntdJsonSchemaFormComponent.decorators = [ { type: Component, args: [{ selector: "ngx-antd-json-schema-form", template: "<form *ngIf=\"form\" class=\"json-schema-form\" nz-form [formGroup]=\"form\" (submit)=\"handleSubmit($event)\">\n <ng-container *ngFor=\"let field of schema\" dynamicField [config]=\"field\" [settings]=\"formSettings\" [group]=\"form\">\n </ng-container>\n <json-schema-form-button\n *ngIf=\"formSettings.submitButton.show\"\n [group]=\"form\"\n [config]=\"submitButtonConfig\"\n [settings]=\"formSettings\"\n >\n </json-schema-form-button>\n</form>\n", encapsulation: ViewEncapsulation.None, styles: [".json-form-schema-field.ant-form-item{padding-bottom:0;margin-bottom:0}"] }] } ]; /** @nocollapse */ NgxAntdJsonSchemaFormComponent.ctorParameters = () => []; NgxAntdJsonSchemaFormComponent.propDecorators = { schema: [{ type: Input }], settings: [{ type: Input }], registeredForm: [{ type: Output }], formChange: [{ type: Output }], formTouch: [{ type: Output }], submit: [{ type: Output }], formValid: [{ type: Output }] }; if (false) { /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.schema; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.settings; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.registeredForm; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formChange; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formTouch; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.submit; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formValid; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.form; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.submitButtonConfig; /** @type {?} */ NgxAntdJsonSchemaFormComponent.prototype.formSettings; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW50ZC1qc29uLXNjaGVtYS1mb3JtLyIsInNvdXJjZXMiOlsibGliL25neC1hbnRkLWpzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFVcEUsTUFBTSxPQUFPLDhCQUE4QjtJQWN6QztRQWJTLFdBQU0sR0FBZSxFQUFFLENBQUM7UUFHdkIsbUJBQWMsR0FBNEIsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUN4RSxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEQsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZELFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFTLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFJekUsaUJBQVksR0FBaUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFeEMsQ0FBQzs7Ozs7SUFFaEIsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFD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LEVBQUUscUJBQXFCLENBQUM7O2NBQzVFLFFBQVEsR0FBaUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzFELFFBQVEsQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7UUFDM0MsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7O1lBMUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxnZUFBeUQ7Z0JBRXpELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN0Qzs7Ozs7cUJBRUUsS0FBSzt1QkFDTCxLQUFLOzZCQUVMLE1BQU07eUJBQ04sTUFBTTt3QkFDTixNQUFNO3FCQUNOLE1BQU07d0JBQ04sTUFBTTs7OztJQVBQLGdEQUFpQzs7SUFDakMsa0RBQWdDOztJQUVoQyx3REFBa0Y7O0lBQ2xGLG9EQUFrRTs7SUFDbEUsbURBQWlFOztJQUNqRSxnREFBOEQ7O0lBQzlELG1EQUF5RTs7SUFFekUsOENBQWdCOztJQUNoQiw0REFBNkI7O0lBQzdCLHNEQUF1RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEZvcm1JdGVtLCBGb3JtU2V0dGluZ3MsIEZvcm1TdWJtaXRCdXR0b24sIEZvcm1Db21tb25TZXR0aW5ncyB9IGZyb20gXCIuL21vZGVscy9pbmRleFwiO1xuXG4vLyBbJycsIFsgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eWzAtOSBdezEsMTV9JC8pXV1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJuZ3gtYW50ZC1qc29uLXNjaGVtYS1mb3JtXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vbmd4LWFudGQtanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBbnRkSnNvblNjaGVtYUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzY2hlbWE6IEZvcm1JdGVtW10gPSBbXTtcbiAgQElucHV0KCkgc2V0dGluZ3M6IEZvcm1TZXR0aW5ncztcblxuICBAT3V0cHV0KCkgcmVnaXN0ZXJlZEZvcm06IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XG4gIEBPdXRwdXQoKSBmb3JtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZm9ybVRvdWNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZm9ybVZhbGlkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBzdWJtaXRCdXR0b25Db25maWc6IEZvcm1JdGVtO1xuICBmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5ncyA9IHRoaXMuZ2V0RGVmYXVsdFNldHRpbmdzKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcInNjaGVtYVwiXSkge1xuICAgICAgdGhpcy5zY2hlbWEgPSBjaGFuZ2VzW1wic2NoZW1hXCJdW1wiY3VycmVudFZhbHVlXCJdO1xuICAgICAgdGhpcy5yZWdpc3RlckZvcm0oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJzZXR0aW5nc1wiXSkge1xuICAgICAgdGhpcy5zZXR0aW5ncyA9IGNoYW5nZXNbXCJzZXR0aW5nc1wiXVtcImN1cnJlbnRWYWx1ZVwiXTtcbiAgICAgIHRoaXMuZm9ybVNldHRpbmdzID0gdGhpcy5tZXJnZUZvcm1TZXR0aW5ncyh0aGlzLmZvcm1TZXR0aW5ncywgdGhpcy5zZXR0aW5ncyk7XG4gICAgICB0aGlzLnN1Ym1pdEJ1dHRvbkNvbmZpZyA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uQ29uZmlnKHRoaXMuZm9ybVNldHRpbmdzLnN1Ym1pdEJ1dHRvbik7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJGb3JtKCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlR3JvdXAodGhpcy5zY2hlbWEpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEZvcm0uZW1pdCh0aGlzLmZvcm0pO1xuICAgIHRoaXMuaGFuZGxlRW1pdHRlcnMoKTtcbiAgICB0aGlzLm9uRm9ybVVwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBvbkZvcm1VcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgdGhpcy5zY2hlbWEuZm9yRWFjaCgoaXRlbTogRm9ybUl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHZhbFtpdGVtLmtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWxbaXRlbS5rZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaGFuZGxlRW1pdHRlcnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUdyb3VwKHNjaGVtYSk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuXG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgc2NoZW1hLmZvckVhY2goKGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkID8gaXRlbS52YWx1ZSA6IFwiXCI7XG4gICAgICAgIGNvbnN0IGZvcm1TdGF0ZSA9IHsgdmFsdWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8IGZhbHNlIH07XG4gICAgICAgIGdyb3VwW2l0ZW0ua2V5XSA9IGl0ZW0ucmVxdWlyZWQgPyBuZXcgRm9ybUNvbnRyb2woZm9ybVN0YXRlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtQ29udHJvbChmb3JtU3RhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgaGFuZGxlRW1pdHRlcnMoKSB7XG4gICAgY29uc3QgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gPSB0aGlzLmZvcm0udmFsaWQ7XG4gICAgdGhpcy5zdWJtaXRCdXR0b25Db25maWcgPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbkNvbmZpZyh7IGRpc2FibGVkOiAhaXNGb3JtVmFsaWQgfSk7XG4gICAgdGhpcy5mb3JtVmFsaWQuZW1pdChpc0Zvcm1WYWxpZCk7XG4gICAgaWYgKHRoaXMuZm9ybS5kaXJ0eSkge1xuICAgICAgdGhpcy5mb3JtQ2hhbmdlLmVtaXQoeyByYXc6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCBzY2hlbWE6IHRoaXMuc2NoZW1hIH0pO1xuICAgICAgdGhpcy5mb3JtVG91Y2guZW1pdCh0aGlzLmZvcm0uZGlydHkpO1xuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHRTZXR0aW5ncygpOiBGb3JtU2V0dGluZ3Mge1xuICAgIGNvbnN0IGZvcm1Db21tb25TZXR0aW5nczogRm9ybUNvbW1vblNldHRpbmdzID0ge1xuICAgICAgbnpHdXR0ZXI6IDgsXG4gICAgICBpdGVtQ2xhc3M6IFwiXCIsXG4gICAgICBuelNwYW5MYWJlbDogOCxcbiAgICAgIGxhYmVsQ2xhc3M6IFwiXCIsXG4gICAgICBuelNwYW5Db250cm9sOiAxNixcbiAgICAgIGZpZWxkQ2xhc3M6IFwiXCJcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHtcbiAgICAgIC4uLmZvcm1Db21tb25TZXR0aW5ncyxcbiAgICAgIHN1Ym1pdEJ1dHRvbjoge1xuICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICBsYWJlbDogXCJTdWJtaXRcIixcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICB9IGFzIEZvcm1TdWJtaXRCdXR0b25cbiAgICB9IGFzIEZvcm1TZXR0aW5ncztcblxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRTZXR0aW5ncykpO1xuICB9XG5cbiAgZ2V0U3VibWl0QnV0dG9uQ29uZmlnKG5ld0NvbmZpZzogRm9ybVN1Ym1pdEJ1dHRvbiA9IHt9KTogRm9ybUl0ZW0ge1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBrZXk6IFwic3VibWl0XCIsXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIC4uLnRoaXMuZm9ybVNldHRpbmdzLnN1Ym1pdEJ1dHRvblxuICAgICAgfSBhcyBGb3JtSXRlbSxcbiAgICAgIG5ld0NvbmZpZ1xuICAgICk7XG4gICAgdGhpcy5mb3JtU2V0dGluZ3Muc3VibWl0QnV0dG9uID0gZGVmYXVsdENvbmZpZztcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWZhdWx0Q29uZmlnKSk7XG4gIH1cblxuICBtZXJnZUZvcm1TZXR0aW5ncyhkZXN0OiBGb3JtU2V0dGluZ3MsIHNvdXJjZTogRm9ybVNldHRpbmdzKSB7XG4gICAgY29uc3QgbmV3U3VibWl0QnV0dG9uQ29uZmlnID0gc291cmNlLnN1Ym1pdEJ1dHRvbiB8fCB7fTtcbiAgICBjb25zdCBzdWJtaXRCdXR0b25Db25maWcgPSBPYmplY3QuYXNzaWduKGRlc3Quc3VibWl0QnV0dG9uLCBuZXdTdWJtaXRCdXR0b25Db25maWcpO1xuICAgIGNvbnN0IHNldHRpbmdzOiBGb3JtU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKGRlc3QsIHNvdXJjZSk7XG4gICAgc2V0dGluZ3Muc3VibWl0QnV0dG9uID0gc3VibWl0QnV0dG9uQ29uZmlnO1xuICAgIHJldHVybiBzZXR0aW5ncztcbiAgfVxufVxuIl19