UNPKG

@aliretail/react-materials-components

Version:
124 lines (106 loc) 3.05 kB
import _extends from "@babel/runtime/helpers/extends"; import { TreeNodeStatus } from "./interface"; var relationMapCache = { dataSource: null, relationMap: {} }; var diffListCache = { defaultValue: [], curValue: [], diffList: [] }; /** * 遍历所有节点,构造一个存储每个节点的先祖信息的map * @param dataSource * @returns */ export 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 = _extends({}, 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 */ export 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: TreeNodeStatus.add }); } else if (!curValue.includes(value)) { diffList.push({ value: value, status: TreeNodeStatus["delete"] }); } }); // 缓存一下计算结果 Object.assign(diffListCache, { defaultValue: defaultValue, curValue: curValue, diffList: diffList }); return diffList; }; /** * 计算当前节点的状态 * @param diffList * @param itemValue * @param relationMap * @returns number 0-没变更,1-新增,2-删除 */ export var calculateStatus = function calculateStatus(diffList, itemValue, relationMap) { var status = 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 === TreeNodeStatus.add) { return true; } } } return false; }); return status; };