rsuite
Version:
A suite of react components
167 lines (135 loc) • 4.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.isEveryChildChecked = isEveryChildChecked;
exports.isSomeChildChecked = isSomeChildChecked;
exports.isSomeNodeHasChildren = isSomeNodeHasChildren;
exports.getSiblingNodeUncheckable = getSiblingNodeUncheckable;
exports.getEveryFisrtLevelNodeUncheckable = getEveryFisrtLevelNodeUncheckable;
exports.getUncheckableState = getUncheckableState;
exports.getFormattedTree = getFormattedTree;
exports.getDisabledState = getDisabledState;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = _interopRequireDefault(require("lodash"));
var _utils = require("rsuite-utils/lib/utils");
function isEveryChildChecked(node, nodes, props) {
var childrenKey = props.childrenKey;
var children = null;
if (node[childrenKey]) {
children = node[childrenKey].filter(function (child) {
return nodes[child.refKey] && !nodes[child.refKey].uncheckable;
});
if (!children.length) {
return nodes[node.refKey].check;
}
return children.every(function (child) {
if (child[childrenKey] && child[childrenKey].length) {
return isEveryChildChecked(child, nodes, props);
}
return nodes[child.refKey].check;
});
}
return nodes[node.refKey].check;
}
function isSomeChildChecked(node, nodes, props) {
var childrenKey = props.childrenKey;
if (!node[childrenKey]) {
return false;
}
return node[childrenKey].some(function (child) {
if (nodes[child.refKey] && nodes[child.refKey].check) {
return true;
}
return isSomeChildChecked(child, nodes, props);
});
}
/**
* 判断第一层节点是否存在有children的节点
* @param {*} data
*/
function isSomeNodeHasChildren(data, childrenKey) {
return data.some(function (node) {
return node[childrenKey];
});
}
/**
* 获取该节点的兄弟节点是否都为 uncheckable
* @param {*} node
*/
function getSiblingNodeUncheckable(node, nodes) {
var list = [];
var parentNodeRefkey = node.parentNode ? node.parentNode.refKey : '';
Object.keys(nodes).forEach(function (refKey) {
var curNode = nodes[refKey];
if (_lodash.default.isUndefined(node.parentNode) && _lodash.default.isUndefined(curNode.parentNode)) {
list.push(curNode);
} else if (curNode.parentNode && curNode.parentNode.refKey === parentNodeRefkey) {
list.push(curNode);
}
});
return list.every(function (node) {
return node.uncheckable;
});
}
/**
* 获取第一层节点是否全部都为 uncheckable
*/
function getEveryFisrtLevelNodeUncheckable(nodes) {
var list = [];
Object.keys(nodes).forEach(function (refKey) {
var curNode = nodes[refKey];
if (!curNode.parentNode) {
list.push(curNode);
}
});
return list.every(function (node) {
return node.uncheckable;
});
}
/**
* 获取节点的是否需要隐藏checkbox
* @param {*} node
*/
function getUncheckableState(node, props) {
var _props$uncheckableIte = props.uncheckableItemValues,
uncheckableItemValues = _props$uncheckableIte === void 0 ? [] : _props$uncheckableIte,
valueKey = props.valueKey;
return uncheckableItemValues.some(function (value) {
return (0, _utils.shallowEqual)(node[valueKey], value);
});
}
/**
* 获取格式化后的树
* @param data
* @param nodes
* @param props
*/
function getFormattedTree(data, nodes, props) {
var childrenKey = props.childrenKey;
return data.map(function (node) {
var formatted = (0, _extends2.default)({}, node);
var curNode = nodes[node.refKey];
if (curNode) {
formatted.check = curNode.check;
formatted.expand = curNode.expand;
formatted.uncheckable = curNode.uncheckable;
formatted.parentNode = curNode.parentNode;
if (Array.isArray(node[childrenKey]) && node[childrenKey].length > 0) {
formatted[childrenKey] = getFormattedTree(formatted[childrenKey], nodes, props);
}
}
return formatted;
});
}
/**
* 获取每个节点的disable状态
* @param {*} node
*/
function getDisabledState(nodes, node, props) {
var _props$disabledItemVa = props.disabledItemValues,
disabledItemValues = _props$disabledItemVa === void 0 ? [] : _props$disabledItemVa,
valueKey = props.valueKey;
return disabledItemValues.some(function (value) {
return (0, _utils.shallowEqual)(nodes[node.refKey][valueKey], value);
});
}