UNPKG

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

106 lines (105 loc) 10.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { SchemaPropertyType } from '../../schema'; import { TemplateSchemaElement } from '../template-schema-element'; import { TemplateElementType } from '../template-schema-element-registry'; /** * @abstract */ export class FieldParent extends TemplateSchemaElement { constructor() { super(...arguments); this.name = ''; } /** * @return {?} */ get path() { if (!this.name) { return ''; } return '/' + this.name; } /** * @return {?} */ getButtons() { return this.childButtons.map((button, index) => { if (!button.id) { /** @type {?} */ const randomString = Math.random().toString(16).substr(2, 8); // generate id for button button.id = this.name + randomString + '_' + (index + 1); } // register as button action the EventEmitter click this.actionRegistry.register(button.id, button.click.emit.bind(button.click)); this.templateRegistry.register(button.id, button, TemplateElementType.Button); /** @type {?} */ const _button = /** @type {?} */ ({ id: button.id, label: button.label, options: button.options }); if (button.widget) { _button.widget = button.widget; } return _button; }); } /** * @param {?} fields * @return {?} */ getFieldsValidators(fields) { return fields.reduce((validators, field) => { return validators.concat(field.getValidators()); }, []); } /** * @param {?} fields * @return {?} */ getFieldsSchema(fields) { return fields.reduce((schema, field) => { switch (this.type) { case SchemaPropertyType.Array: schema.items = field.getSchema(); break; default: if (!schema.properties) { schema.properties = {}; } schema.properties[field.name] = field.getSchema(); break; } /** @type {?} */ const buttons = field.getButtons(); if (buttons.length > 0) { schema.buttons = buttons; } if (!field.required) { return schema; } if (!schema.required) { schema.required = []; } schema.required.push(field.name); return schema; }, {}); } } if (false) { /** @type {?} */ FieldParent.prototype.name; /** @type {?} */ FieldParent.prototype.type; /** @type {?} */ FieldParent.prototype.actionRegistry; /** @type {?} */ FieldParent.prototype.templateRegistry; /** @type {?} */ FieldParent.prototype.childButtons; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtcGFyZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNjaGVtYS1mb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi90ZW1wbGF0ZS1zY2hlbWEvZmllbGQvZmllbGQtcGFyZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUVMLG1CQUFtQixFQUNwQixNQUFNLHFDQUFxQyxDQUFDOzs7O0FBSzdDLE1BQU0sa0JBQTRCLFNBQVEscUJBQXFCOzs7b0JBRXRELEVBQUU7Ozs7O0lBR1QsSUFBSSxJQUFJO1FBQ04sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztLQUN4Qjs7OztJQU9ELFVBQVU7UUFFUixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFFN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Z0JBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztnQkFFN0QsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksR0FBRyxHQUFHLEdBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDM0Q7O1lBR0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQzFCLE1BQU0sQ0FBQyxFQUFFLEVBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDckMsQ0FBQztZQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQzVCLE1BQU0sQ0FBQyxFQUFFLEVBQ1QsTUFBTSxFQUNOLG1CQUFtQixDQUFDLE1BQU0sQ0FDM0IsQ0FBQzs7WUFFRixNQUFNLE9BQU8scUJBQVE7Z0JBQ25CLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTzthQUN4QixFQUFDO1lBRUYsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNoQztZQUVELE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FFaEIsQ0FBQyxDQUFDO0tBQ0o7Ozs7O0lBRVMsbUJBQW1CLENBQzNCLE1BQWU7UUFHZixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNqRCxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBRVI7Ozs7O0lBRVMsZUFBZSxDQUFDLE1BQWU7UUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFFMUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLEtBQUssa0JBQWtCLENBQUMsS0FBSztvQkFDM0IsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2pDLEtBQUssQ0FBQztnQkFFUjtvQkFDRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztxQkFDeEI7b0JBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNsRCxLQUFLLENBQUM7YUFDVDs7WUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzthQUMxQjtZQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZjtZQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZixFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ1I7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFNjaGVtYVByb3BlcnR5VHlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYSc7XG5pbXBvcnQgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL21vZGVsL2FjdGlvbnJlZ2lzdHJ5JztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRlbXBsYXRlU2NoZW1hRWxlbWVudCB9IGZyb20gJy4uL3RlbXBsYXRlLXNjaGVtYS1lbGVtZW50JztcbmltcG9ydCB7XG4gIFRlbXBsYXRlU2NoZW1hRWxlbWVudFJlZ2lzdHJ5LFxuICBUZW1wbGF0ZUVsZW1lbnRUeXBlXG59IGZyb20gJy4uL3RlbXBsYXRlLXNjaGVtYS1lbGVtZW50LXJlZ2lzdHJ5JztcblxuXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4vZmllbGQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmllbGRQYXJlbnQgZXh0ZW5kcyBUZW1wbGF0ZVNjaGVtYUVsZW1lbnQge1xuXG4gIG5hbWUgPSAnJztcbiAgdHlwZTogU2NoZW1hUHJvcGVydHlUeXBlO1xuXG4gIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gJy8nICsgdGhpcy5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvblJlZ2lzdHJ5OiBBY3Rpb25SZWdpc3RyeTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHRlbXBsYXRlUmVnaXN0cnk6IFRlbXBsYXRlU2NoZW1hRWxlbWVudFJlZ2lzdHJ5O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hpbGRCdXR0b25zOiBRdWVyeUxpc3Q8QnV0dG9uQ29tcG9uZW50PjtcblxuXG4gIGdldEJ1dHRvbnMoKTogeyBpZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCB3aWRnZXQ/OiBzdHJpbmcgfCBvYmplY3QgfVtdIHtcblxuICAgIHJldHVybiB0aGlzLmNoaWxkQnV0dG9ucy5tYXAoKGJ1dHRvbiwgaW5kZXgpID0+IHtcblxuICAgICAgaWYgKCFidXR0b24uaWQpIHtcbiAgICAgICAgY29uc3QgcmFuZG9tU3RyaW5nID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyKDIsIDgpO1xuICAgICAgICAvLyBnZW5lcmF0ZSBpZCBmb3IgYnV0dG9uXG4gICAgICAgIGJ1dHRvbi5pZCA9IHRoaXMubmFtZSArIHJhbmRvbVN0cmluZyArICdfJyAgKyAoaW5kZXggKyAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVnaXN0ZXIgYXMgYnV0dG9uIGFjdGlvbiB0aGUgRXZlbnRFbWl0dGVyIGNsaWNrXG4gICAgICB0aGlzLmFjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKFxuICAgICAgICBidXR0b24uaWQsXG4gICAgICAgIGJ1dHRvbi5jbGljay5lbWl0LmJpbmQoYnV0dG9uLmNsaWNrKVxuICAgICAgKTtcblxuICAgICAgdGhpcy50ZW1wbGF0ZVJlZ2lzdHJ5LnJlZ2lzdGVyKFxuICAgICAgICBidXR0b24uaWQsXG4gICAgICAgIGJ1dHRvbixcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50VHlwZS5CdXR0b25cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IF9idXR0b24gPSA8YW55PntcbiAgICAgICAgaWQ6IGJ1dHRvbi5pZCxcbiAgICAgICAgbGFiZWw6IGJ1dHRvbi5sYWJlbCxcbiAgICAgICAgb3B0aW9uczogYnV0dG9uLm9wdGlvbnNcbiAgICAgIH07XG5cbiAgICAgIGlmIChidXR0b24ud2lkZ2V0KSB7XG4gICAgICAgIF9idXR0b24ud2lkZ2V0ID0gYnV0dG9uLndpZGdldDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9idXR0b247XG5cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWVsZHNWYWxpZGF0b3JzKFxuICAgIGZpZWxkczogRmllbGRbXVxuICApOiB7IHBhdGg6IHN0cmluZywgdmFsaWRhdG9yczogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIH1bXSB7XG5cbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgodmFsaWRhdG9ycywgZmllbGQpID0+IHtcbiAgICAgIHJldHVybiB2YWxpZGF0b3JzLmNvbmNhdChmaWVsZC5nZXRWYWxpZGF0b3JzKCkpO1xuICAgIH0sIFtdKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEZpZWxkc1NjaGVtYShmaWVsZHM6IEZpZWxkW10pIHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoc2NoZW1hOiBhbnksIGZpZWxkKSA9PiB7XG5cbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHlUeXBlLkFycmF5OlxuICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IGZpZWxkLmdldFNjaGVtYSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllc1tmaWVsZC5uYW1lXSA9IGZpZWxkLmdldFNjaGVtYSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25zID0gZmllbGQuZ2V0QnV0dG9ucygpO1xuICAgICAgaWYgKGJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzY2hlbWEuYnV0dG9ucyA9IGJ1dHRvbnM7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmllbGQucmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzY2hlbWEucmVxdWlyZWQpIHtcbiAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gW107XG4gICAgICB9XG4gICAgICBzY2hlbWEucmVxdWlyZWQucHVzaChmaWVsZC5uYW1lKTtcbiAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfSwge30pO1xuICB9XG5cbn1cbiJdfQ==