UNPKG

react-jsonschema-form-pagination

Version:

Extension of react-jsonschema-form with support for multi-nav forms

87 lines (74 loc) 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findRelTree = findRelTree; exports.orderFields = orderFields; exports.extractTree = extractTree; var _utils = require("../utils"); function findRelTree(tree, navs) { return navs.reduce(function (pos, nav) { if (pos[nav] === undefined) { pos[nav] = {}; } return pos[nav]; }, tree); } function pushField(tree, field, uiAlias) { if (tree[_utils.GENERIC_NAV] === undefined) { tree[_utils.GENERIC_NAV] = { fields: [], aliases: {} }; } tree[_utils.GENERIC_NAV].fields.push(field); if (uiAlias) { tree[_utils.GENERIC_NAV].aliases[field] = uiAlias; } } function fillSchemaConf(tree, schema, uiSchema) { var prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; Object.keys(schema.properties).forEach(function (field) { var fieldSchema = schema.properties[field]; var fieldUiSchema = uiSchema[field]; if (fieldSchema.type === "object" && fieldUiSchema) { fillSchemaConf(tree, fieldSchema, fieldUiSchema, field + "."); } else { var navs = (0, _utils.findFieldNavs)(field, uiSchema); var subTree = findRelTree(tree, navs); pushField(subTree, prefix ? prefix + field : field); } }, {}); } function fillAliasesConf(tree, uiSchema) { var aliases = (0, _utils.getNavAliases)(uiSchema); Object.keys(aliases).forEach(function (field) { var fieldAlias = (0, _utils.toArray)(aliases[field]); fieldAlias.forEach(function (alias) { var navs = (0, _utils.findFieldNavs)(alias, uiSchema); var subTree = findRelTree(tree, navs); pushField(subTree, field, alias); }); }); } function orderFields(tree, fieldsOrder) { Object.keys(tree).forEach(function (nav) { if (nav === _utils.GENERIC_NAV) { var fields = tree[nav].fields; fields.sort(function (a, b) { return fieldsOrder.indexOf(a) - fieldsOrder.indexOf(b); }); } else { orderFields(tree[nav], fieldsOrder); } }); } function extractTree(schema, uiSchema) { var tree = {}; fillSchemaConf(tree, schema, uiSchema); fillAliasesConf(tree, uiSchema); // Calculate field order, either with UI_ORDER or with natural order var fieldsOrder = uiSchema[_utils.UI_ORDER] ? uiSchema[_utils.UI_ORDER] : Object.keys(schema.properties); orderFields(tree, fieldsOrder); return tree; }