UNPKG

rsuite

Version:

A suite of react components

196 lines (169 loc) 5.92 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _isUndefined from "lodash/isUndefined"; import _isNil from "lodash/isNil"; import { CHECK_STATE } from '../utils'; import { getChildrenByFlattenNodes, getNodeFormattedRefKey } from '../utils/treeUtils'; import { attachParent } from '../utils/attachParent'; export function isEveryChildChecked(nodes, parent) { if (_isNil(parent.refKey) || _isNil(nodes[parent.refKey])) { return false; } var children = getChildrenByFlattenNodes(nodes, parent); if (!children.length) { var _nodes$parent$refKey$; return (_nodes$parent$refKey$ = nodes[parent.refKey].check) !== null && _nodes$parent$refKey$ !== void 0 ? _nodes$parent$refKey$ : false; } return children.every(function (child) { return !_isNil(child.refKey) && nodes[child.refKey].check; }); } export function isSomeChildChecked(nodes, parent, childrenKey) { if (!_isNil(parent.refKey) && _isNil(nodes[parent.refKey])) { return false; } var children = getChildrenByFlattenNodes(nodes, parent); return children.some(function (child) { var _child$childrenKey; if ((child === null || child === void 0 ? void 0 : (_child$childrenKey = child[childrenKey]) === null || _child$childrenKey === void 0 ? void 0 : _child$childrenKey.length) > 0) { return isSomeChildChecked(nodes, child, childrenKey); } return !_isNil(child.refKey) && nodes[child.refKey].check; }); } export function isSomeNodeHasChildren(data, childrenKey) { return data.some(function (node) { return Array.isArray(node[childrenKey]); }); } /** * is all siblings nodes is uncheckable * @param {*} node */ export function isAllSiblingNodeUncheckable(node, nodes, uncheckableItemValues, valueKey) { var list = []; var parentNodeRefKey = node.parent ? node.parent.refKey : ''; Object.keys(nodes).forEach(function (refKey) { var _curNode$parent; var curNode = nodes[refKey]; if (_isNil(node.parent) && _isNil(curNode.parent)) { list.push(curNode); } else if (((_curNode$parent = curNode.parent) === null || _curNode$parent === void 0 ? void 0 : _curNode$parent.refKey) === parentNodeRefKey) { list.push(curNode); } }); return list.every(function (node) { return isNodeUncheckable(node, { uncheckableItemValues: uncheckableItemValues, valueKey: valueKey }); }); } /** * get each first level node uncheckable state */ export function isEveryFirstLevelNodeUncheckable(nodes, uncheckableItemValues, valueKey) { var list = []; Object.keys(nodes).forEach(function (refKey) { var curNode = nodes[refKey]; if (!curNode.parent) { list.push(curNode); } }); return list.every(function (node) { return isNodeUncheckable(node, { uncheckableItemValues: uncheckableItemValues, valueKey: valueKey }); }); } /** * get node uncheckable state * @param {*} node */ export function isNodeUncheckable(node, props) { var _props$uncheckableIte = props.uncheckableItemValues, uncheckableItemValues = _props$uncheckableIte === void 0 ? [] : _props$uncheckableIte, valueKey = props.valueKey; return uncheckableItemValues.some(function (value) { return node[valueKey] === value; }); } export function getFormattedTree(data, nodes, props) { var childrenKey = props.childrenKey, cascade = props.cascade; return data.map(function (node) { var formatted = _extends({}, node); var curNode = nodes[node.refKey]; if (curNode) { var _node$childrenKey; var checkState = !_isUndefined(cascade) ? getNodeCheckState({ node: curNode, cascade: cascade, nodes: nodes, childrenKey: childrenKey }) : undefined; formatted.check = curNode.check; formatted.expand = curNode.expand; formatted.uncheckable = curNode.uncheckable; attachParent(formatted, curNode.parent); formatted.checkState = checkState; if (((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) > 0) { formatted[childrenKey] = getFormattedTree(formatted[childrenKey], nodes, props); } } return formatted; }); } export function getDisabledState(nodes, node, props) { var _props$disabledItemVa = props.disabledItemValues, disabledItemValues = _props$disabledItemVa === void 0 ? [] : _props$disabledItemVa, valueKey = props.valueKey; if (!_isNil(node.refKey) && _isNil(nodes[node.refKey])) { return false; } return disabledItemValues.some(function (value) { return node.refKey && nodes[node.refKey][valueKey] === value; }); } export function getCheckTreePickerDefaultValue(value, uncheckableItemValues) { if (Array.isArray(value)) { return value.filter(function (v) { return !uncheckableItemValues.includes(v); }); } return []; } export function getSelectedItems(nodes, values) { var checkedItems = []; values.forEach(function (value) { var refKey = getNodeFormattedRefKey(value); var node = nodes[refKey]; if (!_isNil(node)) { checkedItems.push(node); } }); return checkedItems; } export function getNodeCheckState(_ref) { var nodes = _ref.nodes, node = _ref.node, cascade = _ref.cascade, childrenKey = _ref.childrenKey; if (_isNil(nodes[node.refKey])) { return CHECK_STATE.UNCHECK; } if (!node[childrenKey] || !node[childrenKey].length || !cascade) { nodes[node.refKey].checkAll = false; return node.check ? CHECK_STATE.CHECK : CHECK_STATE.UNCHECK; } if (isEveryChildChecked(nodes, node)) { nodes[node.refKey].checkAll = true; nodes[node.refKey].check = true; return CHECK_STATE.CHECK; } if (isSomeChildChecked(nodes, node, childrenKey)) { nodes[node.refKey].checkAll = false; return CHECK_STATE.INDETERMINATE; } return CHECK_STATE.UNCHECK; }