choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
93 lines (76 loc) • 1.79 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
function traverseNodesKey(treeData, callback) {
function processNode(dataNode) {
var key = dataNode.key,
children = dataNode.children;
if (callback(key, dataNode) !== false) {
traverseNodesKey(children || [], callback);
}
}
treeData.forEach(processNode);
}
/** 计算选中范围,只考虑expanded情况以优化性能 */
export function calcRangeKeys(treeData, expandedKeys, startKey, endKey) {
var keys = [];
var record = 0
/* None */
;
if (startKey && startKey === endKey) {
return [startKey];
}
if (!startKey || !endKey) {
return [];
}
function matchKey(key) {
return key === startKey || key === endKey;
}
traverseNodesKey(treeData, function (key) {
if (record === 2
/* End */
) {
return false;
}
if (matchKey(key)) {
// Match test
keys.push(key);
if (record === 0
/* None */
) {
record = 1
/* Start */
;
} else if (record === 1
/* Start */
) {
record = 2
/* End */
;
return false;
}
} else if (record === 1
/* Start */
) {
// Append selection
keys.push(key);
}
if (expandedKeys.indexOf(key) === -1) {
return false;
}
return true;
});
return keys;
}
export function convertDirectoryKeysToNodes(treeData, keys) {
var restKeys = _toConsumableArray(keys);
var nodes = [];
traverseNodesKey(treeData, function (key, node) {
var index = restKeys.indexOf(key);
if (index !== -1) {
nodes.push(node);
restKeys.splice(index, 1);
}
return !!restKeys.length;
});
return nodes;
}
//# sourceMappingURL=dictUtil.js.map