@ng-flexy/form
Version:
Flexy components and tools to build Angular 8+ applications
110 lines • 13.6 kB
JavaScript
import { FlexyFormFieldType } from '../models/layout-json-schema.model';
export const HIDDEN_IF_GROUP_NAME = '__if__';
export const HIDDEN_CALC_GROUP_NAME = '__calc__';
export function parseFormJson(json) {
if (Array.isArray(json)) {
return parseFormVersion1(json);
}
else if (json.schemaVersion === 1) {
return parseFormVersion1(json.schema);
}
else {
const schema = json.schema;
assignHiddenNames(schema);
checkSchema(schema);
return json.schema;
}
}
export function checkSchema(schema) {
if (schema && Array.isArray(schema)) {
schema.forEach((jsonItem, index) => {
if (jsonItem.if &&
(jsonItem.name || jsonItem.type)) {
console.warn('Wrong if schema', jsonItem);
}
if (jsonItem.children) {
checkSchema(jsonItem.children);
}
});
}
}
export function assignHiddenNames(schema) {
if (schema && Array.isArray(schema)) {
schema.forEach((jsonItem, index) => {
// if ((jsonItem as FlexyFormIfJsonSchema).if && !(jsonItem as FlexyFormFieldLayoutJsonSchema).type) {
// (jsonItem as FlexyFormFieldLayoutJsonSchema).type = FlexyFormFieldType.Group;
// }
if (jsonItem.calc && !jsonItem.name) {
jsonItem.name =
HIDDEN_CALC_GROUP_NAME +
'.' +
(jsonItem.id
? jsonItem.id
: 'ui-' +
Math.random()
.toString(36)
.substr(2, 9));
}
if (jsonItem.children) {
assignHiddenNames(jsonItem.children);
}
});
}
}
export function parseFormVersion1(json) {
const parsed = [];
json.forEach(item => {
parsed.push(parseFormVersion1Item(item));
});
return parsed;
}
export function parseFormVersion1Item(item) {
const schema = {};
if (item.properties && item.properties.class) {
if (!schema.attributes) {
schema.attributes = {};
}
schema.attributes.class = item.properties.class;
}
if (item.component) {
Object.assign(schema, {
component: item.component,
properties: item.componentInputs ? item.componentInputs : {}
});
}
if (item.controlGroupName) {
Object.assign(schema, {
name: item.controlGroupName,
type: FlexyFormFieldType.Group,
validators: item.validators,
groupKey: item.groupKey,
items: item.items ? parseFormVersion1Item(item.items) : void 0,
indexDef: item.itemKeyDef,
indexPattern: item.itemKeyPattern,
indexGenPattern: item.itemKeyGen
});
}
else if (item.controlArrayName) {
Object.assign(schema, {
name: item.controlArrayName,
type: FlexyFormFieldType.Array,
validators: item.validators,
items: item.items ? parseFormVersion1Item(item.items) : void 0,
indexDef: item.itemIndexDef
});
}
else if (item.controlName) {
Object.assign(schema, {
name: item.controlName,
validators: item.validators
});
}
if (item.children) {
schema.children = parseFormVersion1(item.children);
}
return schema;
}
export function replaceMarker(s, marker, key) {
return s.split(marker).join('' + key);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1tYXBwZXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtL3NyYy9saWIvc2VydmljZXMvanNvbi1tYXBwZXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGtCQUFrQixFQUluQixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFFakQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUF5QjtJQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQztTQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUU7UUFDbkMsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkM7U0FBTTtRQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNwQjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQW1DO0lBQzdELElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqQyxJQUNHLFFBQWtDLENBQUMsRUFBRTtnQkFDdEMsQ0FBRSxRQUEyQyxDQUFDLElBQUksSUFBSyxRQUEyQyxDQUFDLElBQUksQ0FBQyxFQUN4RztnQkFD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QWM7WUFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ2pDLENBQUMsQ0FBQztLQUNKO1NBQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDM0IsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM1QixDQUFDLENBQUM7S0FDSjtJQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNwRDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVMsRUFBRSxNQUFjLEVBQUUsR0FBb0I7SUFDM0UsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZsZXh5Rm9ybUNhbGNKc29uU2NoZW1hLFxuICBGbGV4eUZvcm1GaWVsZExheW91dEpzb25TY2hlbWEsXG4gIEZsZXh5Rm9ybUZpZWxkVHlwZSxcbiAgRmxleHlGb3JtSWZKc29uU2NoZW1hLFxuICBGbGV4eUZvcm1MYXlvdXRKc29uLFxuICBGbGV4eUZvcm1MYXlvdXRKc29uU2NoZW1hXG59IGZyb20gJy4uL21vZGVscy9sYXlvdXQtanNvbi1zY2hlbWEubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgSElEREVOX0lGX0dST1VQX05BTUUgPSAnX19pZl9fJztcbmV4cG9ydCBjb25zdCBISURERU5fQ0FMQ19HUk9VUF9OQU1FID0gJ19fY2FsY19fJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRm9ybUpzb24oanNvbjogRmxleHlGb3JtTGF5b3V0SnNvbik6IEZsZXh5Rm9ybUxheW91dEpzb25TY2hlbWFbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgcmV0dXJuIHBhcnNlRm9ybVZlcnNpb24xKGpzb24pO1xuICB9IGVsc2UgaWYgKGpzb24uc2NoZW1hVmVyc2lvbiA9PT0gMSkge1xuICAgIHJldHVybiBwYXJzZUZvcm1WZXJzaW9uMShqc29uLnNjaGVtYSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2NoZW1hID0ganNvbi5zY2hlbWE7XG4gICAgYXNzaWduSGlkZGVuTmFtZXMoc2NoZW1hKTtcbiAgICBjaGVja1NjaGVtYShzY2hlbWEpO1xuICAgIHJldHVybiBqc29uLnNjaGVtYTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTY2hlbWEoc2NoZW1hOiBGbGV4eUZvcm1MYXlvdXRKc29uU2NoZW1hW10pIHtcbiAgaWYgKHNjaGVtYSAmJiBBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBzY2hlbWEuZm9yRWFjaCgoanNvbkl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChqc29uSXRlbSBhcyBGbGV4eUZvcm1JZkpzb25TY2hlbWEpLmlmICYmXG4gICAgICAgICgoanNvbkl0ZW0gYXMgRmxleHlGb3JtRmllbGRMYXlvdXRKc29uU2NoZW1hKS5uYW1lIHx8IChqc29uSXRlbSBhcyBGbGV4eUZvcm1GaWVsZExheW91dEpzb25TY2hlbWEpLnR5cGUpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXcm9uZyBpZiBzY2hlbWEnLCBqc29uSXRlbSk7XG4gICAgICB9XG4gICAgICBpZiAoanNvbkl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgY2hlY2tTY2hlbWEoanNvbkl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25IaWRkZW5OYW1lcyhzY2hlbWE6IEZsZXh5Rm9ybUxheW91dEpzb25TY2hlbWFbXSkge1xuICBpZiAoc2NoZW1hICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHNjaGVtYS5mb3JFYWNoKChqc29uSXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIGlmICgoanNvbkl0ZW0gYXMgRmxleHlGb3JtSWZKc29uU2NoZW1hKS5pZiAmJiAhKGpzb25JdGVtIGFzIEZsZXh5Rm9ybUZpZWxkTGF5b3V0SnNvblNjaGVtYSkudHlwZSkge1xuICAgICAgLy8gICAoanNvbkl0ZW0gYXMgRmxleHlGb3JtRmllbGRMYXlvdXRKc29uU2NoZW1hKS50eXBlID0gRmxleHlGb3JtRmllbGRUeXBlLkdyb3VwO1xuICAgICAgLy8gfVxuICAgICAgaWYgKChqc29uSXRlbSBhcyBGbGV4eUZvcm1DYWxjSnNvblNjaGVtYSkuY2FsYyAmJiAhKGpzb25JdGVtIGFzIEZsZXh5Rm9ybUZpZWxkTGF5b3V0SnNvblNjaGVtYSkubmFtZSkge1xuICAgICAgICAoanNvbkl0ZW0gYXMgRmxleHlGb3JtRmllbGRMYXlvdXRKc29uU2NoZW1hKS5uYW1lID1cbiAgICAgICAgICBISURERU5fQ0FMQ19HUk9VUF9OQU1FICtcbiAgICAgICAgICAnLicgK1xuICAgICAgICAgIChqc29uSXRlbS5pZFxuICAgICAgICAgICAgPyBqc29uSXRlbS5pZFxuICAgICAgICAgICAgOiAndWktJyArXG4gICAgICAgICAgICAgIE1hdGgucmFuZG9tKClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoMzYpXG4gICAgICAgICAgICAgICAgLnN1YnN0cigyLCA5KSk7XG4gICAgICB9XG4gICAgICBpZiAoanNvbkl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgYXNzaWduSGlkZGVuTmFtZXMoanNvbkl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZvcm1WZXJzaW9uMShqc29uOiBhbnlbXSk6IEZsZXh5Rm9ybUxheW91dEpzb25TY2hlbWFbXSB7XG4gIGNvbnN0IHBhcnNlZDogRmxleHlGb3JtTGF5b3V0SnNvblNjaGVtYVtdID0gW107XG4gIGpzb24uZm9yRWFjaChpdGVtID0+IHtcbiAgICBwYXJzZWQucHVzaChwYXJzZUZvcm1WZXJzaW9uMUl0ZW0oaXRlbSkpO1xuICB9KTtcbiAgcmV0dXJuIHBhcnNlZCBhcyBGbGV4eUZvcm1MYXlvdXRKc29uU2NoZW1hW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZvcm1WZXJzaW9uMUl0ZW0oaXRlbTogYW55KTogRmxleHlGb3JtTGF5b3V0SnNvblNjaGVtYSB7XG4gIGNvbnN0IHNjaGVtYSA9IHt9IGFzIEZsZXh5Rm9ybUxheW91dEpzb25TY2hlbWE7XG4gIGlmIChpdGVtLnByb3BlcnRpZXMgJiYgaXRlbS5wcm9wZXJ0aWVzLmNsYXNzKSB7XG4gICAgaWYgKCFzY2hlbWEuYXR0cmlidXRlcykge1xuICAgICAgc2NoZW1hLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICB9XG4gICAgc2NoZW1hLmF0dHJpYnV0ZXMuY2xhc3MgPSBpdGVtLnByb3BlcnRpZXMuY2xhc3M7XG4gIH1cbiAgaWYgKGl0ZW0uY29tcG9uZW50KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAgIGNvbXBvbmVudDogaXRlbS5jb21wb25lbnQsXG4gICAgICBwcm9wZXJ0aWVzOiBpdGVtLmNvbXBvbmVudElucHV0cyA/IGl0ZW0uY29tcG9uZW50SW5wdXRzIDoge31cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpdGVtLmNvbnRyb2xHcm91cE5hbWUpIHtcbiAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgICAgbmFtZTogaXRlbS5jb250cm9sR3JvdXBOYW1lLFxuICAgICAgdHlwZTogRmxleHlGb3JtRmllbGRUeXBlLkdyb3VwLFxuICAgICAgdmFsaWRhdG9yczogaXRlbS52YWxpZGF0b3JzLFxuICAgICAgZ3JvdXBLZXk6IGl0ZW0uZ3JvdXBLZXksXG4gICAgICBpdGVtczogaXRlbS5pdGVtcyA/IHBhcnNlRm9ybVZlcnNpb24xSXRlbShpdGVtLml0ZW1zKSA6IHZvaWQgMCxcbiAgICAgIGluZGV4RGVmOiBpdGVtLml0ZW1LZXlEZWYsXG4gICAgICBpbmRleFBhdHRlcm46IGl0ZW0uaXRlbUtleVBhdHRlcm4sXG4gICAgICBpbmRleEdlblBhdHRlcm46IGl0ZW0uaXRlbUtleUdlblxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGl0ZW0uY29udHJvbEFycmF5TmFtZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgICBuYW1lOiBpdGVtLmNvbnRyb2xBcnJheU5hbWUsXG4gICAgICB0eXBlOiBGbGV4eUZvcm1GaWVsZFR5cGUuQXJyYXksXG4gICAgICB2YWxpZGF0b3JzOiBpdGVtLnZhbGlkYXRvcnMsXG4gICAgICBpdGVtczogaXRlbS5pdGVtcyA/IHBhcnNlRm9ybVZlcnNpb24xSXRlbShpdGVtLml0ZW1zKSA6IHZvaWQgMCxcbiAgICAgIGluZGV4RGVmOiBpdGVtLml0ZW1JbmRleERlZlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGl0ZW0uY29udHJvbE5hbWUpIHtcbiAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgICAgbmFtZTogaXRlbS5jb250cm9sTmFtZSxcbiAgICAgIHZhbGlkYXRvcnM6IGl0ZW0udmFsaWRhdG9yc1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICBzY2hlbWEuY2hpbGRyZW4gPSBwYXJzZUZvcm1WZXJzaW9uMShpdGVtLmNoaWxkcmVuKTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTWFya2VyKHM6IHN0cmluZywgbWFya2VyOiBzdHJpbmcsIGtleTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gIHJldHVybiBzLnNwbGl0KG1hcmtlcikuam9pbignJyArIGtleSk7XG59XG4iXX0=