UNPKG

tntd

Version:

tntd是基于 TNT Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。

419 lines (418 loc) 16.5 kB
"use strict"; 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; };