choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
170 lines (143 loc) • 4.35 kB
JavaScript
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
;