@aliretail/react-materials-components
Version:
140 lines (113 loc) • 3.46 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.getValueDiff = exports.genRelationMap = exports.calculateStatus = void 0;
var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _interface = require("./interface");
var relationMapCache = {
dataSource: null,
relationMap: {}
};
var diffListCache = {
defaultValue: [],
curValue: [],
diffList: []
};
/**
* 遍历所有节点,构造一个存储每个节点的先祖信息的map
* @param dataSource
* @returns
*/
var genRelationMap = function genRelationMap(dataSource) {
if (dataSource === void 0) {
dataSource = [];
}
if (relationMapCache.dataSource === dataSource) {
return relationMapCache.relationMap;
}
var relationMap = {};
var initMap = function initMap(dataItem, ancestor) {
if (ancestor === void 0) {
ancestor = {};
}
relationMap[dataItem.key] = ancestor;
if (Array.isArray(dataItem.children)) {
var _extends2;
var myAncestor = (0, _extends3["default"])({}, ancestor, (_extends2 = {}, _extends2[dataItem.key] = true, _extends2));
dataItem.children.forEach(function (item) {
initMap(item, myAncestor);
});
}
};
if (Array.isArray(dataSource)) {
dataSource.forEach(function (item) {
initMap(item);
});
} // 缓存计算结果
Object.assign(relationMapCache, {
dataSource: dataSource,
relationMap: relationMap
});
return relationMap;
};
/**
*获取当前选择的值与初始值的差异
* @param defaultValue
* @param curValue
* @returns TDiffList
*/
exports.genRelationMap = genRelationMap;
var getValueDiff = function getValueDiff(defaultValue, curValue) {
if (diffListCache.defaultValue === defaultValue && diffListCache.curValue === curValue) {
return diffListCache.diffList;
}
var allValue = defaultValue.concat(curValue);
var diffList = [];
allValue.forEach(function (value) {
if (!defaultValue.includes(value)) {
diffList.push({
value: value,
status: _interface.TreeNodeStatus.add
});
} else if (!curValue.includes(value)) {
diffList.push({
value: value,
status: _interface.TreeNodeStatus["delete"]
});
}
}); // 缓存一下计算结果
Object.assign(diffListCache, {
defaultValue: defaultValue,
curValue: curValue,
diffList: diffList
});
return diffList;
};
/**
* 计算当前节点的状态
* @param diffList
* @param itemValue
* @param relationMap
* @returns number 0-没变更,1-新增,2-删除
*/
exports.getValueDiff = getValueDiff;
var calculateStatus = function calculateStatus(diffList, itemValue, relationMap) {
var status = _interface.TreeNodeStatus["default"];
diffList.some(function (diffItem) {
if (diffItem.value === itemValue) {
status = diffItem.status;
return true;
} else {
var diffItemAncestor = relationMap[diffItem.value] || {}; // 如果当前节点的后代在变更列表中,则当前节点需要展示跟后代一样的状态
if (diffItemAncestor[itemValue]) {
status = diffItem.status; // 存在多个后代在变更列表,优先展示新增
if (status === _interface.TreeNodeStatus.add) {
return true;
}
}
}
return false;
});
return status;
};
exports.calculateStatus = calculateStatus;