zent
Version:
一套前端设计语言和基于React的实现
41 lines (40 loc) • 1.49 kB
JavaScript
import _union from '../../utils/union';
export default function correctMark(markList, rootInfoMap, disabled, isInit) {
if (markList === void 0) { markList = []; }
if (disabled === void 0) { disabled = []; }
var nextMarkList = [];
var markMap = {};
markList.forEach(function (rootId) {
if (!rootInfoMap[rootId]) {
return;
}
var rootIncludes = isInit
? rootInfoMap[rootId].rootIncludeIds
: rootInfoMap[rootId].rootIncludeIds.filter(function (id) {
return disabled.indexOf(id) === -1;
});
nextMarkList.push.apply(nextMarkList, rootIncludes);
markMap[rootId] = true;
});
markList.forEach(function (item) {
if (!rootInfoMap[item]) {
return;
}
var markParentId = rootInfoMap[item].parentId;
while (markParentId) {
if (markMap[markParentId]) {
markParentId = undefined;
}
else {
if (rootInfoMap[markParentId].son.every(function (id) { return markMap[id] || disabled.indexOf(id) > -1; })) {
markMap[markParentId] = true;
markParentId = rootInfoMap[markParentId].parentId;
}
else {
markParentId = undefined;
}
}
}
});
return _union(Object.keys(markMap).map(function (id) { return rootInfoMap[id].id; }), nextMarkList);
}