tntd
Version:
tntd是基于 TNT Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。
419 lines (418 loc) • 16.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getNodeValuess = exports.getNodeStr = exports.getNodeParentChoosed = exports.getNodeNoDisabledLastestChildrenValues = exports.getNodeNoDisabledChildrenValues = exports.getIndeterminate = exports.getFullExpandedKeys = exports.getFullCheckedKeys = exports.flatTreeData = exports.findNodeDetail = exports.addTreeNodeAttrs = void 0;
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var _n = 0,
F = function F() {};
return {
s: F,
n: function n() {
return _n >= r.length ? {
done: !0
} : {
done: !1,
value: r[_n++]
};
},
e: function e(r) {
throw r;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o,
a = !0,
u = !1;
return {
s: function s() {
t = t.call(r);
},
n: function n() {
var r = t.next();
return a = r.done, r;
},
e: function e(r) {
u = !0, o = r;
},
f: function f() {
try {
a || null == t["return"] || t["return"]();
} finally {
if (u) throw o;
}
}
};
}
function _toConsumableArray(r) {
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return _arrayLikeToArray(r);
}
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
/**
* 初始化给树的每个节点增加以下属性字段
* childrenValues: 当前节点下的所有子节点的value和(包含了disabled节点)用户展开/收起
* titleTotal: 当前节点下的所有子节点的title和 (包含了disabled节点)用于搜索
* needCheckedChildrenValues: 当前节点下的节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中
* needCheckedLastestChildrenValues: 当前节点下的最底层节点(即无children)的value和(不包含了disabled节点),用于选中/取消选中
* needCheckedSiblingsValue: 当前节点所有上级节点的兄弟节点, [{ key: '上级节点value', list: [xx] }] list包含非disabled节点 用于选中/取消选中
* 用于判断后续展开/收起
* @param {*} treeData
*/
var _addTreeNodeAttrs = exports.addTreeNodeAttrs = function addTreeNodeAttrs(treeData) {
var fieldNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
title: 'title',
value: 'value',
children: 'children',
disabled: 'disabled'
};
var needCheckedSiblingsValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (Array.isArray(treeData) && !!treeData.length) {
return treeData.map(function (item) {
item.children = item[fieldNames['children']];
item.title = item[fieldNames['title']];
item.value = item[fieldNames['value']];
var children = item.children,
query = __rest(item, ["children"]);
if (Array.isArray(children) && !!children.length) {
var siblingsSum = needCheckedSiblingsValue;
if (!item[fieldNames['disabled']]) {
// 这里注意要逆序,要不然校验的时候会出问题
siblingsSum = [{
key: item[fieldNames['value']],
list: children.reduce(function (total, item) {
if (!item[fieldNames['disabled']]) {
total.push(item[fieldNames['value']]);
}
return total;
}, [])
}].concat(_toConsumableArray(siblingsSum));
} else {
siblingsSum = [];
}
query.children = _addTreeNodeAttrs(children, fieldNames, siblingsSum);
}
return Object.assign(Object.assign({}, query), {
title: query[fieldNames['title']],
value: query[fieldNames['value']],
disabled: query[fieldNames['disabled']],
childrenValues: _getNodeValuess(query, false),
titleTotal: _getNodeStr(query, fieldNames['title']),
needCheckedLastestChildrenValues: !item[fieldNames['disabled']] ? _getNodeNoDisabledLastestChildrenValues(item, fieldNames) : [],
needCheckedChildrenValues: !item[fieldNames['disabled']] ? _getNodeNoDisabledChildrenValues(item, fieldNames) : [],
needCheckedSiblingsValue: !item[fieldNames['disabled']] ? needCheckedSiblingsValue : []
});
});
}
return [];
};
var _getNodeStr = exports.getNodeStr = function getNodeStr(node, key) {
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
result.push(node[key]);
if (Array.isArray(node.children) && !!node.children.length) {
node.children.forEach(function (element) {
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getNodeStr(element, key)));
});
}
return result;
};
/**
* 获取每个节点下面所有子节点的value值
* @param {*} node
* @param {*} widthSelf 是否包含自己
* @param {*} result
* @returns []
*/
var _getNodeValuess = exports.getNodeValuess = function getNodeValuess(node) {
var widthSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (widthSelf) {
result.push(node.value);
}
if (Array.isArray(node.children) && !!node.children.length) {
node.children.forEach(function (element) {
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getNodeValuess(element)));
});
}
return result;
};
/**
* 扁平树
* @param {*} treeData
* @param {*} expandedKeys 展开的节点
* @param {*} treeDefaultExpandAll
* @param {*} indexLevel
* @param {*} result
* @returns
*/
var _flatTreeData = exports.flatTreeData = function flatTreeData(treeData) {
var filterKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var expandedKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var treeDefaultExpandAll = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var indexLevel = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
var result = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
if (Array.isArray(treeData)) {
var _iterator = _createForOfIteratorHelper(treeData),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var i = _step.value;
var value = i.value,
children = i.children,
titleTotal = i.titleTotal,
title = i.title,
rest = __rest(i, ["value", "children", "titleTotal", "title"]);
// 判断是否命中过滤
var bingo = true;
var transFilterKey = !['', null, undefined].includes(filterKey);
if (transFilterKey) {
bingo = Array.isArray(titleTotal) ? titleTotal.some(function (i) {
return i.includes(filterKey);
}) : false;
}
if (bingo) {
result.push(Object.assign({
indexLevel: indexLevel
}, i));
}
var selfIn = Array.isArray(expandedKeys) ? expandedKeys.includes(value) : false;
// 如果有过滤字段,需要保证当前结点以及其子结点都在expandedKeys中
if ((treeDefaultExpandAll || selfIn || transFilterKey && bingo && selfIn) && Array.isArray(children) && !!children.length) {
result = [].concat(_toConsumableArray(result), _toConsumableArray(_flatTreeData(children, filterKey, expandedKeys, treeDefaultExpandAll, indexLevel + 1)));
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
return result;
};
/**
* 获取所有展开的节点 (组件传入最后一层,需要将其上层全部加入到expandedKeys)
* @param {*} treeDataWithKeys
* @param {*} treeExpandedKeys
* @param {*} result
* @returns
*/
var _getFullExpandedKeys = exports.getFullExpandedKeys = function getFullExpandedKeys(treeDataWithKeys) {
var treeExpandedKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var treeDefaultExpandAll = arguments.length > 2 ? arguments[2] : undefined;
var result = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
if (!treeDefaultExpandAll && (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(treeExpandedKeys) || !treeExpandedKeys.length)) {
return [];
}
treeDataWithKeys.forEach(function (i) {
var childrenValues = i.childrenValues,
value = i.value,
children = i.children;
if (treeDefaultExpandAll || Array.isArray(childrenValues) && [].concat(_toConsumableArray(childrenValues), [value]).some(function (el) {
return treeExpandedKeys.includes(el);
})) {
result.push(value);
if (Array.isArray(children) && !!children.length) {
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getFullExpandedKeys(children, treeExpandedKeys, treeDefaultExpandAll)));
}
}
});
return result;
};
/**
* 初始化根据用户传入的值获取其关联节点是否要在checkList
* @param {*} treeDataWithKeys
* @param {*} transCheckedKeys
* @param {*} result
* @returns
*/
var _getFullCheckedKeys = exports.getFullCheckedKeys = function getFullCheckedKeys(treeDataWithKeys, transCheckedKeys) {
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (!Array.isArray(treeDataWithKeys) || !treeDataWithKeys.length || !Array.isArray(transCheckedKeys) || !transCheckedKeys.length) {
return [];
}
treeDataWithKeys.forEach(function (i) {
var value = i.value,
children = i.children,
disabled = i.disabled;
var bingo = transCheckedKeys.includes(value);
if (bingo) {
result.push(value);
}
if (Array.isArray(children) && !!children.length) {
var lastestUnDisabledChildrenValues = i.needCheckedLastestChildrenValues;
// 如果当前节点是被命中,就将其下面所有子节点都选中
if (Array.isArray(lastestUnDisabledChildrenValues) && !!lastestUnDisabledChildrenValues.length && lastestUnDisabledChildrenValues.every(function (el) {
return transCheckedKeys.includes(el);
})) {
result.push(value);
}
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getFullCheckedKeys(children, transCheckedKeys)));
}
});
return result;
};
/**
* 递归获取某个节点所有最下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了
* @param {*} node
* @param {*} node
* @returns
*/
var _getNodeNoDisabledLastestChildrenValues = exports.getNodeNoDisabledLastestChildrenValues = function getNodeNoDisabledLastestChildrenValues(node, fieldNames) {
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (Array.isArray(node.children) && !!node.children.length) {
node.children.forEach(function (element) {
if (!element[fieldNames['disabled']]) {
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getNodeNoDisabledLastestChildrenValues(element, fieldNames)));
}
});
} else {
if (!node[fieldNames['disabled']]) {
result.push(node[fieldNames['value']]);
}
}
return result;
};
/**
* 递归获取某个节点所有下层(没有children)的values集合,递归遇到disable的节点就不继续往下递归了
* @param {*} node
* @param {*} node
* @returns
*/
var _getNodeNoDisabledChildrenValues = exports.getNodeNoDisabledChildrenValues = function getNodeNoDisabledChildrenValues(node, fieldNames) {
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (Array.isArray(node.children) && !!node.children.length) {
node.children.forEach(function (element) {
if (!element[fieldNames['disabled']]) {
result.push(element[fieldNames['value']]);
result = [].concat(_toConsumableArray(result), _toConsumableArray(_getNodeNoDisabledChildrenValues(element, fieldNames)));
}
});
} else {
if (!node[fieldNames['disabled']]) {
result.push(node[fieldNames['value']]);
}
}
return result;
};
/**
* 判断当前节点是否半选
* @param {*} item
* @param {*} checkedList
*/
var getIndeterminate = exports.getIndeterminate = function getIndeterminate(item, checkedList, disabledList) {
// 如果没有子节点,就没有半选情况
if (!Array.isArray(item.children) || !item.children.length) {
return false;
}
if (!Array.isArray(checkedList) || !checkedList.length) {
return false;
}
// 当前节点下的去掉disabled的所有末级节点
var list = Array.isArray(item.needCheckedLastestChildrenValues) ? item.needCheckedLastestChildrenValues : [];
var childrenCheckedList = list.filter(function (i) {
return checkedList === null || checkedList === void 0 ? void 0 : checkedList.includes(i);
});
return childrenCheckedList.length > 0 && childrenCheckedList.length < list.length;
};
/**
* 获取当前节点的父亲节点是否需要被选中
* @param {*} needCheckedSiblingsValue
* @param {*} checkedList
* @returns
*/
var getNodeParentChoosed = exports.getNodeParentChoosed = function getNodeParentChoosed(needCheckedSiblingsValue, checkedList) {
if (!Array.isArray(checkedList) || !checkedList.length) {
return [];
}
var result = [];
var _iterator2 = _createForOfIteratorHelper(needCheckedSiblingsValue),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var item = _step2.value;
var _ref = item || {},
key = _ref.key,
list = _ref.list;
// 过滤掉子节点为disabled的
var bool = Array.isArray(list) ? list.every(function (it) {
return checkedList.includes(it);
}) : false;
if (bool) {
checkedList.push(key);
result.push(key);
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
return result;
};
/**
* 获取节点的信息
* @param {*} tree
* @param {*} key
* @param {*} result
* @returns
*/
var _findNodeDetail = exports.findNodeDetail = function findNodeDetail(tree, key, result) {
if (Array.isArray(tree) && !!key) {
var _iterator3 = _createForOfIteratorHelper(tree),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var i = _step3.value;
if (i.value === key) {
result = i;
break;
}
if (Array.isArray(i.children) && !!i.children.length) {
result = _findNodeDetail(i.children, key);
if (result) {
break;
}
}
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
}
return result;
};