UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

170 lines (143 loc) 4.35 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = normalizeOptions; exports.expandTreeRecords = expandTreeRecords; var _DataSet = _interopRequireDefault(require("../data-set/DataSet")); var _enum = require("../data-set/enum"); /** * transform tree to stack */ function _transformStack(tree, parentValue, parentField) { var stack = []; if (Array.isArray(tree)) { // array tree tree.forEach(function (node) { node[parentField] = parentValue; stack.push({ value: node }); }); } else if (tree instanceof Object) { // object tree Object.keys(tree).forEach(function (key) { if (Object.prototype.hasOwnProperty.call(tree, key)) { var node = tree[key]; node[parentField] = parentValue; stack.push({ key: key, value: node }); } }); } return stack; } function treeToList(tree) { var valueField = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value'; var parentField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "parentValue"; var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'children'; var list = []; if (Array.isArray(tree)) { // array tree list = []; } else if (tree instanceof Object) { // object tree list = {}; } else { // @ts-ignore return list; } var parentValue; var stack = _transformStack(tree, parentValue, parentField); var _loop = function _loop() { var curStack = stack.shift(); var nodeKey = curStack.key, node = curStack.value; if (!node) return "continue"; // invalid node var item = (nodeKey ? list[nodeKey] : {}) || {}; Object.keys(node).forEach(function (prop) { if (Object.prototype.hasOwnProperty.call(node, prop) && prop !== key) { item[prop] = node[prop]; } }); if (nodeKey) { // object list[nodeKey] = item; } else { // array list.push(item); } var subTree = node[key] || []; parentValue = node[valueField]; stack = _transformStack(subTree, parentValue, parentField).concat(stack); }; while (stack.length) { var _ret = _loop(); if (_ret === "continue") continue; } return list; } function normalizeOptions(_ref) { var data = _ref.data, textField = _ref.textField, valueField = _ref.valueField, disabledField = _ref.disabledField, multiple = _ref.multiple, parentField = _ref.parentField, idField = _ref.idField; var fields = [{ name: textField, type: _enum.FieldType.reactNode }, { name: valueField }, { name: disabledField, type: _enum.FieldType["boolean"] }]; var treeNormalData = treeToList(data, valueField, parentField); return new _DataSet["default"]({ data: treeNormalData, fields: fields, paging: false, idField: idField, selection: multiple ? _enum.DataSetSelection.multiple : _enum.DataSetSelection.single, autoLocateFirst: false, parentField: parentField }); } function expandTreeRecords(records) { var isAllleaf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var mapRecords = new Map(); var expandRecords = []; var TreeToArray = function TreeToArray(PRecords) { PRecords.forEach(function (record) { if (record.children && record.children.length > 0) { TreeToArray(record.children); } else if (!mapRecords.has(record.id)) { mapRecords.set(record.id, record); } }); }; var parentRecords = records.filter(function (item) { return !!item.children; }); // 先优先获取根节点再对子节点进行拆分 records.filter(function (item) { return !item.children; }).forEach(function (record) { if (!mapRecords.has(record.id)) { mapRecords.set(record.id, record); } }); TreeToArray(parentRecords); // Map去重 mapRecords.forEach(function (record) { expandRecords.push(record); }); // 如果不全为子集的设置加上父亲节点 if (!isAllleaf) { return parentRecords.concat(expandRecords); } return expandRecords; } //# sourceMappingURL=utils.js.map