angular2-json-schema-form
Version:
Angular 2 JSON Schema Form builder
636 lines • 32.5 kB
JavaScript
"use strict";
var _ = require("lodash");
var validator_functions_1 = require("./validator.functions");
var utility_functions_1 = require("./utility.functions");
var jsonpointer_functions_1 = require("./jsonpointer.functions");
var json_schema_functions_1 = require("./json-schema.functions");
var form_group_functions_1 = require("./form-group.functions");
function buildLayout(jsf, widgetLibrary) {
var hasSubmitButton = !jsonpointer_functions_1.JsonPointer.get(jsf, '/globalOptions/addSubmit');
var formLayout = mapLayout(jsf.layout, function (layoutItem, index, layoutPointer) {
var currentIndex = index;
var newNode = {};
if (validator_functions_1.isObject(layoutItem)) {
newNode = layoutItem;
}
else if (jsonpointer_functions_1.JsonPointer.isJsonPointer(layoutItem)) {
newNode.dataPointer = layoutItem;
}
else if (validator_functions_1.isString(layoutItem)) {
newNode.key = layoutItem;
}
else {
console.error('buildLayout error: Form layout element not recognized:');
console.error(layoutItem);
return null;
}
Object.assign(newNode, {
_id: _.uniqueId(),
layoutPointer: layoutPointer.replace(/\/\d+/g, '/-'),
options: {},
});
var itemSchema = null;
if (!utility_functions_1.hasOwn(newNode, 'dataPointer')) {
if (utility_functions_1.hasOwn(newNode, 'key')) {
if (newNode.key === '*') {
newNode.dataPointer = newNode.key;
}
else if (jsonpointer_functions_1.JsonPointer.isJsonPointer(newNode.key)) {
newNode.dataPointer = jsonpointer_functions_1.JsonPointer.compile(newNode.key);
}
else {
newNode.dataPointer =
jsonpointer_functions_1.JsonPointer.compile(jsonpointer_functions_1.JsonPointer.parseObjectPath(newNode.key), '-');
}
delete newNode.key;
}
else if (utility_functions_1.hasOwn(newNode, 'type') && newNode.type.slice(-5) === 'array') {
var findDataPointer_1 = function (items) {
if (items === null || typeof items !== 'object')
return;
if (utility_functions_1.hasOwn(items, 'dataPointer'))
return items.dataPointer;
if (validator_functions_1.isArray(items.items)) {
for (var _i = 0, _a = items.items; _i < _a.length; _i++) {
var item = _a[_i];
if (utility_functions_1.hasOwn(item, 'dataPointer') &&
item.dataPointer.indexOf('/-') !== -1) {
return item.dataPointer;
}
if (utility_functions_1.hasOwn(item, 'items')) {
var searchItem = findDataPointer_1(item);
if (searchItem)
return searchItem;
}
}
}
};
var childDataPointer = findDataPointer_1(newNode);
if (childDataPointer) {
newNode.dataPointer =
childDataPointer.slice(0, childDataPointer.lastIndexOf('/-'));
}
}
}
if (utility_functions_1.hasOwn(newNode, 'dataPointer')) {
if (newNode.dataPointer === '*') {
return buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer.slice(0, -2));
}
newNode.dataPointer =
jsonpointer_functions_1.JsonPointer.toGenericPointer(newNode.dataPointer, jsf.arrayMap);
var LastKey = jsonpointer_functions_1.JsonPointer.toKey(newNode.dataPointer);
if (validator_functions_1.isString(LastKey) && LastKey !== '-')
newNode.name = LastKey;
if (!jsf.dataMap.has(newNode.dataPointer)) {
jsf.dataMap.set(newNode.dataPointer, new Map);
}
else if (jsf.dataMap.get(newNode.dataPointer).has('schemaPointer')) {
itemSchema = jsonpointer_functions_1.JsonPointer.get(jsf.schema, jsf.dataMap.get(newNode.dataPointer).get('schemaPointer'));
}
else {
itemSchema = json_schema_functions_1.getFromSchema(jsf.schema, newNode.dataPointer);
}
if (itemSchema) {
if (!utility_functions_1.hasOwn(newNode, 'type')) {
newNode.type = json_schema_functions_1.getInputType(itemSchema, newNode);
}
else if (!widgetLibrary.hasWidget(newNode.type)) {
var oldWidgetType = newNode.type;
newNode.type = json_schema_functions_1.getInputType(itemSchema, newNode);
console.error('error: widget type "' + oldWidgetType +
'" not found in library. Replacing with "' + newNode.type + '".');
}
else {
newNode.type = json_schema_functions_1.checkInlineType(newNode.type, itemSchema, newNode);
}
newNode.dataType = itemSchema.type;
json_schema_functions_1.updateInputOptions(newNode, itemSchema, jsf);
if (newNode.type === 'checkboxes' && utility_functions_1.hasOwn(itemSchema, 'items')) {
json_schema_functions_1.updateInputOptions(newNode, itemSchema.items, jsf);
}
else if (itemSchema.type === 'array' && utility_functions_1.hasOwn(itemSchema, 'items')) {
if (validator_functions_1.isArray(itemSchema.items)) {
newNode.tupleItems = itemSchema.items.length;
if (utility_functions_1.hasOwn(itemSchema, 'additionalItems')) {
newNode.listItems = utility_functions_1.hasOwn(itemSchema, 'maxItems') ?
itemSchema.maxItems - itemSchema.items.length : true;
}
else {
newNode.listItems = false;
}
}
else {
newNode.tupleItems = false;
newNode.listItems = itemSchema.maxItems || true;
}
}
if (!newNode.options.title && newNode.options.legend) {
newNode.options.title = newNode.options.legend;
}
else if (!newNode.options.title) {
newNode.options.title = utility_functions_1.toTitleCase(newNode.name.replace(/_/g, ' '));
}
if (json_schema_functions_1.isInputRequired(jsf.schema, newNode.dataPointer)) {
newNode.options.required = true;
jsf.fieldsRequired = true;
}
}
else {
json_schema_functions_1.updateInputOptions(newNode, {}, jsf);
}
newNode.widget = widgetLibrary.getWidget(newNode.type);
jsf.dataMap.get(newNode.dataPointer).set('inputType', newNode.type);
jsf.dataMap.get(newNode.dataPointer).set('widget', newNode.widget);
if (newNode.dataType === 'array' && utility_functions_1.hasOwn(newNode, 'items')) {
if (newNode.options.required && !newNode.minItems)
newNode.minItems = 1;
var arrayPointer = newNode.dataPointer + '/-';
if (!jsf.dataMap.has(arrayPointer)) {
jsf.dataMap.set(arrayPointer, new Map);
}
jsf.dataMap.get(arrayPointer).set('inputType', 'section');
if (newNode.items.length > 1) {
var arrayItemGroup = [];
var arrayItemGroupTemplate = [];
var newIndex = 0;
for (var i = newNode.items.length - 1, l = 0; i >= l; i--) {
var subItem = newNode.items[i];
if (utility_functions_1.hasOwn(subItem, 'dataPointer') &&
subItem.dataPointer.slice(0, arrayPointer.length) === arrayPointer) {
var arrayItem = newNode.items.splice(i, 1)[0];
var arrayItemTemplate = mapLayout([arrayItem], function (templateItem) {
templateItem.layoutPointer = templateItem.layoutPointer
.replace(newNode.layoutPointer, newNode.layoutPointer + '/items/-');
return templateItem;
})[0];
arrayItemGroupTemplate.unshift(arrayItemTemplate);
arrayItem.dataPointer = newNode.dataPointer + '/-' +
arrayItem.dataPointer.slice(arrayPointer.length);
arrayItem.layoutPointer = newNode.layoutPointer + '/items/-/items/-';
arrayItemGroup.unshift(arrayItem);
newIndex++;
}
else {
subItem.arrayItem = true;
subItem.arrayItemType = 'list';
subItem.removable = newNode.options.removable || !newNode.options.minItems;
}
}
if (arrayItemGroup.length) {
newNode.items.push({
arrayItem: true,
items: arrayItemGroup,
layoutPointer: newNode.layoutPointer + '/items/-',
options: {
arrayItemType: newNode.tupleItems > newNode.items.length ?
'tuple' : 'list',
removable: newNode.options.removable !== false &&
(newNode.options.minItems || 0) <= newNode.items.length,
},
dataPointer: newNode.dataPointer + '/-',
type: 'fieldset',
widget: widgetLibrary.getWidget('fieldset'),
});
}
}
else {
newNode.items[0].arrayItem = true;
if (!newNode.items[0].dataPointer) {
newNode.items[0].dataPointer =
jsonpointer_functions_1.JsonPointer.toGenericPointer(arrayPointer, jsf.arrayMap);
}
if (newNode.options.minItems) {
newNode.items[0].options.removable = false;
}
else if (!jsonpointer_functions_1.JsonPointer.has(newNode, '/items/0/options/removable')) {
newNode.items[0].options.removable = true;
}
newNode.items[0].options.arrayItemType =
newNode.tupleItems ? 'tuple' : 'list';
}
if (newNode.options.addable !== false) {
jsf.layoutRefLibrary['#' + arrayPointer] =
_.cloneDeep(newNode.items[newNode.items.length - 1]);
var initialNodeData = jsonpointer_functions_1.JsonPointer.get(jsf.initialValues, newNode.dataPointer);
if (validator_functions_1.isArray(initialNodeData) &&
initialNodeData.length > newNode.items.length) {
for (var i = newNode.items.length, l = initialNodeData.length; i < l; i++) {
newNode.items
.push(_.cloneDeep(jsf.layoutRefLibrary['#' + arrayPointer]));
}
}
var buttonText = 'Add';
if (newNode.options.title) {
buttonText += ' ' + newNode.options.title;
}
else if (newNode.name) {
buttonText += ' ' + utility_functions_1.toTitleCase(newNode.name.replace(/_/g, ' '));
}
else {
var parentSchema = json_schema_functions_1.getFromSchema(jsf.schema, newNode.dataPointer, true);
if (utility_functions_1.hasOwn(parentSchema, 'title')) {
buttonText += ' to ' + parentSchema.title;
}
}
var dataPointer = jsonpointer_functions_1.JsonPointer.toGenericPointer(arrayPointer, jsf.arrayMap);
var newNodeRef = {
arrayItem: true,
dataPointer: dataPointer,
layoutPointer: newNode.layoutPointer + '/items/-',
listItems: newNode.listItems,
options: {
arrayItemType: 'list',
removable: !!newNode.options.removable,
title: buttonText,
},
tupleItems: newNode.tupleItems,
type: '$ref',
widget: widgetLibrary.getWidget('$ref'),
$ref: '#' + dataPointer,
};
if (validator_functions_1.isDefined(newNode.options.maxItems)) {
newNodeRef.options.maxItems = newNode.options.maxItems;
}
if (validator_functions_1.isString(jsonpointer_functions_1.JsonPointer.get(newNode, '/style/add'))) {
newNodeRef.options.fieldStyle = newNode.style.add;
delete newNode.style.add;
if (validator_functions_1.isEmpty(newNode.style))
delete newNode.style;
}
newNode.items.push(newNodeRef);
}
}
else {
newNode.arrayItem = false;
}
}
else if (utility_functions_1.hasOwn(newNode, 'type')) {
newNode.arrayItem = false;
newNode.widget = widgetLibrary.getWidget(newNode.type);
json_schema_functions_1.updateInputOptions(newNode, {}, jsf);
}
if (newNode.type === 'submit')
hasSubmitButton = true;
return newNode;
});
if (!hasSubmitButton) {
formLayout.push({
options: {
title: 'Submit',
},
type: 'submit',
widget: widgetLibrary.getWidget('submit'),
});
}
return formLayout;
}
exports.buildLayout = buildLayout;
function buildLayoutFromSchema(jsf, widgetLibrary, layoutPointer, schemaPointer, dataPointer, arrayItem, arrayItemType, removable, forRefLibrary) {
if (layoutPointer === void 0) { layoutPointer = ''; }
if (schemaPointer === void 0) { schemaPointer = ''; }
if (dataPointer === void 0) { dataPointer = ''; }
if (arrayItem === void 0) { arrayItem = false; }
if (arrayItemType === void 0) { arrayItemType = null; }
if (removable === void 0) { removable = null; }
if (forRefLibrary === void 0) { forRefLibrary = false; }
var schema = jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer);
if (!utility_functions_1.hasOwn(schema, 'type') && !utility_functions_1.hasOwn(schema, 'x-schema-form') &&
!utility_functions_1.hasOwn(schema, '$ref'))
return null;
var newNodeType = json_schema_functions_1.getInputType(schema);
var newNode = {
_id: _.uniqueId(),
arrayItem: arrayItem,
dataPointer: jsonpointer_functions_1.JsonPointer.toGenericPointer(dataPointer, jsf.arrayMap),
dataType: schema.type || (utility_functions_1.hasOwn(schema, '$ref') ? '$ref' : null),
layoutPointer: layoutPointer.replace(/\/\d+/g, '/-') || '/-',
options: {},
type: newNodeType,
widget: widgetLibrary.getWidget(newNodeType),
};
var lastDataKey = jsonpointer_functions_1.JsonPointer.toKey(newNode.dataPointer);
if (lastDataKey !== '-')
newNode.name = lastDataKey;
if (newNode.arrayItem) {
newNode.options.arrayItemType = arrayItemType;
newNode.options.removable = removable;
}
if (dataPointer !== '') {
if (!jsf.dataMap.has(newNode.dataPointer)) {
jsf.dataMap.set(newNode.dataPointer, new Map);
}
jsf.dataMap.get(newNode.dataPointer).set('schemaPointer', schemaPointer);
jsf.dataMap.get(newNode.dataPointer).set('inputType', newNode.type);
jsf.dataMap.get(newNode.dataPointer).set('widget', newNode.widget);
}
json_schema_functions_1.updateInputOptions(newNode, schema, jsf);
if (!newNode.options.title && newNode.options.legend) {
newNode.options.title = newNode.options.legend;
}
else if (!newNode.options.title && newNode.name) {
newNode.options.title = utility_functions_1.toTitleCase(newNode.name.replace(/_/g, ' '));
}
if (newNode.dataType === 'object') {
var newFieldset = [];
var newKeys = [];
if (validator_functions_1.isObject(schema.properties)) {
newKeys = validator_functions_1.isArray(schema.properties['ui:order']) ?
schema['properties']['ui:order'] : Object.keys(schema['properties']);
}
else if (utility_functions_1.hasOwn(schema, 'additionalProperties')) {
return null;
}
for (var _i = 0, newKeys_1 = newKeys; _i < newKeys_1.length; _i++) {
var key = newKeys_1[_i];
if (utility_functions_1.hasOwn(schema.properties, key)) {
var newLayoutPointer = void 0;
if (newNode.layoutPointer === '' && !forRefLibrary) {
newLayoutPointer = '/-';
}
else {
newLayoutPointer = newNode.layoutPointer + '/items/-';
}
var innerItem = buildLayoutFromSchema(jsf, widgetLibrary, newLayoutPointer, schemaPointer + '/properties/' + key, dataPointer + '/' + key, false, null, null, forRefLibrary);
if (innerItem) {
if (json_schema_functions_1.isInputRequired(schema, '/' + key)) {
innerItem.options.required = true;
jsf.fieldsRequired = true;
}
newFieldset.push(innerItem);
}
}
}
newNode.items = newFieldset;
}
else if (newNode.dataType === 'array') {
newNode.items = [];
var templateArray = [];
if (!forRefLibrary) {
var templateControl = form_group_functions_1.getControl(jsf.formGroupTemplate, dataPointer);
if (utility_functions_1.hasOwn(templateControl, 'controls')) {
templateArray = templateControl['controls'];
}
}
if (!newNode.minItems && json_schema_functions_1.isInputRequired(jsf.schema, schemaPointer)) {
newNode.minItems = 1;
}
var minItems_1 = newNode.minItems || 0;
var maxItems = newNode.maxItems || 1000000;
if (validator_functions_1.isDefined(newNode.options.removable)) {
removable = newNode.options.removable;
}
else if (!validator_functions_1.isDefined(removable)) {
removable = true;
}
var additionalItems = null;
if (validator_functions_1.isArray(schema.items)) {
newNode.tupleItems = schema.items.length;
if (utility_functions_1.hasOwn(schema, 'additionalItems')) {
newNode.listItems = utility_functions_1.hasOwn(schema, 'maxItems') ?
schema.maxItems - schema.items.length : true;
}
else {
newNode.listItems = false;
}
newNode.items = _.filter(_.map(schema.items, function (item, i) {
return buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer + '/items/-', schemaPointer + '/items/' + i, dataPointer + '/' + i, true, 'tuple', removable && i >= minItems_1, forRefLibrary);
}));
if (newNode.items.length < maxItems &&
utility_functions_1.hasOwn(schema, 'additionalItems') && validator_functions_1.isObject(schema.additionalItems)) {
if (newNode.items.length < templateArray.length) {
for (var i = newNode.items.length, l = templateArray.length; i < l; i++) {
newNode.items.push(buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer + '/items/-', schemaPointer + '/additionalItems', dataPointer + '/' + i, true, 'list', removable && i >= minItems_1, forRefLibrary));
}
}
else if (newNode.items.length > templateArray.length) {
for (var i = templateArray.length, l = newNode.items.length; i < l; i++) {
templateArray.push(form_group_functions_1.buildFormGroupTemplate(jsf, null, false, schemaPointer + '/additionalItems', dataPointer + '/' + i, jsonpointer_functions_1.JsonPointer.toControlPointer(jsf.formGroupTemplate, dataPointer + '/' + i)));
}
}
if (newNode.items.length < maxItems && newNode.options.addable !== false &&
jsonpointer_functions_1.JsonPointer.get(newNode.items[newNode.items.length - 1], '/type') !== '$ref') {
additionalItems = buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer + '/items/-', schemaPointer + '/additionalItems', dataPointer + '/-', true, 'list', removable, forRefLibrary);
}
}
}
else {
newNode.tupleItems = false;
newNode.listItems = schema.maxItems || true;
for (var i = 0, l = Math.max(templateArray.length, minItems_1, 1); i < l; i++) {
newNode.items.push(buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer + '/items/-', schemaPointer + '/items', dataPointer + '/' + i, true, 'list', removable && i >= minItems_1, forRefLibrary));
}
if (newNode.items.length < maxItems && newNode.options.addable !== false &&
jsonpointer_functions_1.JsonPointer.get(newNode.items[newNode.items.length - 1], '/type') !== '$ref') {
additionalItems = buildLayoutFromSchema(jsf, widgetLibrary, newNode.layoutPointer + '/items/-', schemaPointer + '/items', dataPointer + '/-', true, 'list', removable, forRefLibrary);
}
}
if (additionalItems) {
jsf.layoutRefLibrary['#' + dataPointer + '/-'] = additionalItems;
delete jsf.layoutRefLibrary['#' + dataPointer + '/-']['key'];
delete jsf.layoutRefLibrary['#' + dataPointer + '/-']['name'];
var buttonText = 'Add ';
if (additionalItems.options.title) {
buttonText += additionalItems.options.title;
}
else if (schema.title) {
buttonText += 'to ' + schema.title;
}
else {
buttonText += 'to ' +
utility_functions_1.toTitleCase(jsonpointer_functions_1.JsonPointer.toKey(dataPointer).replace(/_/g, ' '));
}
var newNodeRef = {
arrayItem: true,
dataPointer: dataPointer + '/-',
layoutPointer: newNode.layoutPointer + '/items/-',
listItems: newNode.listItems,
options: {
arrayItemType: 'list',
removable: false,
title: buttonText,
},
tupleItems: newNode.tupleItems,
type: '$ref',
widget: widgetLibrary.getWidget('$ref'),
$ref: '#' + dataPointer + '/-',
};
if (validator_functions_1.isDefined(newNode.options.maxItems)) {
newNodeRef.options.maxItems = newNode.options.maxItems;
}
newNode.items.push(newNodeRef);
}
else if (jsonpointer_functions_1.JsonPointer.get(newNode.items[newNode.items.length - 1], '/type') === '$ref') {
Object.assign(newNode.items[newNode.items.length - 1], {
listItems: newNode.listItems,
tupleItems: newNode.tupleItems,
});
if (validator_functions_1.isNumber(jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems)) {
newNode.items[newNode.items.length - 1].options.maxItems =
jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems;
}
}
}
else if (newNode.dataType === '$ref') {
var buttonText = 'Add';
if (newNode.options.title) {
buttonText += ' ' + newNode.options.title;
}
else if (newNode.name) {
buttonText += ' ' + utility_functions_1.toTitleCase(newNode.name.replace(/_/g, ' '));
}
else if (utility_functions_1.hasOwn(jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1), 'title')) {
buttonText += ' to ' +
jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1).title;
}
Object.assign(newNode, {
circularReference: true,
widget: widgetLibrary.getWidget('$ref'),
$ref: schema.$ref,
});
Object.assign(newNode.options, {
removable: false,
title: buttonText,
});
if (validator_functions_1.isNumber(jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems)) {
newNode.options.maxItems =
jsonpointer_functions_1.JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems;
}
if (!forRefLibrary) {
var schemaRef = jsonpointer_functions_1.JsonPointer.compile(schema.$ref);
if (jsonpointer_functions_1.JsonPointer.isSubPointer(schemaRef, newNode.dataPointer)) {
jsf.dataCircularRefMap.set(newNode.dataPointer, schemaRef);
}
else {
jsf.dataCircularRefMap.set(schema.$ref, newNode.dataPointer);
}
}
else if (jsf.dataCircularRefMap.has(schema.$ref) &&
!jsf.dataCircularRefMap.has(jsf.dataCircularRefMap.get(schema.$ref))) {
if (newNode.dataPointer === jsf.dataCircularRefMap
.get(schema.$ref).slice(-newNode.dataPointer.length)) {
jsf.dataCircularRefMap.set(jsf.dataCircularRefMap.get(schema.$ref), jsf.dataCircularRefMap.get(schema.$ref).slice(0, -newNode.dataPointer.length));
}
else {
jsf.dataCircularRefMap.set(jsf.dataCircularRefMap.get(schema.ref) + newNode.dataPointer, jsf.dataCircularRefMap.get(schema.$ref));
}
}
if (!utility_functions_1.hasOwn(jsf.layoutRefLibrary, schema.$ref)) {
jsf.layoutRefLibrary[schema.$ref] = null;
jsf.layoutRefLibrary[schema.$ref] = buildLayoutFromSchema(jsf, widgetLibrary, '', jsonpointer_functions_1.JsonPointer.compile(schema.$ref), '', newNode.arrayItem, newNode.arrayItemType, true, true);
}
}
return newNode;
}
exports.buildLayoutFromSchema = buildLayoutFromSchema;
function mapLayout(layout, fn, layoutPointer, rootLayout) {
if (layoutPointer === void 0) { layoutPointer = ''; }
if (rootLayout === void 0) { rootLayout = layout; }
var indexPad = 0;
var newLayout = [];
utility_functions_1.forEach(layout, function (item, index) {
var realIndex = +index + indexPad;
var newLayoutPointer = layoutPointer + '/' + realIndex;
var newNode = utility_functions_1.copy(item);
var itemsArray = [];
if (validator_functions_1.isObject(item)) {
if (utility_functions_1.hasOwn(item, 'items')) {
itemsArray = validator_functions_1.isArray(item.items) ? item.items : [item.items];
}
else if (utility_functions_1.hasOwn(item, 'tabs')) {
itemsArray = validator_functions_1.isArray(item.tabs) ? item.tabs : [item.tabs];
}
}
if (itemsArray.length) {
newNode.items = mapLayout(itemsArray, fn, newLayoutPointer + '/items', rootLayout);
}
newNode = fn(newNode, realIndex, newLayoutPointer, rootLayout);
if (!validator_functions_1.isDefined(newNode)) {
indexPad--;
}
else {
if (validator_functions_1.isArray(newNode))
indexPad += newNode.length - 1;
newLayout = newLayout.concat(newNode);
}
});
return newLayout;
}
exports.mapLayout = mapLayout;
;
function buildTitleMap(titleMap, enumList, fieldRequired) {
if (fieldRequired === void 0) { fieldRequired = true; }
var newTitleMap = [];
var hasEmptyValue = false;
if (titleMap) {
if (validator_functions_1.isArray(titleMap)) {
if (enumList) {
for (var _i = 0, _a = Object.keys(titleMap); _i < _a.length; _i++) {
var i = _a[_i];
if (validator_functions_1.isObject(titleMap[i])) {
var value = titleMap[i].value;
if (enumList.indexOf(value) !== -1) {
var name_1 = titleMap[i].name;
newTitleMap.push({ name: name_1, value: value });
if (!value)
hasEmptyValue = true;
}
}
else if (validator_functions_1.isString(titleMap[i])) {
if (i < enumList.length) {
var name_2 = titleMap[i];
var value = enumList[i];
newTitleMap.push({ name: name_2, value: value });
if (!value)
hasEmptyValue = true;
}
}
}
}
else {
newTitleMap = titleMap;
if (!fieldRequired)
hasEmptyValue = !!newTitleMap.filter(function (i) { return !i.value; }).length;
}
}
else if (enumList) {
for (var _b = 0, _c = Object.keys(enumList); _b < _c.length; _b++) {
var i = _c[_b];
var value = enumList[i];
if (utility_functions_1.hasOwn(titleMap, value)) {
var name_3 = titleMap[value];
newTitleMap.push({ name: name_3, value: value });
if (!value)
hasEmptyValue = true;
}
}
}
else {
for (var _d = 0, _e = Object.keys(titleMap); _d < _e.length; _d++) {
var value = _e[_d];
var name_4 = titleMap[value];
newTitleMap.push({ name: name_4, value: value });
if (!value)
hasEmptyValue = true;
}
}
}
else if (enumList) {
for (var _f = 0, _g = Object.keys(enumList); _f < _g.length; _f++) {
var i = _g[_f];
var name_5 = enumList[i];
var value = enumList[i];
newTitleMap.push({ name: name_5, value: value });
if (!value)
hasEmptyValue = true;
}
}
else {
newTitleMap = [{ name: 'True', value: true }, { name: 'False', value: false }];
}
if (!fieldRequired && !hasEmptyValue) {
newTitleMap.unshift({ name: '', value: '' });
}
return newTitleMap;
}
exports.buildTitleMap = buildTitleMap;
//# sourceMappingURL=layout.functions.js.map