@ng-flexy/form
Version:
Flexy components and tools to build Angular 8+ applications
65 lines • 10.2 kB
JavaScript
import { Injectable } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { cloneDeep } from 'lodash';
import { FlexyFormJsonMapperService } from './json-mapper.service';
import { FlexyFormFieldType } from '../models/layout-json-schema.model';
import * as i0 from "@angular/core";
import * as i1 from "./json-mapper.service";
export class FlexyFormSchemaService {
constructor(jsonMapperService) {
this.jsonMapperService = jsonMapperService;
}
addGroupItemToSchema(parentSchemaRef, itemKey, groupSchema, controlGroupName, readonly) {
let schema = null;
if (!this.validateGroupKey(itemKey, groupSchema)) {
const jsonSchema = cloneDeep(groupSchema.items);
jsonSchema.name = controlGroupName;
jsonSchema.type = FlexyFormFieldType.Group;
const newValue = jsonSchema && jsonSchema.children ? {} : null;
const control = this.jsonMapperService.createItemControl(jsonSchema, readonly, newValue);
parentSchemaRef.formControl.addControl(itemKey, control);
parentSchemaRef.formControl.markAsDirty();
schema = this.jsonMapperService.createGroupItemSchema(control, jsonSchema, groupSchema.indexDef, null, readonly, {}, newValue, itemKey, parentSchemaRef.formControl);
parentSchemaRef.children.push(schema);
// fix form control - should be the same but is not
parentSchemaRef.formControl.setControl(itemKey, schema.formControl);
}
return schema;
}
validateGroupKey(key, groupSchema) {
const patternReg = groupSchema.indexPattern ? new RegExp(groupSchema.indexPattern, 'g') : null;
if (!key) {
return 'empty';
}
else if (patternReg && !patternReg.exec(key)) {
return 'wrong_format';
}
return null;
}
removeGroupItemToSchema(layoutSchemaRef, index) {
if (layoutSchemaRef.children[index]) {
const schemaItem = layoutSchemaRef.children[index];
const groupKey = schemaItem.groupKey;
if (groupKey &&
layoutSchemaRef.formControl &&
layoutSchemaRef.formControl instanceof FormGroup &&
layoutSchemaRef.formControl.contains(groupKey)) {
layoutSchemaRef.children.splice(index, 1);
layoutSchemaRef.formControl.removeControl(groupKey);
layoutSchemaRef.formControl.markAsDirty();
return groupKey;
}
}
return null;
}
}
FlexyFormSchemaService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FlexyFormSchemaService_Factory() { return new FlexyFormSchemaService(i0.ɵɵinject(i1.FlexyFormJsonMapperService)); }, token: FlexyFormSchemaService, providedIn: "root" });
FlexyFormSchemaService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
FlexyFormSchemaService.ctorParameters = () => [
{ type: FlexyFormJsonMapperService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtL3NyYy9saWIvc2VydmljZXMvc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQXlDLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUsvRyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQW9CLGlCQUE2QztRQUE3QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTRCO0lBQUcsQ0FBQztJQUVyRSxvQkFBb0IsQ0FDbEIsZUFBMkMsRUFDM0MsT0FBZSxFQUNmLFdBQWtELEVBQ2xELGdCQUF3QixFQUN4QixRQUFpQjtRQUVqQixJQUFJLE1BQU0sR0FBK0IsSUFBSSxDQUFDO1FBRTlDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUEwQyxDQUFDO1lBRXpGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7WUFDbkMsVUFBVSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRS9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXhGLGVBQWUsQ0FBQyxXQUF5QixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsZUFBZSxDQUFDLFdBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFekQsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FDbkQsT0FBTyxFQUNQLFVBQVUsRUFDVixXQUFXLENBQUMsUUFBUSxFQUNwQixJQUFJLEVBQ0osUUFBUSxFQUNSLEVBQUUsRUFDRixRQUFRLEVBQ1IsT0FBTyxFQUNQLGVBQWUsQ0FBQyxXQUFXLENBQzVCLENBQUM7WUFDRixlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxtREFBbUQ7WUFDbEQsZUFBZSxDQUFDLFdBQXlCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEY7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQWtEO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTSxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxjQUFjLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxlQUEyQyxFQUFFLEtBQUs7UUFDeEUsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUErQixDQUFDO1lBQ2pGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDckMsSUFDRSxRQUFRO2dCQUNSLGVBQWUsQ0FBQyxXQUFXO2dCQUMzQixlQUFlLENBQUMsV0FBVyxZQUFZLFNBQVM7Z0JBQy9DLGVBQWUsQ0FBQyxXQUF5QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDN0Q7Z0JBQ0EsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxlQUFlLENBQUMsV0FBeUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLGVBQWUsQ0FBQyxXQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7O1lBekVGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBTFEsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEZsZXh5Rm9ybUZpZWxkTGF5b3V0U2NoZW1hIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dC1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRmxleHlGb3JtSnNvbk1hcHBlclNlcnZpY2UgfSBmcm9tICcuL2pzb24tbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxleHlGb3JtQ29tcGxleEZpZWxkTGF5b3V0SnNvblNjaGVtYSwgRmxleHlGb3JtRmllbGRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dC1qc29uLXNjaGVtYS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZsZXh5Rm9ybVNjaGVtYVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGpzb25NYXBwZXJTZXJ2aWNlOiBGbGV4eUZvcm1Kc29uTWFwcGVyU2VydmljZSkge31cblxuICBhZGRHcm91cEl0ZW1Ub1NjaGVtYShcbiAgICBwYXJlbnRTY2hlbWFSZWY6IEZsZXh5Rm9ybUZpZWxkTGF5b3V0U2NoZW1hLFxuICAgIGl0ZW1LZXk6IHN0cmluZyxcbiAgICBncm91cFNjaGVtYTogRmxleHlGb3JtQ29tcGxleEZpZWxkTGF5b3V0SnNvblNjaGVtYSxcbiAgICBjb250cm9sR3JvdXBOYW1lOiBzdHJpbmcsXG4gICAgcmVhZG9ubHk6IGJvb2xlYW5cbiAgKTogRmxleHlGb3JtRmllbGRMYXlvdXRTY2hlbWEge1xuICAgIGxldCBzY2hlbWE6IEZsZXh5Rm9ybUZpZWxkTGF5b3V0U2NoZW1hID0gbnVsbDtcblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUdyb3VwS2V5KGl0ZW1LZXksIGdyb3VwU2NoZW1hKSkge1xuICAgICAgY29uc3QganNvblNjaGVtYSA9IGNsb25lRGVlcChncm91cFNjaGVtYS5pdGVtcykgYXMgRmxleHlGb3JtQ29tcGxleEZpZWxkTGF5b3V0SnNvblNjaGVtYTtcblxuICAgICAganNvblNjaGVtYS5uYW1lID0gY29udHJvbEdyb3VwTmFtZTtcbiAgICAgIGpzb25TY2hlbWEudHlwZSA9IEZsZXh5Rm9ybUZpZWxkVHlwZS5Hcm91cDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0ganNvblNjaGVtYSAmJiBqc29uU2NoZW1hLmNoaWxkcmVuID8ge30gOiBudWxsO1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5qc29uTWFwcGVyU2VydmljZS5jcmVhdGVJdGVtQ29udHJvbChqc29uU2NoZW1hLCByZWFkb25seSwgbmV3VmFsdWUpO1xuXG4gICAgICAocGFyZW50U2NoZW1hUmVmLmZvcm1Db250cm9sIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbChpdGVtS2V5LCBjb250cm9sKTtcbiAgICAgIChwYXJlbnRTY2hlbWFSZWYuZm9ybUNvbnRyb2wgYXMgRm9ybUdyb3VwKS5tYXJrQXNEaXJ0eSgpO1xuXG4gICAgICBzY2hlbWEgPSB0aGlzLmpzb25NYXBwZXJTZXJ2aWNlLmNyZWF0ZUdyb3VwSXRlbVNjaGVtYShcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAganNvblNjaGVtYSxcbiAgICAgICAgZ3JvdXBTY2hlbWEuaW5kZXhEZWYsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICB7fSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIGl0ZW1LZXksXG4gICAgICAgIHBhcmVudFNjaGVtYVJlZi5mb3JtQ29udHJvbFxuICAgICAgKTtcbiAgICAgIHBhcmVudFNjaGVtYVJlZi5jaGlsZHJlbi5wdXNoKHNjaGVtYSk7XG4gICAgICAvLyBmaXggZm9ybSBjb250cm9sIC0gc2hvdWxkIGJlIHRoZSBzYW1lIGJ1dCBpcyBub3RcbiAgICAgIChwYXJlbnRTY2hlbWFSZWYuZm9ybUNvbnRyb2wgYXMgRm9ybUdyb3VwKS5zZXRDb250cm9sKGl0ZW1LZXksIHNjaGVtYS5mb3JtQ29udHJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIHZhbGlkYXRlR3JvdXBLZXkoa2V5LCBncm91cFNjaGVtYTogRmxleHlGb3JtQ29tcGxleEZpZWxkTGF5b3V0SnNvblNjaGVtYSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0dGVyblJlZyA9IGdyb3VwU2NoZW1hLmluZGV4UGF0dGVybiA/IG5ldyBSZWdFeHAoZ3JvdXBTY2hlbWEuaW5kZXhQYXR0ZXJuLCAnZycpIDogbnVsbDtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuICdlbXB0eSc7XG4gICAgfSBlbHNlIGlmIChwYXR0ZXJuUmVnICYmICFwYXR0ZXJuUmVnLmV4ZWMoa2V5KSkge1xuICAgICAgcmV0dXJuICd3cm9uZ19mb3JtYXQnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbW92ZUdyb3VwSXRlbVRvU2NoZW1hKGxheW91dFNjaGVtYVJlZjogRmxleHlGb3JtRmllbGRMYXlvdXRTY2hlbWEsIGluZGV4KTogc3RyaW5nIHtcbiAgICBpZiAobGF5b3V0U2NoZW1hUmVmLmNoaWxkcmVuW2luZGV4XSkge1xuICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IGxheW91dFNjaGVtYVJlZi5jaGlsZHJlbltpbmRleF0gYXMgRmxleHlGb3JtRmllbGRMYXlvdXRTY2hlbWE7XG4gICAgICBjb25zdCBncm91cEtleSA9IHNjaGVtYUl0ZW0uZ3JvdXBLZXk7XG4gICAgICBpZiAoXG4gICAgICAgIGdyb3VwS2V5ICYmXG4gICAgICAgIGxheW91dFNjaGVtYVJlZi5mb3JtQ29udHJvbCAmJlxuICAgICAgICBsYXlvdXRTY2hlbWFSZWYuZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgJiZcbiAgICAgICAgKGxheW91dFNjaGVtYVJlZi5mb3JtQ29udHJvbCBhcyBGb3JtR3JvdXApLmNvbnRhaW5zKGdyb3VwS2V5KVxuICAgICAgKSB7XG4gICAgICAgIGxheW91dFNjaGVtYVJlZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAobGF5b3V0U2NoZW1hUmVmLmZvcm1Db250cm9sIGFzIEZvcm1Hcm91cCkucmVtb3ZlQ29udHJvbChncm91cEtleSk7XG4gICAgICAgIChsYXlvdXRTY2hlbWFSZWYuZm9ybUNvbnRyb2wgYXMgRm9ybUdyb3VwKS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICByZXR1cm4gZ3JvdXBLZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=